pax_global_header00006660000000000000000000000064141444675120014522gustar00rootroot0000000000000052 comment=2e9f2f6967e44ce2bf8f34932b5bdd738ece2161 systemtap-4.6/000077500000000000000000000000001414446751200134245ustar00rootroot00000000000000systemtap-4.6/.gitignore000066400000000000000000000006471414446751200154230ustar00rootroot00000000000000*~ #* *# .#* autom4te.* cscope.files cscope*out gmon.out config.h config.log config.status .deps loc2c-test run-stap run-staprun stamp-h1 stap staprun/staprun testresults staprun/stapio stap_merge CVS .checkstyle .cproject .metadata .project .settings .autotools SNAPSHOT *.o git_version.h Makefile build-elfutils include-elfutils lib-elfutils stamp-elfutils dtrace stappaths.7 .zanata-cache build-log.txt macros.systemtap systemtap-4.6/.mailmap000066400000000000000000000043611414446751200150510ustar00rootroot00000000000000# Early history did not include userid->full-name mappings, so we do # that explicitly here. Aaron Merey Aaron Merey Ananth N Mavinakayanahalli Anil Keshavamurthy bibo mao Brad Chen Charles Spirakis Dave Brolley Dave Nomura David Smith David J. Wilder Denys Vlasenko Don Domingo Elliott Baron Eugene Teo Frank Ch. Eigler Frederic Turgis Graydon Hoare HATAYAMA Daisuke Hien Nguyen Jim Keniston Josh Stone Kai Meyer Kent Sebastian Kevin Stafford K.Prasad Li Guanglei Mark McLoughlin Martin Hunt Masami Hiramatsu Maynard Johnson Michael Behm Mike Mason Prasanna S Panchamukhi Prerna Saxena Rajan Arora Roland McGrath Rusty Lynch Shaohua Li Srikar Dronamraju Srinivasa DS Thang Nguyen Tom Zanussi Wenji Huang William Cohen Zhaolei Zhaolei # Normalize a few git commit names too Anithra Janakiraman Breno Leitao Bryn M. Reeves Dave Nomura Don Domingo K.Prasad K.Prasad Kent Sebastian Maran Pakkirisamy Mark Wielaard Negreanu Marius Adrian Negreanu Marius Adrian Prerna Saxena Przemysław Pawełczyk Przemysław Pawełczyk Srinivasa DS Wenji Huang Wenji Huang William Cohen William Cohen Rayson Ho Rayson Ho Tomoki Sekiyama Yichun Zhang (agentzh) systemtap-4.6/ABOUT-NLS000066400000000000000000002671331414446751200146670ustar00rootroot000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. systemtap-4.6/AUTHORS000066400000000000000000000064371414446751200145060ustar00rootroot00000000000000Aaron Merey Aaron Tomlin Abegail Jakop Adrien Kunysz Alexander Lochmann Alexander Y. Fomichev Alexandra Hájková Alfred Landrum Alice Zhang Ananth N Mavinakayanahalli Andre Detsch Andreas Müller Andy Fitzsimon Anil Keshavamurthy Anithra Janakiraman Anton Vorontsov Arjun Shankar Aryeh Weinreb Athira Atsushi Tsuji Benjamin Coddington Bernhard M. Wiedemann Bernhard Wiedemann Bingwu Yang Brendan Gregg Breno Leitao Brent Baude Brian Chrisman Bryn M. Reeves Carlos O'Donell Casey Dahlin Charles Spirakis Charley Wang Chris Meek Chung-Lin Tang Cody Santing Cosmin Tanislav Craig Ringer Daan Spitz Dan Horak Daniel Migault Daniel Tschan Dave Brolley Dave Nomura David J. Wilder David Juran David Smith David Ward Dennis Gilmore Di Chen Diego Elio Pettenò Ding Hui Don Domingo Du Zhe Elliott Baron Erick Tryzelaar Eugene Teo Eugeniy Meshcheryakov Fabio Olive Leite Fahad Arshad Felix Lin Felix Lu Francis Giraldeau Frank Ch. Eigler Frank Sorenson Frederic Turgis Fredrik Östman Grant Edwards Graydon Hoare Guilherme G. Piccoli Guillaume Morin Gustavo Moreira HATAYAMA Daisuke Han Pingtian Hemant Kumar Hien Nguyen Hilko Bengen Honggyu Kim Hou Tao Hushan Jia Igor Gnatenko Igor Zhbanov Iryna Shcherbina Ivan Diorditsa Jafeer Uddin Jakub Jelinek James Bottomley Jamie Bainbridge Jan Kratochvil Jeff Moyer Jesper Brouer Jim Keniston Jiri Horky Jiri Slaby Joe Gorse JoeLynn Keniston Jonathan Lebon Jose Castillo Josh Stone Junlong Li Juri Lelli Jóhann B. Guðmundsson K.Prasad Kai Meyer Kamil Dudka Kapileshwar Singh (KP) Keiichi KII Ken Raeburn Kent Sebastian Kevin Stafford Kim van der Riet Kiran Prakesh Kyle Walker Lars R. Damerow Li Guanglei Lubomir Rintel Lukas Berk Lukas Czerner Lukas Herbolt Lukáš Hejtmánek Mahesh J Salgaonkar Malte Nuhn Maran Pakkirisamy Marc Milgram Marcin Nowakowski Mark McLoughlin Mark Wielaard Martin Cermak Martin Hunt Martin Lazar Masami Hiramatsu Masanari Iida Masatake YAMATO Mateusz Guzik Maynard Johnson Michael Meeks Michal Toman Mikael Dubik Mike Mason Mikhail Kulemin Miroslav Franc Nan Xiao Naresh Kamboju Nathan Scott Negreanu Marius Adrian Nicolas Brito Nikolay Borisov Nir Soffer Nitin A Kamble Nobuhiro Tachino Oleksandr Chumachenko Orivej Desh Otavio Pontes Paddie O'Brien Paulo Andrade Peter Feiner Peter Kjellström Peter Robinson Petr Matousek Petr Muller Petr Viktorin Phil Muldoon Prerna Saxena Przemysław Pawełczyk Qiao Nuohan Quentin Barnes Rajan Arora Rajasekhar Duddu Raphaël Beamonte Ravi Bangoria Rayson Ho Rich Megginson Richard Fontana Richard Henderson Richard Purdie Ritesh Raj Sarraf Robb Romans Robin Hack Robin Lee Roland Grunberg Roland McGrath Ross Burton Ruslan Kuprieiev Rüdiger Sonderfeld Sagar Patel Sandipan Das Santosh Shukla Saul Wold Sergei Trofimovich Serguei Makarov Serhei Makarov Sevan Janiyan Shaohua Li Siddhesh Poyarekar Snehal Phule Srikar Dronamraju Srinivasa DS Stan Cox Stefan Hajnoczi Steve Dickson Sultan Alsawaf Sunzen Wang Sven Wegener Tetsuo Handa Thang Nguyen Theodore Ts'o Thorsten Glaser Tim Moore Timm Bäder Timo Juhani Lindfors Tom Callaway Tom Stellard Tom Tromey Tom Zanussi Tomoki Sekiyama Tony Jones Torsten Polle Varun Chandramohan Victor Kamensky Vincent Bernat Vitaly Mayatskikh Wade Farnsworth Wenji Huang Wenzong Fan William Cohen Yaakov Selkowitz Yang Wen Yichun Zhang (agentzh) Yoshihide Sonoda Zexuan Luo Zhaolei Zhou Wenjian Zifei Tong ch huang systemtap-4.6/AUTHORS.sh000077500000000000000000000004651414446751200151150ustar00rootroot00000000000000#! /bin/sh # Create the AUTHORS file, by searching the git history. # Run as "AUTHORS.sh" to get complete history # Run with "AUTHORS.sh commitish..commitish" for history between tags # shortlog will canonicalize the names using the file .mailmap git shortlog -s ${1-} | cut -b8- # strip the commit counts systemtap-4.6/COPYING000066400000000000000000000432541414446751200144670ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. systemtap-4.6/EXAMPLES000077700000000000000000000000001414446751200224022testsuite/systemtap.examplesustar00rootroot00000000000000systemtap-4.6/HACKING000066400000000000000000000201351414446751200144140ustar00rootroot00000000000000This text describes contribution procedures to systemtap. Please read and understand them before jumping in. Discussions take place on the mailing list. - general Submissions should be in an easy-to-read diff/patch form, unless this is inappropriate due to size, relevance, or fraction of novel content. They should be accompanied by an explanation. The relevant test suites should be run before and after your changes, and regressions avoided, explained, or corrected. Established contributors may be considered for direct GIT write access. Other contributors should simply pack up the goods into a plain text email message to the mailing list. It is not necessary to include machine-generated files like autoconf*, sample-script indexes, etc. in patches posted for review. - obvious changes Trivial, obvious patches may be posted or committed without other formalities. - copyright You must designate the appropriate copyright holder for your contribution. If not already there, this name should be added by your patch to the copyright header in the affected files. The copyright holder is assumed to agree with the general licensing terms (GPLv2+). - coding style Abide by the general formatting of the code you are modifying. The code base generally follows the GNU standards in usermode code and the Linux kernel standards in runtime code. - commit messages In the git commit message, make the first line a brief (<=50 char) summary of the patch, and leave the second line blank. If you have trouble coming up with a concise summary, consider whether your patch might be better broken into smaller commits. For trivial changes, the summary alone may be sufficient, but most commits should include a paragraph or two giving more details about what the change is and why it is needed. Extra information like bugzilla numbers and mailing-list discussion links are appreciated as a supplement, but they are not a replacement for a real description. - test suites As far as practicable, changes should be accompanied by test cases to prevent future regressions. Tests should be run on at least x86, and ideally also on some 64-bit platform. The test suite is located under /src/testsuite and is based on dejagnu. "make check" runs unprivileged tests only against an uninstalled build tree. "make installcheck" runs all tests against an installed tree. Tests that don't require probe execution should go into new or modified files under the *{ok,ko} directories, which are scanned by corresponding systemtap.pass1-4/*.exp files. The "ko" tests are for expected (deliberate) errors. Tests that execute probes (pass 5) should include their own .exp/.stp files under any other appropriate systemtap.* testsuite subdirectory. To run a particular test or set of tests, do: cd testsuite make check RUNTESTFLAGS=testname.exp or make installcheck RUNTESTFLAGS=testname.exp To disambiguate among multiple tests with the same name, specify the directory as well -- for example: make installcheck RUNTESTFLAGS=systemtap.base/print.exp - translator Translator changes can easily invalidate tapsets and user script code. One must tread carefully and run regression tests rigorously. Both positive and negative polarity (expect-pass / expect-fail) test cases may need to be written to assert a bug fix. Script language changes should be documented in the stap.1 man page and emphasized in the NEWS file. - tapsets Tapset script files should demonstrate effective economy, and avoid conflicts with user and other tapset code. It may be necessary to prefix symbols with the tapset name to ensure systemtap-wide uniqueness. All "external interfaces" expected to be used by user scripts (or perhaps other tapsets) should be documented -- either in stapprobes.3stap if they are built into the language or otherwise somehow essential; or in kernel-doc style comments if they are defined in a tapset (see almost any existing tapset for an example of how this is done); any new tapset should be mentioned in doc/SystemTap_Tapset_Reference/tapsets.tmpl. Major or incompatible changes should be mentioned in the NEWS file; see also the deprecation section below. Internal function, variable, probe identifiers should be prefixed with "_" for extra uniqueness, and not documented in the man pages. Tapsets should come with a tests cases that provide good test coverage. Every alias definition should be tested for pass-2 correctness. Every embedded-C routine should be tested for pass-4 buildability. As they are a security hazard, every tapset embedded-C routine should be pass-5 stress-tested for response to erroneous inputs. This applies doubly to /* unprivileged */ ones. The platforms/architectures against which the tapset was tested should be published, and ideally asserted by code. Embedded-C code should avoid making references to the runtime or other code possibly generated by the translator. Embedded-C code that dereferences pointers should use deref() type functions to check each individual operation if there exists a possibility that the function may be called with invalid pointers or pointer chains. - deprecation Try to remain compatible with existing valid scripts, with respect to changes in the script language or the tapset. Where this is not practicable, preserve the old functionality using the %( systemtap_v %) preprocessor conditional in the tapset and systemtap_session.compatible in the translator. If needed, after several major releases, deprecated functionality may be dropped outright. Note both pending and final deprecation in NEWS and the permanent DEPRECATION section in stap.1. The intent is to protect old scripts for a year or longer. Tapset functions to be deprecated should be kept for at least one major release. For example, if we're in development between versions 1.2 and 1.3, wrap to-be-deprecated tapset functions or probes in %( systemtap_v <= "1.3" %? function foo() {} %) so as to preserve the tapset function during the life of the 1.3 release. Script language changes that cause earlier valid scripts to become invalid should be opt-in (requiring --compatible=NEWVERSION) for at least one major release before becoming default. For example, test strverscmp(s.compatible.c_str(), "1.4") >= 0 in the 1.3 release sources in order to activate the change. - runtime Changes to the runtime can cause problems on different architectures or kernel versions. Luckily, many code mistakes show up easily in the pass-4 tests. - i18n We use the zanata [1] system for managing translations of runtime strings. If interested, create yourself a zanata account, and help translate online! In addition, you can ship systemtap sources to/from zanata by installing the zanata-cli and getting a $HOME/.config/zanata.ini file, thereafter following the advice [2][3] of "make update-po" (invoked from the top of the build tree). [1] https://translate.zanata.org/zanata/iteration/view/systemtap/master [2] http://zanata.org/help/cli/cli-push [3] http://zanata.org/help/cli/cli-pull - meta Proposed changes to these guidelines should be discussed on the mailing list. - git basics git clone ssh://sourceware.org/git/systemtap.git # OR: use git://sourceware.org/git/systemtap.git then add to .git/config: # [remote "origin"] # pushurl=ssh://sourceware.org/git/systemtap.git # build ; hack hack hack; test git add FILE1 FILE2 # enumerate all modified or new files git status # to confirm that needed local changes are "staged" git commit # to your local repository, add nice commit message git show # to check that the last commit included all changes git pull # to make sure your copy is up to date & merged # last minute rebuild; retest git rebase origin/main # clean git commit of merge history git diff origin/main # final visual check git push # to the central one, if you have access OR git format-patch -s origin/main.. then email the resulting files to the mailing list systemtap-4.6/INSTALL000066400000000000000000000224501414446751200144600ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 6. Often, you can also type `make uninstall' to remove the installed files again. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. systemtap-4.6/INTERNALS000066400000000000000000000135271414446751200147160ustar00rootroot00000000000000The Systemtap Translator - a tour on the inside Outline: - general principles - main data structures - pass 1: parsing - pass 2: semantic analysis (parts 1, 2, 3) - pass 3: translation (parts 1, 2) - pass 4: compilation - pass 5: run ------------------------------------------------------------------------ Translator general principles - written in standard C++ - mildly O-O, sparing use of C++ features - uses "visitor" concept for type-dependent (virtual) traversal ------------------------------------------------------------------------ Main data structures - abstract syntax tree - family of types and subtypes for language parts: expressions, literals, statements - includes outermost constructs: probes, aliases, functions - an instance of "stapfile" represents an entire script file - each annotated with a token (script source coordinates) - data persists throughout run - session - contains run-time parameters from command line - contains all globals - passed by reference to many functions ------------------------------------------------------------------------ Pass 1 - parsing - hand-written recursive-descent - language specified in man page - reads user-specified script file - also searches path for all <*.stp> files, parses them too - => syntax errors are caught immediately, throughout tapset - now includes baby preprocessor probe kernel. %( kernel_v == "2.6.9" %? inline("foo") %: function("bar") %) { } - enforces guru mode for embedded code %{ C %} ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 1: resolve symbols - code in - want to know all global and per-probe/function local variables - one "vardecl" instance interned per variable - fills in "referent" field in AST for nodes that refer to it - collect "needed" probe/global/function list in session variable - loop over file queue, starting with user script "stapfile" - add to "needed" list this file's globals, functions, probes - resolve any symbols used in this file (function calls, variables) against "needed" list - if not resolved, search through all tapset "stapfile" instances; add to file queue if matched - if still not resolved, create as local scalar, or signal an error ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 2: resolve types - fills in "type" field in AST - iterate along all probes and functions, until convergence - infer types of variables from usage context / operators: a = 5 # a is a pe_long b["foo",a]++ # b is a pe_long array with indexes pe_string and pe_long - loop until no further variable types can be inferred - signal error if any still unresolved ------------------------------------------------------------------------ Pass 2 - semantic analysis - step 3: resolve probes - probe points turned to "derived_probe" instances by code in - derived_probes know how to talk to kernel API for registration/callbacks - aliases get expanded at this point - some probe points ("begin", "end", "timer*") are very simple - dwarf ("kernel*", "module*") implementation very complicated - target-variables "$foo" expanded to getter/setter functions with synthesized embedded-C ------------------------------------------------------------------------ Pass 3 - translation - step 1: data - - we now know all types, all variables - strings are everywhere copied by value (MAXSTRINGLEN bytes) - emit data storage mega-struct "context" for all probes/functions - array instantiated per-CPU, per-nesting-level - can be pretty big static data ------------------------------------------------------------------------ Pass 3 - translation - step 2: code - map script functions to C functions taking a context pointer - map probes to two C functions: - one to interface with the probe point infrastructure (kprobes, kernel timer): reserves per-cpu context - one to implement probe body, just like a script function - emit global startup/shutdown routine to manage orderly registration/deregistration of probes - expressions/statements emitted in "natural" evaluation sequence - emit code to enforce activity-count limits, simple safety tests - global variables protected by locks global k function foo () { k ++ } # write lock around increment probe bar { if (k>5) ... } # read lock around read - same thing for arrays, except foreach/sort take longer-duration locks ------------------------------------------------------------------------ Pass 4 - compilation - - write out C code in a temporary directory - call into kbuild makefile to build module ------------------------------------------------------------------------ Pass 5 - running - run "staprun" - clean up temporary directory - nothing to it! ------------------------------------------------------------------------ Peculiarities - We tend to use visitor idioms for polymorphic traversals of parse trees, in preference to dynamic_cast<> et al. The former is a little more future-proof and harder to break accidentally. {reinterpret,static}_cast<> should definitely be avoided. - We use our interned_string type (a derivative of boost::string_ref) to use shareable references to strings that may be used in duplicate many times. It can slide in for std::string most of the time. It can save RAM and maybe even CPU, if used judiciously: such as for frequently duplicated strings, duplicated strings, duplicated strings, duplicated. OTOH, it costs CPU (for management of the interned string set, or if copied between std::string and interned_string unnecessarily), and RAM (2 pointers when empty, vs. 1 for std::string), and its instances are not modifiable, so tradeoffs must be confirmed with tools like memusage, massif, perf-stat, etc. systemtap-4.6/Makefile.am000066400000000000000000000373151414446751200154710ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap ## process this file with automake to produce Makefile.in # we don't maintain a ChangeLog, which makes us non-GNU -> foreign AUTOMAKE_OPTIONS = no-dist foreign pkglibexecdir = ${libexecdir}/${PACKAGE} oldincludedir = ${includedir}/sys AM_CPPFLAGS = -DBINDIR='"$(bindir)"' \ -DSYSCONFDIR='"$(sysconfdir)"' \ -DPKGDATADIR='"$(pkgdatadir)"' \ -DPKGLIBDIR='"$(pkglibexecdir)"' \ -DLOCALEDIR='"$(localedir)"' \ -DDOCDIR='"$(docdir)"' \ -DPYEXECDIR='"$(pyexecdir)"' \ -DPY3EXECDIR='"$(py3execdir)"' \ -I$(srcdir)/includes -I$(builddir)/includes/sys AM_CFLAGS = -D_GNU_SOURCE -fexceptions -Wall -Wextra -Werror -Wunused -Wformat=2 -W AM_CXXFLAGS = -Wall -Wextra -Werror bin_SCRIPTS = stap-report pkglibexec_SCRIPTS = stap-env oldinclude_HEADERS = includes/sys/sdt.h includes/sys/sdt-config.h bin_PROGRAMS = if BUILD_TRANSLATOR bin_PROGRAMS += stap bin_SCRIPTS += dtrace pkglibexec_PROGRAMS = if HAVE_NSS pkglibexec_PROGRAMS += stap-sign-module stap-authorize-cert if BUILD_SERVER pkglibexec_PROGRAMS += stap-serverd stap-gen-cert bin_SCRIPTS += stap-server pkglibexec_SCRIPTS += stap-start-server stap-stop-server endif endif stap_SOURCES = main.cxx session.cxx \ parse.cxx staptree.cxx elaborate.cxx translate.cxx \ tapsets.cxx buildrun.cxx loc2stap.cxx hash.cxx mdfour.c \ cache.cxx util.cxx coveragedb.cxx dwarf_wrappers.cxx \ tapset-been.cxx tapset-procfs.cxx tapset-timers.cxx tapset-netfilter.cxx \ tapset-perfmon.cxx tapset-mark.cxx tapset-itrace.cxx \ tapset-utrace.cxx task_finder.cxx dwflpp.cxx rpm_finder.cxx \ setupdwfl.cxx remote.cxx privilege.cxx cmdline.cxx \ tapset-dynprobe.cxx tapset-method.cxx translator-output.cxx \ stapregex.cxx stapregex-tree.cxx stapregex-parse.cxx \ stapregex-dfa.cxx stringtable.cxx tapset-python.cxx \ analysis.cxx noinst_HEADERS = sdt_types.h stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ @LIBINTL@ -lpthread @debuginfod_LIBS@ @DYNINST_LDFLAGS@ @DYNINST_LIBS@ stap_DEPENDENCIES = if HAVE_LIBREADLINE stap_SOURCES += interactive.cxx stap_LDADD += @READLINE_LIBS@ endif if HAVE_BPF_DECLS stap_SOURCES += bpf-base.cxx bpf-bitset.cxx bpf-translate.cxx bpf-opt.cxx endif if BUILD_VIRT bin_PROGRAMS += stapvirt stapvirt_SOURCES = stapvirt.c stapvirt_CFLAGS = $(AM_CFLAGS) stapvirt_CFLAGS += $(libvirt_CFLAGS) $(libxml2_CFLAGS) stapvirt_LDFLAGS = $(AM_LDFLAGS) stapvirt_LDADD = $(libvirt_LIBS) $(libxml2_LIBS) endif endif all: macros.systemtap macros.systemtap: $(srcdir)/macros.systemtap.in sed -e "s#@pkgdatadir@#$(pkgdatadir)#g" < $< > $@ install: all $(MAKE) $(AM_MAKEFLAGS) install-recursive BUILT_SOURCES = CLEANFILES = # Arrange for git_version.h to be regenerated at every "make". # Code fragment is based upon RadeonHD.am. # The stamp file which is never created ensures that git_version.h is updated # before every build. Having git_version.h in foo_SOURCES ensures a recompile # of foo-bar.c if it is newer than the foo-bar.o file. Using noinst_foo_SOURCES # instead of foo_SOURCES prevents shipping git_version.h in dist tarballs, # which may cause false GIT_FOO readings. BUILT_SOURCES += git_version.stamp CLEANFILES += git_version.h GIT_VERSION_CMD = $(SHELL) $(top_srcdir)/git_version.sh git_version.stamp: @if test -f "$(srcdir)/git_version.h"; then \ if test -f "git_version.h"; then :; \ else \ cp "$(srcdir)/git_version.h" "git_version.h"; \ fi; \ fi $(GIT_VERSION_CMD) -k -s $(top_srcdir) -o git_version.h @if test -s "$(srcdir)/git_version.h"; then \ if cmp "$(srcdir)/git_version.h" "git_version.h"; then :; \ else \ echo "Error: $(srcdir)/git_version.h and git_version.h differ."; \ echo " You probably want to remove the former."; \ exit 1; \ fi; \ fi git_version.h: $(srcdir)/git_version.sh -k --srcdir $(srcdir) -o git_version.h cscope: cd $(srcdir) && \ (echo -q ; git ls-files '*.cxx' '*.c' '*.h' | grep -v '^testsuite' ) > cscope.files && \ cscope -b -q @DYNINST_CXXFLAGS@ PHONIES = if BUILD_TRANSLATOR stap_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ stap_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ @ALIGNEDNEW@ stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 stap_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BOOST_SYSTEM_LIB@ if HAVE_AVAHI stap_CXXFLAGS += $(avahi_CFLAGS) stap_CPPFLAGS += $(avahi_CFLAGS) stap_LDADD += $(avahi_LIBS) endif if NEED_BASE_CLIENT_CODE stap_SOURCES += csclient.cxx endif if HAVE_NSS stap_SOURCES += nsscommon.cxx client-nss.cxx cscommon.cxx nss-server-info.cxx stap_CFLAGS += $(nss_CFLAGS) -DSTAP stap_CXXFLAGS += $(nss_CFLAGS) stap_CPPFLAGS += $(nss_CFLAGS) stap_LDADD += $(nss_LIBS) install-exec-local: install-scripts PHONIES += install-scripts # scripts must be installed before this rule is run install-scripts: install-binSCRIPTS install-pkglibexecSCRIPTS for f in $(bin_SCRIPTS); do \ sed -i -e "s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(bindir)/$$f; \ done for f in $(pkglibexec_SCRIPTS); do \ sed -i -e "/INSTALL-HOOK/d;s,sysconfdir=.*,sysconfdir=$(sysconfdir),;s,pkglibexecdir=.*,pkglibexecdir=$(pkglibexecdir)/,;s,localstatedir=.*,localstatedir=$(localstatedir),;s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(pkglibexecdir)/$$f; \ done endif if HAVE_HTTP_SUPPORT stap_SOURCES += client-http.cxx stap_LDADD += $(libcurl_LIBS) $(jsonc_LIBS) $(openssl_LIBS) endif endif CLEANFILES += $(pkglibexec_PROGRAMS) if BUILD_TRANSLATOR if HAVE_NSS stap_sign_module_SOURCES = stap-sign-module.cxx nsscommon.cxx util.cxx stap_sign_module_CPPFLAGS = $(AM_CPPFLAGS) stap_sign_module_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_sign_module_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_sign_module_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_sign_module_LDADD = $(nss_LIBS) $(debuginfod_LIBS) if HAVE_HTTP_SUPPORT stap_sign_module_LDADD += $(openssl_LIBS) endif stap_authorize_cert_SOURCES = stap-authorize-cert.cxx nsscommon.cxx util.cxx stap_authorize_cert_CPPFLAGS = $(AM_CPPFLAGS) stap_authorize_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_authorize_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_authorize_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_authorize_cert_LDADD = $(nss_LIBS) $(debuginfod_LIBS) if HAVE_HTTP_SUPPORT stap_authorize_cert_LDADD += $(openssl_LIBS) endif if BUILD_SERVER stap_serverd_SOURCES = stap-serverd.cxx cscommon.cxx util.cxx privilege.cxx nsscommon.cxx cmdline.cxx stap_serverd_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_serverd_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_serverd_LDADD = $(nss_LIBS) -lpthread $(debuginfod_LIBS) if HAVE_AVAHI stap_serverd_CFLAGS += $(avahi_CFLAGS) stap_serverd_CXXFLAGS += $(avahi_CFLAGS) stap_serverd_LDADD += $(avahi_LIBS) endif if HAVE_HTTP_SUPPORT stap_serverd_LDADD += $(openssl_LIBS) endif stap_gen_cert_SOURCES = stap-gen-cert.cxx util.cxx nsscommon.cxx stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) stap_gen_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) stap_gen_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ stap_gen_cert_LDADD = $(nss_LIBS) $(debuginfod_LIBS) if HAVE_HTTP_SUPPORT stap_gen_cert_LDADD += $(openssl_LIBS) endif endif endif endif # crash(8) extension if BUILD_CRASHMOD STAPLOG=staplog.so $(STAPLOG): staplog.c $(CC) $(staplog_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -shared -rdynamic \ $(AM_LDFLAGS) $(LDFLAGS) -fPIC -o $@ $< all-local: $(STAPLOG) example_index install-exec-local: $(STAPLOG) $(MKDIR_P) $(DESTDIR)$(pkglibdir) $(INSTALL) $(STAPLOG) $(DESTDIR)$(pkglibdir) else all-local: example_index endif # Get extra libs as needed LDADD = EXAMPLE_SOURCE_DIR = $(srcdir)/testsuite/systemtap.examples EXAMPLE_META_FILES = $(EXAMPLE_SOURCE_DIR)/*/*.meta example_index: $(EXAMPLE_SOURCE_DIR)/index.html $(EXAMPLE_SOURCE_DIR)/index.html: $(EXAMPLE_META_FILES) $(EXAMPLE_INDEX_GEN) @echo "The script example index is outdated, run" @echo " cd $(EXAMPLE_SOURCE_DIR) && \\ " @echo " perl examples-index-gen.pl" @echo "to regenerate it." install-data-local: (cd $(srcdir)/runtime; for f in *.[ch]; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/$$f; done) if HAVE_DYNINST (cd $(srcdir)/runtime/dyninst; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/dyninst/$$f; done) endif (cd $(srcdir)/runtime/unwind; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/unwind/$$f; done) (cd $(srcdir)/runtime/transport; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/transport/$$f; done) (cd $(srcdir)/runtime/softfloat; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/softfloat/$$f; done) (cd $(srcdir)/runtime/linux; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/$$f; done) (cd $(srcdir)/runtime/linux/uprobes; for f in Makefile *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes/$$f; done) (cd $(srcdir)/runtime/linux/uprobes2; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes2/$$f; done) (cd $(srcdir)/tapset; find . \( -name '*.stp' -o -name '*.stpm' -o -name README \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/tapset/$$f; done) (cd $(srcdir)/testsuite/systemtap.examples; find . -type f -print \ | egrep -v 'check.exp|ChangeLog|examples-index-gen.pl|html/.*\.tmpl|metadatabase.dbq$$' \ | while read f; do if test -x $$f; then \ i_cmd="$(INSTALL_PROGRAM)"; else \ i_cmd="$(INSTALL_DATA)"; fi; \ $$i_cmd -D $$f $(DESTDIR)$(pkgdatadir)/examples/$$f; done) test -e $(DESTDIR)$(sysconfdir)/systemtap || mkdir -p $(DESTDIR)$(sysconfdir)/systemtap if BUILD_SERVER test -e $(DESTDIR)$(localstatedir)/run/stap-server || mkdir -p $(DESTDIR)$(localstatedir)/run/stap-server test -e $(DESTDIR)$(localstatedir)/log || mkdir -p $(DESTDIR)$(localstatedir)/log endif TEST_COV_DIR = coverage gcov: find . -name '*.gc*' | xargs rm -f $(MAKE) clean CXXFLAGS="-g -fprofile-arcs -ftest-coverage" CFLAGS="-g -fprofile-arcs -ftest-coverage" all install -sudo $(MAKE) installcheck $${RUNTESTFLAGS+RUNTESTFLAGS=$${RUNTESTFLAGS}} for dir in $(SUBDIRS); do \ (cd $$dir; gcov *.gcno > SUMMARY.gcov 2>&1 || true); \ done find . -name '*.gcov' clean-local: rm -rf ${PACKAGE_TARNAME}-*.tar.gz rm -rf ${PACKAGE_TARNAME}-${PACKAGE_VERSION} rm -rf $(TEST_COV_DIR) rm -rf stap.info rm -rf staplog.so distclean-local: rm -f doc/beginners/en-US doc/beginners/build/en-US/testsuite uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir) rm -rf $(DESTDIR)$(libdir)/$(PACKAGE) -rm -rf $(DESTDIR)$(localstatedir)/cache/$(PACKAGE) @list='$(EXAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(EXAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(EXAMPLE_INSTALL_DIR)/$$p"; \ done @list='$(DEMO_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(DEMO_INSTALL_DIR)/$$p'"; \ rm -f "$(DEMO_INSTALL_DIR)/$$p"; \ done @list='$(SAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(SAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(SAMPLE_INSTALL_DIR)/$$p"; \ done rm -rf $(DESTDIR)$(sysconfdir)/systemtap rm -rf $(DESTDIR)$(docdir)/examples if BUILD_SERVER rm -rf $(DESTDIR)$(localstatedir)/run/stap-server rm -f $(DESTDIR)$(localstatedir)/log/stap-server/log endif SUBDIRS = . java python stapdyn staprun stapbpf doc man po httpd stap-exporter # NB: the gcov target above uses this to enumarate linked binaries' build directories DIST_SUBDIRS = testsuite $(SUBDIRS) EXTRA_DIST = m4/ChangeLog check-local: SRCDIR=`cd $(srcdir); pwd`; \ PWD=`pwd`; \ $(MAKE) -C testsuite check SYSTEMTAP_RUNTIME=$$SRCDIR/runtime SYSTEMTAP_TAPSET=$$SRCDIR/tapset LD_LIBRARY_PATH=$$LD_LIBRARY_PATH$${LD_LIBRARY_PATH:+:}$$PWD/lib-elfutils:$$PWD/lib-elfutils/systemtap SYSTEMTAP_PATH=$$PWD SYSTEMTAP_INCLUDES=$$PWD/includes RUNTESTFLAGS="$(RUNTESTFLAGS)" PKGLIBDIR="$(pkglibexecdir)"; installcheck: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" installcheck-parallel: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck-parallel RUNTESTFLAGS="$(RUNTESTFLAGS)" list-unfinished: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite list-unfinished RUNTESTFLAGS="$(RUNTESTFLAGS)" PHONIES += runcheck # All the variables are overridden by run-stap, but SYSTEMTAP_RUNTIME # is used by the testsuite scripts themselves. runcheck: testsuite/stap testsuite/dtrace $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" \ SYSTEMTAP_PATH="`cd testsuite; pwd`" \ SYSTEMTAP_RUNTIME="`cd $(srcdir)/runtime; pwd`" testsuite/stap: run-stap (echo '#!/bin/sh'; echo "exec `pwd`/run-stap" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ testsuite/dtrace: dtrace (echo '#!/bin/sh'; echo "exec `pwd`/dtrace" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ PHONIES += update-po update-po: (cd $(srcdir); ls -1d *.c *.cxx *.h staprun/*.c staprun/*.h) \ | grep -v loc2c-test.c \ | grep -v config.h \ | grep -v git_version.h \ | grep -v staprun/config.h \ | sort > $(srcdir)/po/POTFILES.in $(MAKE) -C po update-po @echo @echo if systemtam.pot is shown as modified ... @echo (cd $(srcdir)/po; git status *.pot) @echo @echo ... then check in with zanata ... @echo @echo % cd $(srcdir) @echo % zanata-cli -B push -s po -t po @echo % zanata-cli -B pull -s po -t po @echo @echo if the .po files are shown as modified ... @echo (cd $(srcdir)/po; git status *.po) @echo @echo ... regenerate just once ... @echo @echo % $(MAKE) -C `pwd` update-po # Any extra flags, such as: # --define "with_docs 0" # --define "elfutils_version 0.135" RPMBUILDFLAGS= PHONIES += dist-gzip rpm srpm PHONIES += uprobes install-uprobes uprobes: $(MAKE) -C $(srcdir)/runtime/uprobes clean default install-uprobes: $(MAKE) -C $(DESTDIR)$(pkgdatadir)/runtime/uprobes clean default .PHONY: $(PHONIES) dist-gzip: cd $(srcdir); git status | grep working.directory.clean || (echo "You should commit your changes before 'make rpm'.") (cd $(srcdir); git archive --prefix=systemtap-$(VERSION)/ --format=tar HEAD) | gzip > systemtap-$(VERSION).tar.gz rpm: dist-gzip if [ `id -u` = 0 ]; then echo NOTE: do not run this as root; exit 1; fi if [ ! -w `rpm --eval %_topdir` ]; then \ echo WARNING: you do not have access to `rpm --eval %_topdir`; \ echo WARNING: you may receive a permission denied error; \ echo WARNING: consider adding \'%_topdir $(HOME)/rpmbuild\' to $(HOME)/.rpmmacros; \ fi mkdir -p `rpm --eval %_specdir` mkdir -p `rpm --eval %_srcrpmdir` mkdir -p `rpm --eval %_rpmdir` mkdir -p `rpm --eval %_builddir` mkdir -p `rpm --eval %_buildroot` rpmbuild --define "_sourcedir $(PWD)/" --define "release_override .`date +%Y%m%d%H%M`" -ta systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) srpm: dist-gzip mkdir -p `rpm --eval %_srcrpmdir` rpmbuild --define "_sourcedir $(PWD)/" -ts systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) ACLOCAL_AMFLAGS = -I m4 systemtap-4.6/Makefile.in000066400000000000000000006276621414446751200155140ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) @BUILD_TRANSLATOR_TRUE@am__append_1 = stap @BUILD_TRANSLATOR_TRUE@am__append_2 = dtrace @BUILD_TRANSLATOR_TRUE@pkglibexec_PROGRAMS = $(am__EXEEXT_3) \ @BUILD_TRANSLATOR_TRUE@ $(am__EXEEXT_4) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_3 = stap-sign-module stap-authorize-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_4 = stap-serverd stap-gen-cert @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_5 = stap-server @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_6 = stap-start-server stap-stop-server @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_7 = interactive.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__append_8 = @READLINE_LIBS@ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__append_9 = bpf-base.cxx bpf-bitset.cxx bpf-translate.cxx bpf-opt.cxx @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am__append_10 = stapvirt @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_11 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_12 = $(avahi_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__append_13 = $(avahi_LIBS) @BUILD_TRANSLATOR_TRUE@@NEED_BASE_CLIENT_CODE_TRUE@am__append_14 = csclient.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_15 = nsscommon.cxx client-nss.cxx cscommon.cxx nss-server-info.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_16 = $(nss_CFLAGS) -DSTAP @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_17 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_18 = $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_19 = $(nss_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__append_20 = install-scripts @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_21 = client-http.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__append_22 = $(libcurl_LIBS) $(jsonc_LIBS) $(openssl_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_23 = $(openssl_LIBS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_24 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_25 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_26 = $(avahi_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__append_27 = $(avahi_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_28 = $(openssl_LIBS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__append_29 = $(openssl_LIBS) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__noinst_HEADERS_DIST) \ $(oldinclude_HEADERS) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = includes/sys/sdt-config.h \ initscript/config.systemtap initscript/config.stap-server \ initscript/systemtap initscript/stap-server \ initscript/99stap/module-setup.sh initscript/99stap/install \ initscript/99stap/check run-stap dtrace \ java/org/systemtap/byteman/helper/HelperSDT.java \ staprun/guest/stapshd staprun/guest/stapsh-daemon \ staprun/guest/stapsh@.service CONFIG_CLEAN_VPATH_FILES = @BUILD_TRANSLATOR_TRUE@am__EXEEXT_1 = stap$(EXEEXT) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am__EXEEXT_2 = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ stapvirt$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" \ "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" \ "$(DESTDIR)$(oldincludedir)" @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__EXEEXT_3 = stap-sign-module$(EXEEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-authorize-cert$(EXEEXT) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__EXEEXT_4 = stap-serverd$(EXEEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-gen-cert$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(pkglibexec_PROGRAMS) @BUILD_TRANSLATOR_TRUE@@HAVE_LIBREADLINE_TRUE@am__objects_1 = stap-interactive.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@am__objects_2 = stap-bpf-base.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-bitset.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-translate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_BPF_DECLS_TRUE@ stap-bpf-opt.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@NEED_BASE_CLIENT_CODE_TRUE@am__objects_3 = stap-csclient.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__objects_4 = stap-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-client-nss.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-cscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap-nss-server-info.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__objects_5 = stap-client-http.$(OBJEXT) @BUILD_TRANSLATOR_TRUE@am_stap_OBJECTS = stap-main.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-session.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-parse.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-staptree.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-elaborate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-translate.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapsets.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-buildrun.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-loc2stap.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-hash.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-mdfour.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-cache.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-util.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-coveragedb.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-dwarf_wrappers.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-been.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-procfs.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-timers.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-netfilter.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-perfmon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-mark.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-itrace.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-utrace.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-task_finder.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-dwflpp.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-rpm_finder.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-setupdwfl.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-remote.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-privilege.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-cmdline.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-dynprobe.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-method.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-translator-output.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-tree.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-parse.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stapregex-dfa.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-stringtable.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-tapset-python.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ stap-analysis.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_1) $(am__objects_2) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_3) $(am__objects_4) \ @BUILD_TRANSLATOR_TRUE@ $(am__objects_5) stap_OBJECTS = $(am_stap_OBJECTS) am__DEPENDENCIES_1 = @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@am__DEPENDENCIES_2 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_3 = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) stap_LINK = $(CXXLD) $(stap_CXXFLAGS) $(CXXFLAGS) $(stap_LDFLAGS) \ $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_authorize_cert_OBJECTS = stap_authorize_cert-stap-authorize-cert.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_authorize_cert-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_authorize_cert-util.$(OBJEXT) stap_authorize_cert_OBJECTS = $(am_stap_authorize_cert_OBJECTS) @BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_5) stap_authorize_cert_LINK = $(CXXLD) $(stap_authorize_cert_CXXFLAGS) \ $(CXXFLAGS) $(stap_authorize_cert_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_gen_cert_OBJECTS = stap_gen_cert-stap-gen-cert.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_gen_cert-util.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_gen_cert-nsscommon.$(OBJEXT) stap_gen_cert_OBJECTS = $(am_stap_gen_cert_OBJECTS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_HTTP_SUPPORT_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_6) stap_gen_cert_LINK = $(CXXLD) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) \ $(stap_gen_cert_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_serverd_OBJECTS = stap_serverd-stap-serverd.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-cscommon.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-util.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-privilege.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-nsscommon.$(OBJEXT) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_serverd-cmdline.$(OBJEXT) stap_serverd_OBJECTS = $(am_stap_serverd_OBJECTS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_AVAHI_TRUE@@HAVE_NSS_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_7) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_6) stap_serverd_LINK = $(CXXLD) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) \ $(stap_serverd_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@am_stap_sign_module_OBJECTS = stap_sign_module-stap-sign-module.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_sign_module-nsscommon.$(OBJEXT) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ stap_sign_module-util.$(OBJEXT) stap_sign_module_OBJECTS = $(am_stap_sign_module_OBJECTS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__DEPENDENCIES_5) stap_sign_module_LINK = $(CXXLD) $(stap_sign_module_CXXFLAGS) \ $(CXXFLAGS) $(stap_sign_module_LDFLAGS) $(LDFLAGS) -o $@ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@am_stapvirt_OBJECTS = stapvirt-stapvirt.$(OBJEXT) stapvirt_OBJECTS = $(am_stapvirt_OBJECTS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_DEPENDENCIES = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(am__DEPENDENCIES_1) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(am__DEPENDENCIES_1) stapvirt_LINK = $(CCLD) $(stapvirt_CFLAGS) $(CFLAGS) \ $(stapvirt_LDFLAGS) $(LDFLAGS) -o $@ am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) $(pkglibexec_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/stap-analysis.Po \ ./$(DEPDIR)/stap-bpf-base.Po ./$(DEPDIR)/stap-bpf-bitset.Po \ ./$(DEPDIR)/stap-bpf-opt.Po ./$(DEPDIR)/stap-bpf-translate.Po \ ./$(DEPDIR)/stap-buildrun.Po ./$(DEPDIR)/stap-cache.Po \ ./$(DEPDIR)/stap-client-http.Po ./$(DEPDIR)/stap-client-nss.Po \ ./$(DEPDIR)/stap-cmdline.Po ./$(DEPDIR)/stap-coveragedb.Po \ ./$(DEPDIR)/stap-csclient.Po ./$(DEPDIR)/stap-cscommon.Po \ ./$(DEPDIR)/stap-dwarf_wrappers.Po ./$(DEPDIR)/stap-dwflpp.Po \ ./$(DEPDIR)/stap-elaborate.Po ./$(DEPDIR)/stap-hash.Po \ ./$(DEPDIR)/stap-interactive.Po ./$(DEPDIR)/stap-loc2stap.Po \ ./$(DEPDIR)/stap-main.Po ./$(DEPDIR)/stap-mdfour.Po \ ./$(DEPDIR)/stap-nss-server-info.Po \ ./$(DEPDIR)/stap-nsscommon.Po ./$(DEPDIR)/stap-parse.Po \ ./$(DEPDIR)/stap-privilege.Po ./$(DEPDIR)/stap-remote.Po \ ./$(DEPDIR)/stap-rpm_finder.Po ./$(DEPDIR)/stap-session.Po \ ./$(DEPDIR)/stap-setupdwfl.Po \ ./$(DEPDIR)/stap-stapregex-dfa.Po \ ./$(DEPDIR)/stap-stapregex-parse.Po \ ./$(DEPDIR)/stap-stapregex-tree.Po \ ./$(DEPDIR)/stap-stapregex.Po ./$(DEPDIR)/stap-staptree.Po \ ./$(DEPDIR)/stap-stringtable.Po \ ./$(DEPDIR)/stap-tapset-been.Po \ ./$(DEPDIR)/stap-tapset-dynprobe.Po \ ./$(DEPDIR)/stap-tapset-itrace.Po \ ./$(DEPDIR)/stap-tapset-mark.Po \ ./$(DEPDIR)/stap-tapset-method.Po \ ./$(DEPDIR)/stap-tapset-netfilter.Po \ ./$(DEPDIR)/stap-tapset-perfmon.Po \ ./$(DEPDIR)/stap-tapset-procfs.Po \ ./$(DEPDIR)/stap-tapset-python.Po \ ./$(DEPDIR)/stap-tapset-timers.Po \ ./$(DEPDIR)/stap-tapset-utrace.Po ./$(DEPDIR)/stap-tapsets.Po \ ./$(DEPDIR)/stap-task_finder.Po ./$(DEPDIR)/stap-translate.Po \ ./$(DEPDIR)/stap-translator-output.Po ./$(DEPDIR)/stap-util.Po \ ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po \ ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po \ ./$(DEPDIR)/stap_authorize_cert-util.Po \ ./$(DEPDIR)/stap_gen_cert-nsscommon.Po \ ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po \ ./$(DEPDIR)/stap_gen_cert-util.Po \ ./$(DEPDIR)/stap_serverd-cmdline.Po \ ./$(DEPDIR)/stap_serverd-cscommon.Po \ ./$(DEPDIR)/stap_serverd-nsscommon.Po \ ./$(DEPDIR)/stap_serverd-privilege.Po \ ./$(DEPDIR)/stap_serverd-stap-serverd.Po \ ./$(DEPDIR)/stap_serverd-util.Po \ ./$(DEPDIR)/stap_sign_module-nsscommon.Po \ ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po \ ./$(DEPDIR)/stap_sign_module-util.Po \ ./$(DEPDIR)/stapvirt-stapvirt.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(stap_SOURCES) $(stap_authorize_cert_SOURCES) \ $(stap_gen_cert_SOURCES) $(stap_serverd_SOURCES) \ $(stap_sign_module_SOURCES) $(stapvirt_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__noinst_HEADERS_DIST = sdt_types.h HEADERS = $(noinst_HEADERS) $(oldinclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope pkglibexecdir = ${libexecdir}/${PACKAGE} ACLOCAL = @ACLOCAL@ ALIGNEDNEW = @ALIGNEDNEW@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ DYNINST_LIBS = @DYNINST_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ debuginfod_CFLAGS = @debuginfod_CFLAGS@ debuginfod_LIBS = @debuginfod_LIBS@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = ${includedir}/sys openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ # we don't maintain a ChangeLog, which makes us non-GNU -> foreign AUTOMAKE_OPTIONS = no-dist foreign AM_CPPFLAGS = -DBINDIR='"$(bindir)"' \ -DSYSCONFDIR='"$(sysconfdir)"' \ -DPKGDATADIR='"$(pkgdatadir)"' \ -DPKGLIBDIR='"$(pkglibexecdir)"' \ -DLOCALEDIR='"$(localedir)"' \ -DDOCDIR='"$(docdir)"' \ -DPYEXECDIR='"$(pyexecdir)"' \ -DPY3EXECDIR='"$(py3execdir)"' \ -I$(srcdir)/includes -I$(builddir)/includes/sys AM_CFLAGS = -D_GNU_SOURCE -fexceptions -Wall -Wextra -Werror -Wunused -Wformat=2 -W AM_CXXFLAGS = -Wall -Wextra -Werror bin_SCRIPTS = stap-report $(am__append_2) $(am__append_5) pkglibexec_SCRIPTS = stap-env $(am__append_6) oldinclude_HEADERS = includes/sys/sdt.h includes/sys/sdt-config.h @BUILD_TRANSLATOR_TRUE@stap_SOURCES = main.cxx session.cxx parse.cxx \ @BUILD_TRANSLATOR_TRUE@ staptree.cxx elaborate.cxx \ @BUILD_TRANSLATOR_TRUE@ translate.cxx tapsets.cxx buildrun.cxx \ @BUILD_TRANSLATOR_TRUE@ loc2stap.cxx hash.cxx mdfour.c \ @BUILD_TRANSLATOR_TRUE@ cache.cxx util.cxx coveragedb.cxx \ @BUILD_TRANSLATOR_TRUE@ dwarf_wrappers.cxx tapset-been.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-procfs.cxx tapset-timers.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-netfilter.cxx tapset-perfmon.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-mark.cxx tapset-itrace.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-utrace.cxx task_finder.cxx \ @BUILD_TRANSLATOR_TRUE@ dwflpp.cxx rpm_finder.cxx setupdwfl.cxx \ @BUILD_TRANSLATOR_TRUE@ remote.cxx privilege.cxx cmdline.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-dynprobe.cxx tapset-method.cxx \ @BUILD_TRANSLATOR_TRUE@ translator-output.cxx stapregex.cxx \ @BUILD_TRANSLATOR_TRUE@ stapregex-tree.cxx stapregex-parse.cxx \ @BUILD_TRANSLATOR_TRUE@ stapregex-dfa.cxx stringtable.cxx \ @BUILD_TRANSLATOR_TRUE@ tapset-python.cxx analysis.cxx \ @BUILD_TRANSLATOR_TRUE@ $(am__append_7) $(am__append_9) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_14) $(am__append_15) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_21) @BUILD_TRANSLATOR_TRUE@noinst_HEADERS = sdt_types.h @BUILD_TRANSLATOR_TRUE@stap_LDADD = @stap_LIBS@ @sqlite3_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ @LIBINTL@ -lpthread @debuginfod_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ @DYNINST_LDFLAGS@ @DYNINST_LIBS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_8) $(am__append_13) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_19) $(am__append_22) @BUILD_TRANSLATOR_TRUE@stap_DEPENDENCIES = @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_SOURCES = stapvirt.c @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_CFLAGS = \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(AM_CFLAGS) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(libvirt_CFLAGS) \ @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@ $(libxml2_CFLAGS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_LDFLAGS = $(AM_LDFLAGS) @BUILD_TRANSLATOR_TRUE@@BUILD_VIRT_TRUE@stapvirt_LDADD = $(libvirt_LIBS) $(libxml2_LIBS) # Arrange for git_version.h to be regenerated at every "make". # Code fragment is based upon RadeonHD.am. # The stamp file which is never created ensures that git_version.h is updated # before every build. Having git_version.h in foo_SOURCES ensures a recompile # of foo-bar.c if it is newer than the foo-bar.o file. Using noinst_foo_SOURCES # instead of foo_SOURCES prevents shipping git_version.h in dist tarballs, # which may cause false GIT_FOO readings. BUILT_SOURCES = git_version.stamp CLEANFILES = git_version.h $(pkglibexec_PROGRAMS) GIT_VERSION_CMD = $(SHELL) $(top_srcdir)/git_version.sh PHONIES = $(am__append_20) runcheck update-po dist-gzip rpm srpm \ uprobes install-uprobes @BUILD_TRANSLATOR_TRUE@stap_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ $(am__append_16) @BUILD_TRANSLATOR_TRUE@stap_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ \ @BUILD_TRANSLATOR_TRUE@ @ALIGNEDNEW@ $(am__append_11) \ @BUILD_TRANSLATOR_TRUE@ $(am__append_17) @BUILD_TRANSLATOR_TRUE@stap_CPPFLAGS = $(AM_CPPFLAGS) -DSTAP_SDT_V2 \ @BUILD_TRANSLATOR_TRUE@ $(am__append_12) $(am__append_18) @BUILD_TRANSLATOR_TRUE@stap_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BOOST_SYSTEM_LIB@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_SOURCES = stap-sign-module.cxx nsscommon.cxx util.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CPPFLAGS = $(AM_CPPFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_sign_module_LDADD = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(debuginfod_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_23) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_SOURCES = stap-authorize-cert.cxx nsscommon.cxx util.cxx @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CPPFLAGS = $(AM_CPPFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_authorize_cert_LDADD = \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(debuginfod_LIBS) \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_24) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_SOURCES = stap-serverd.cxx cscommon.cxx util.cxx privilege.cxx nsscommon.cxx cmdline.cxx @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_CXXFLAGS = $(AM_CXXFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ @PIECXXFLAGS@ \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_26) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_CFLAGS = $(AM_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ @PIECFLAGS@ \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(nss_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(debuginfod_CFLAGS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_25) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_serverd_LDADD = $(nss_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ -lpthread \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(debuginfod_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_27) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_28) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_SOURCES = stap-gen-cert.cxx util.cxx nsscommon.cxx @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_CXXFLAGS = $(AM_CXXFLAGS) @PIECXXFLAGS@ $(nss_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_CFLAGS = $(AM_CFLAGS) @PIECFLAGS@ $(nss_CFLAGS) $(debuginfod_CFLAGS) @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_LDFLAGS = $(AM_LDFLAGS) @PIELDFLAGS@ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@stap_gen_cert_LDADD = $(nss_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(debuginfod_LIBS) \ @BUILD_SERVER_TRUE@@BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ $(am__append_29) # crash(8) extension @BUILD_CRASHMOD_TRUE@STAPLOG = staplog.so # Get extra libs as needed LDADD = EXAMPLE_SOURCE_DIR = $(srcdir)/testsuite/systemtap.examples EXAMPLE_META_FILES = $(EXAMPLE_SOURCE_DIR)/*/*.meta TEST_COV_DIR = coverage SUBDIRS = . java python stapdyn staprun stapbpf doc man po httpd stap-exporter # NB: the gcov target above uses this to enumarate linked binaries' build directories DIST_SUBDIRS = testsuite $(SUBDIRS) EXTRA_DIST = m4/ChangeLog # Any extra flags, such as: # --define "with_docs 0" # --define "elfutils_version 0.135" RPMBUILDFLAGS = ACLOCAL_AMFLAGS = -I m4 all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cxx .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 includes/sys/sdt-config.h: $(top_builddir)/config.status $(top_srcdir)/includes/sys/sdt-config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/config.systemtap: $(top_builddir)/config.status $(top_srcdir)/initscript/config.systemtap.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/config.stap-server: $(top_builddir)/config.status $(top_srcdir)/initscript/config.stap-server.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/systemtap: $(top_builddir)/config.status $(top_srcdir)/initscript/systemtap.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/stap-server: $(top_builddir)/config.status $(top_srcdir)/initscript/stap-server.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/module-setup.sh: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/module-setup.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/install: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/install.in cd $(top_builddir) && $(SHELL) ./config.status $@ initscript/99stap/check: $(top_builddir)/config.status $(top_srcdir)/initscript/99stap/check.in cd $(top_builddir) && $(SHELL) ./config.status $@ run-stap: $(top_builddir)/config.status $(srcdir)/run-stap.in cd $(top_builddir) && $(SHELL) ./config.status $@ dtrace: $(top_builddir)/config.status $(srcdir)/dtrace.in cd $(top_builddir) && $(SHELL) ./config.status $@ java/org/systemtap/byteman/helper/HelperSDT.java: $(top_builddir)/config.status $(top_srcdir)/java/org/systemtap/byteman/helper/HelperSDT.java.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapshd: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapshd.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapsh-daemon: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapsh-daemon.in cd $(top_builddir) && $(SHELL) ./config.status $@ staprun/guest/stapsh@.service: $(top_builddir)/config.status $(top_srcdir)/staprun/guest/stapsh@.service.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) install-pkglibexecPROGRAMS: $(pkglibexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pkglibexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(pkglibexec_PROGRAMS)'; test -n "$(pkglibexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkglibexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkglibexecdir)" && rm -f $$files clean-pkglibexecPROGRAMS: -test -z "$(pkglibexec_PROGRAMS)" || rm -f $(pkglibexec_PROGRAMS) stap$(EXEEXT): $(stap_OBJECTS) $(stap_DEPENDENCIES) $(EXTRA_stap_DEPENDENCIES) @rm -f stap$(EXEEXT) $(AM_V_CXXLD)$(stap_LINK) $(stap_OBJECTS) $(stap_LDADD) $(LIBS) stap-authorize-cert$(EXEEXT): $(stap_authorize_cert_OBJECTS) $(stap_authorize_cert_DEPENDENCIES) $(EXTRA_stap_authorize_cert_DEPENDENCIES) @rm -f stap-authorize-cert$(EXEEXT) $(AM_V_CXXLD)$(stap_authorize_cert_LINK) $(stap_authorize_cert_OBJECTS) $(stap_authorize_cert_LDADD) $(LIBS) stap-gen-cert$(EXEEXT): $(stap_gen_cert_OBJECTS) $(stap_gen_cert_DEPENDENCIES) $(EXTRA_stap_gen_cert_DEPENDENCIES) @rm -f stap-gen-cert$(EXEEXT) $(AM_V_CXXLD)$(stap_gen_cert_LINK) $(stap_gen_cert_OBJECTS) $(stap_gen_cert_LDADD) $(LIBS) stap-serverd$(EXEEXT): $(stap_serverd_OBJECTS) $(stap_serverd_DEPENDENCIES) $(EXTRA_stap_serverd_DEPENDENCIES) @rm -f stap-serverd$(EXEEXT) $(AM_V_CXXLD)$(stap_serverd_LINK) $(stap_serverd_OBJECTS) $(stap_serverd_LDADD) $(LIBS) stap-sign-module$(EXEEXT): $(stap_sign_module_OBJECTS) $(stap_sign_module_DEPENDENCIES) $(EXTRA_stap_sign_module_DEPENDENCIES) @rm -f stap-sign-module$(EXEEXT) $(AM_V_CXXLD)$(stap_sign_module_LINK) $(stap_sign_module_OBJECTS) $(stap_sign_module_LDADD) $(LIBS) stapvirt$(EXEEXT): $(stapvirt_OBJECTS) $(stapvirt_DEPENDENCIES) $(EXTRA_stapvirt_DEPENDENCIES) @rm -f stapvirt$(EXEEXT) $(AM_V_CCLD)$(stapvirt_LINK) $(stapvirt_OBJECTS) $(stapvirt_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-pkglibexecSCRIPTS: $(pkglibexec_SCRIPTS) @$(NORMAL_INSTALL) @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(pkglibexecdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(pkglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-pkglibexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(pkglibexec_SCRIPTS)'; test -n "$(pkglibexecdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(pkglibexecdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-analysis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-base.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-bitset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-opt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-bpf-translate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-buildrun.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cache.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-client-http.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-client-nss.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-coveragedb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-csclient.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-cscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-dwarf_wrappers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-dwflpp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-elaborate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-interactive.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-loc2stap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-mdfour.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-nss-server-info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-privilege.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-remote.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-rpm_finder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-session.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-setupdwfl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-dfa.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex-tree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stapregex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-staptree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-stringtable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-been.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-dynprobe.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-itrace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-mark.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-method.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-netfilter.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-perfmon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-procfs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-python.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-timers.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapset-utrace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-tapsets.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-task_finder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-translate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-translator-output.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_authorize_cert-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_gen_cert-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-cmdline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-cscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-privilege.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-stap-serverd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_serverd-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-nsscommon.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-stap-sign-module.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stap_sign_module-util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stapvirt-stapvirt.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` stap-mdfour.o: mdfour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -MT stap-mdfour.o -MD -MP -MF $(DEPDIR)/stap-mdfour.Tpo -c -o stap-mdfour.o `test -f 'mdfour.c' || echo '$(srcdir)/'`mdfour.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-mdfour.Tpo $(DEPDIR)/stap-mdfour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdfour.c' object='stap-mdfour.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -c -o stap-mdfour.o `test -f 'mdfour.c' || echo '$(srcdir)/'`mdfour.c stap-mdfour.obj: mdfour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -MT stap-mdfour.obj -MD -MP -MF $(DEPDIR)/stap-mdfour.Tpo -c -o stap-mdfour.obj `if test -f 'mdfour.c'; then $(CYGPATH_W) 'mdfour.c'; else $(CYGPATH_W) '$(srcdir)/mdfour.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-mdfour.Tpo $(DEPDIR)/stap-mdfour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdfour.c' object='stap-mdfour.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CFLAGS) $(CFLAGS) -c -o stap-mdfour.obj `if test -f 'mdfour.c'; then $(CYGPATH_W) 'mdfour.c'; else $(CYGPATH_W) '$(srcdir)/mdfour.c'; fi` stapvirt-stapvirt.o: stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -MT stapvirt-stapvirt.o -MD -MP -MF $(DEPDIR)/stapvirt-stapvirt.Tpo -c -o stapvirt-stapvirt.o `test -f 'stapvirt.c' || echo '$(srcdir)/'`stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stapvirt-stapvirt.Tpo $(DEPDIR)/stapvirt-stapvirt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stapvirt.c' object='stapvirt-stapvirt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -c -o stapvirt-stapvirt.o `test -f 'stapvirt.c' || echo '$(srcdir)/'`stapvirt.c stapvirt-stapvirt.obj: stapvirt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -MT stapvirt-stapvirt.obj -MD -MP -MF $(DEPDIR)/stapvirt-stapvirt.Tpo -c -o stapvirt-stapvirt.obj `if test -f 'stapvirt.c'; then $(CYGPATH_W) 'stapvirt.c'; else $(CYGPATH_W) '$(srcdir)/stapvirt.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stapvirt-stapvirt.Tpo $(DEPDIR)/stapvirt-stapvirt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stapvirt.c' object='stapvirt-stapvirt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stapvirt_CFLAGS) $(CFLAGS) -c -o stapvirt-stapvirt.obj `if test -f 'stapvirt.c'; then $(CYGPATH_W) 'stapvirt.c'; else $(CYGPATH_W) '$(srcdir)/stapvirt.c'; fi` .cxx.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` stap-main.o: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-main.o -MD -MP -MF $(DEPDIR)/stap-main.Tpo -c -o stap-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-main.Tpo $(DEPDIR)/stap-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='stap-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx stap-main.obj: main.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-main.obj -MD -MP -MF $(DEPDIR)/stap-main.Tpo -c -o stap-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-main.Tpo $(DEPDIR)/stap-main.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='main.cxx' object='stap-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi` stap-session.o: session.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-session.o -MD -MP -MF $(DEPDIR)/stap-session.Tpo -c -o stap-session.o `test -f 'session.cxx' || echo '$(srcdir)/'`session.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-session.Tpo $(DEPDIR)/stap-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cxx' object='stap-session.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-session.o `test -f 'session.cxx' || echo '$(srcdir)/'`session.cxx stap-session.obj: session.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-session.obj -MD -MP -MF $(DEPDIR)/stap-session.Tpo -c -o stap-session.obj `if test -f 'session.cxx'; then $(CYGPATH_W) 'session.cxx'; else $(CYGPATH_W) '$(srcdir)/session.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-session.Tpo $(DEPDIR)/stap-session.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='session.cxx' object='stap-session.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-session.obj `if test -f 'session.cxx'; then $(CYGPATH_W) 'session.cxx'; else $(CYGPATH_W) '$(srcdir)/session.cxx'; fi` stap-parse.o: parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-parse.o -MD -MP -MF $(DEPDIR)/stap-parse.Tpo -c -o stap-parse.o `test -f 'parse.cxx' || echo '$(srcdir)/'`parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-parse.Tpo $(DEPDIR)/stap-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parse.cxx' object='stap-parse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-parse.o `test -f 'parse.cxx' || echo '$(srcdir)/'`parse.cxx stap-parse.obj: parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-parse.obj -MD -MP -MF $(DEPDIR)/stap-parse.Tpo -c -o stap-parse.obj `if test -f 'parse.cxx'; then $(CYGPATH_W) 'parse.cxx'; else $(CYGPATH_W) '$(srcdir)/parse.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-parse.Tpo $(DEPDIR)/stap-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='parse.cxx' object='stap-parse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-parse.obj `if test -f 'parse.cxx'; then $(CYGPATH_W) 'parse.cxx'; else $(CYGPATH_W) '$(srcdir)/parse.cxx'; fi` stap-staptree.o: staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staptree.o -MD -MP -MF $(DEPDIR)/stap-staptree.Tpo -c -o stap-staptree.o `test -f 'staptree.cxx' || echo '$(srcdir)/'`staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staptree.Tpo $(DEPDIR)/stap-staptree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staptree.cxx' object='stap-staptree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-staptree.o `test -f 'staptree.cxx' || echo '$(srcdir)/'`staptree.cxx stap-staptree.obj: staptree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-staptree.obj -MD -MP -MF $(DEPDIR)/stap-staptree.Tpo -c -o stap-staptree.obj `if test -f 'staptree.cxx'; then $(CYGPATH_W) 'staptree.cxx'; else $(CYGPATH_W) '$(srcdir)/staptree.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-staptree.Tpo $(DEPDIR)/stap-staptree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='staptree.cxx' object='stap-staptree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-staptree.obj `if test -f 'staptree.cxx'; then $(CYGPATH_W) 'staptree.cxx'; else $(CYGPATH_W) '$(srcdir)/staptree.cxx'; fi` stap-elaborate.o: elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-elaborate.o -MD -MP -MF $(DEPDIR)/stap-elaborate.Tpo -c -o stap-elaborate.o `test -f 'elaborate.cxx' || echo '$(srcdir)/'`elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-elaborate.Tpo $(DEPDIR)/stap-elaborate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='elaborate.cxx' object='stap-elaborate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-elaborate.o `test -f 'elaborate.cxx' || echo '$(srcdir)/'`elaborate.cxx stap-elaborate.obj: elaborate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-elaborate.obj -MD -MP -MF $(DEPDIR)/stap-elaborate.Tpo -c -o stap-elaborate.obj `if test -f 'elaborate.cxx'; then $(CYGPATH_W) 'elaborate.cxx'; else $(CYGPATH_W) '$(srcdir)/elaborate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-elaborate.Tpo $(DEPDIR)/stap-elaborate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='elaborate.cxx' object='stap-elaborate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-elaborate.obj `if test -f 'elaborate.cxx'; then $(CYGPATH_W) 'elaborate.cxx'; else $(CYGPATH_W) '$(srcdir)/elaborate.cxx'; fi` stap-translate.o: translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translate.o -MD -MP -MF $(DEPDIR)/stap-translate.Tpo -c -o stap-translate.o `test -f 'translate.cxx' || echo '$(srcdir)/'`translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translate.Tpo $(DEPDIR)/stap-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translate.cxx' object='stap-translate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translate.o `test -f 'translate.cxx' || echo '$(srcdir)/'`translate.cxx stap-translate.obj: translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translate.obj -MD -MP -MF $(DEPDIR)/stap-translate.Tpo -c -o stap-translate.obj `if test -f 'translate.cxx'; then $(CYGPATH_W) 'translate.cxx'; else $(CYGPATH_W) '$(srcdir)/translate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translate.Tpo $(DEPDIR)/stap-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translate.cxx' object='stap-translate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translate.obj `if test -f 'translate.cxx'; then $(CYGPATH_W) 'translate.cxx'; else $(CYGPATH_W) '$(srcdir)/translate.cxx'; fi` stap-tapsets.o: tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapsets.o -MD -MP -MF $(DEPDIR)/stap-tapsets.Tpo -c -o stap-tapsets.o `test -f 'tapsets.cxx' || echo '$(srcdir)/'`tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapsets.Tpo $(DEPDIR)/stap-tapsets.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapsets.cxx' object='stap-tapsets.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapsets.o `test -f 'tapsets.cxx' || echo '$(srcdir)/'`tapsets.cxx stap-tapsets.obj: tapsets.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapsets.obj -MD -MP -MF $(DEPDIR)/stap-tapsets.Tpo -c -o stap-tapsets.obj `if test -f 'tapsets.cxx'; then $(CYGPATH_W) 'tapsets.cxx'; else $(CYGPATH_W) '$(srcdir)/tapsets.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapsets.Tpo $(DEPDIR)/stap-tapsets.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapsets.cxx' object='stap-tapsets.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapsets.obj `if test -f 'tapsets.cxx'; then $(CYGPATH_W) 'tapsets.cxx'; else $(CYGPATH_W) '$(srcdir)/tapsets.cxx'; fi` stap-buildrun.o: buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-buildrun.o -MD -MP -MF $(DEPDIR)/stap-buildrun.Tpo -c -o stap-buildrun.o `test -f 'buildrun.cxx' || echo '$(srcdir)/'`buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-buildrun.Tpo $(DEPDIR)/stap-buildrun.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buildrun.cxx' object='stap-buildrun.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-buildrun.o `test -f 'buildrun.cxx' || echo '$(srcdir)/'`buildrun.cxx stap-buildrun.obj: buildrun.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-buildrun.obj -MD -MP -MF $(DEPDIR)/stap-buildrun.Tpo -c -o stap-buildrun.obj `if test -f 'buildrun.cxx'; then $(CYGPATH_W) 'buildrun.cxx'; else $(CYGPATH_W) '$(srcdir)/buildrun.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-buildrun.Tpo $(DEPDIR)/stap-buildrun.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='buildrun.cxx' object='stap-buildrun.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-buildrun.obj `if test -f 'buildrun.cxx'; then $(CYGPATH_W) 'buildrun.cxx'; else $(CYGPATH_W) '$(srcdir)/buildrun.cxx'; fi` stap-loc2stap.o: loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-loc2stap.o -MD -MP -MF $(DEPDIR)/stap-loc2stap.Tpo -c -o stap-loc2stap.o `test -f 'loc2stap.cxx' || echo '$(srcdir)/'`loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-loc2stap.Tpo $(DEPDIR)/stap-loc2stap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='loc2stap.cxx' object='stap-loc2stap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-loc2stap.o `test -f 'loc2stap.cxx' || echo '$(srcdir)/'`loc2stap.cxx stap-loc2stap.obj: loc2stap.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-loc2stap.obj -MD -MP -MF $(DEPDIR)/stap-loc2stap.Tpo -c -o stap-loc2stap.obj `if test -f 'loc2stap.cxx'; then $(CYGPATH_W) 'loc2stap.cxx'; else $(CYGPATH_W) '$(srcdir)/loc2stap.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-loc2stap.Tpo $(DEPDIR)/stap-loc2stap.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='loc2stap.cxx' object='stap-loc2stap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-loc2stap.obj `if test -f 'loc2stap.cxx'; then $(CYGPATH_W) 'loc2stap.cxx'; else $(CYGPATH_W) '$(srcdir)/loc2stap.cxx'; fi` stap-hash.o: hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-hash.o -MD -MP -MF $(DEPDIR)/stap-hash.Tpo -c -o stap-hash.o `test -f 'hash.cxx' || echo '$(srcdir)/'`hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-hash.Tpo $(DEPDIR)/stap-hash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hash.cxx' object='stap-hash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-hash.o `test -f 'hash.cxx' || echo '$(srcdir)/'`hash.cxx stap-hash.obj: hash.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-hash.obj -MD -MP -MF $(DEPDIR)/stap-hash.Tpo -c -o stap-hash.obj `if test -f 'hash.cxx'; then $(CYGPATH_W) 'hash.cxx'; else $(CYGPATH_W) '$(srcdir)/hash.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-hash.Tpo $(DEPDIR)/stap-hash.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='hash.cxx' object='stap-hash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-hash.obj `if test -f 'hash.cxx'; then $(CYGPATH_W) 'hash.cxx'; else $(CYGPATH_W) '$(srcdir)/hash.cxx'; fi` stap-cache.o: cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cache.o -MD -MP -MF $(DEPDIR)/stap-cache.Tpo -c -o stap-cache.o `test -f 'cache.cxx' || echo '$(srcdir)/'`cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cache.Tpo $(DEPDIR)/stap-cache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cache.cxx' object='stap-cache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cache.o `test -f 'cache.cxx' || echo '$(srcdir)/'`cache.cxx stap-cache.obj: cache.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cache.obj -MD -MP -MF $(DEPDIR)/stap-cache.Tpo -c -o stap-cache.obj `if test -f 'cache.cxx'; then $(CYGPATH_W) 'cache.cxx'; else $(CYGPATH_W) '$(srcdir)/cache.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cache.Tpo $(DEPDIR)/stap-cache.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cache.cxx' object='stap-cache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cache.obj `if test -f 'cache.cxx'; then $(CYGPATH_W) 'cache.cxx'; else $(CYGPATH_W) '$(srcdir)/cache.cxx'; fi` stap-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-util.o -MD -MP -MF $(DEPDIR)/stap-util.Tpo -c -o stap-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-util.Tpo $(DEPDIR)/stap-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-util.obj -MD -MP -MF $(DEPDIR)/stap-util.Tpo -c -o stap-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-util.Tpo $(DEPDIR)/stap-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap-coveragedb.o: coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-coveragedb.o -MD -MP -MF $(DEPDIR)/stap-coveragedb.Tpo -c -o stap-coveragedb.o `test -f 'coveragedb.cxx' || echo '$(srcdir)/'`coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-coveragedb.Tpo $(DEPDIR)/stap-coveragedb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='coveragedb.cxx' object='stap-coveragedb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-coveragedb.o `test -f 'coveragedb.cxx' || echo '$(srcdir)/'`coveragedb.cxx stap-coveragedb.obj: coveragedb.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-coveragedb.obj -MD -MP -MF $(DEPDIR)/stap-coveragedb.Tpo -c -o stap-coveragedb.obj `if test -f 'coveragedb.cxx'; then $(CYGPATH_W) 'coveragedb.cxx'; else $(CYGPATH_W) '$(srcdir)/coveragedb.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-coveragedb.Tpo $(DEPDIR)/stap-coveragedb.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='coveragedb.cxx' object='stap-coveragedb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-coveragedb.obj `if test -f 'coveragedb.cxx'; then $(CYGPATH_W) 'coveragedb.cxx'; else $(CYGPATH_W) '$(srcdir)/coveragedb.cxx'; fi` stap-dwarf_wrappers.o: dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwarf_wrappers.o -MD -MP -MF $(DEPDIR)/stap-dwarf_wrappers.Tpo -c -o stap-dwarf_wrappers.o `test -f 'dwarf_wrappers.cxx' || echo '$(srcdir)/'`dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwarf_wrappers.Tpo $(DEPDIR)/stap-dwarf_wrappers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwarf_wrappers.cxx' object='stap-dwarf_wrappers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwarf_wrappers.o `test -f 'dwarf_wrappers.cxx' || echo '$(srcdir)/'`dwarf_wrappers.cxx stap-dwarf_wrappers.obj: dwarf_wrappers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwarf_wrappers.obj -MD -MP -MF $(DEPDIR)/stap-dwarf_wrappers.Tpo -c -o stap-dwarf_wrappers.obj `if test -f 'dwarf_wrappers.cxx'; then $(CYGPATH_W) 'dwarf_wrappers.cxx'; else $(CYGPATH_W) '$(srcdir)/dwarf_wrappers.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwarf_wrappers.Tpo $(DEPDIR)/stap-dwarf_wrappers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwarf_wrappers.cxx' object='stap-dwarf_wrappers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwarf_wrappers.obj `if test -f 'dwarf_wrappers.cxx'; then $(CYGPATH_W) 'dwarf_wrappers.cxx'; else $(CYGPATH_W) '$(srcdir)/dwarf_wrappers.cxx'; fi` stap-tapset-been.o: tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-been.o -MD -MP -MF $(DEPDIR)/stap-tapset-been.Tpo -c -o stap-tapset-been.o `test -f 'tapset-been.cxx' || echo '$(srcdir)/'`tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-been.Tpo $(DEPDIR)/stap-tapset-been.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-been.cxx' object='stap-tapset-been.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-been.o `test -f 'tapset-been.cxx' || echo '$(srcdir)/'`tapset-been.cxx stap-tapset-been.obj: tapset-been.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-been.obj -MD -MP -MF $(DEPDIR)/stap-tapset-been.Tpo -c -o stap-tapset-been.obj `if test -f 'tapset-been.cxx'; then $(CYGPATH_W) 'tapset-been.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-been.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-been.Tpo $(DEPDIR)/stap-tapset-been.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-been.cxx' object='stap-tapset-been.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-been.obj `if test -f 'tapset-been.cxx'; then $(CYGPATH_W) 'tapset-been.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-been.cxx'; fi` stap-tapset-procfs.o: tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-procfs.o -MD -MP -MF $(DEPDIR)/stap-tapset-procfs.Tpo -c -o stap-tapset-procfs.o `test -f 'tapset-procfs.cxx' || echo '$(srcdir)/'`tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-procfs.Tpo $(DEPDIR)/stap-tapset-procfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-procfs.cxx' object='stap-tapset-procfs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-procfs.o `test -f 'tapset-procfs.cxx' || echo '$(srcdir)/'`tapset-procfs.cxx stap-tapset-procfs.obj: tapset-procfs.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-procfs.obj -MD -MP -MF $(DEPDIR)/stap-tapset-procfs.Tpo -c -o stap-tapset-procfs.obj `if test -f 'tapset-procfs.cxx'; then $(CYGPATH_W) 'tapset-procfs.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-procfs.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-procfs.Tpo $(DEPDIR)/stap-tapset-procfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-procfs.cxx' object='stap-tapset-procfs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-procfs.obj `if test -f 'tapset-procfs.cxx'; then $(CYGPATH_W) 'tapset-procfs.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-procfs.cxx'; fi` stap-tapset-timers.o: tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-timers.o -MD -MP -MF $(DEPDIR)/stap-tapset-timers.Tpo -c -o stap-tapset-timers.o `test -f 'tapset-timers.cxx' || echo '$(srcdir)/'`tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-timers.Tpo $(DEPDIR)/stap-tapset-timers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-timers.cxx' object='stap-tapset-timers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-timers.o `test -f 'tapset-timers.cxx' || echo '$(srcdir)/'`tapset-timers.cxx stap-tapset-timers.obj: tapset-timers.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-timers.obj -MD -MP -MF $(DEPDIR)/stap-tapset-timers.Tpo -c -o stap-tapset-timers.obj `if test -f 'tapset-timers.cxx'; then $(CYGPATH_W) 'tapset-timers.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-timers.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-timers.Tpo $(DEPDIR)/stap-tapset-timers.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-timers.cxx' object='stap-tapset-timers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-timers.obj `if test -f 'tapset-timers.cxx'; then $(CYGPATH_W) 'tapset-timers.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-timers.cxx'; fi` stap-tapset-netfilter.o: tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-netfilter.o -MD -MP -MF $(DEPDIR)/stap-tapset-netfilter.Tpo -c -o stap-tapset-netfilter.o `test -f 'tapset-netfilter.cxx' || echo '$(srcdir)/'`tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-netfilter.Tpo $(DEPDIR)/stap-tapset-netfilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-netfilter.cxx' object='stap-tapset-netfilter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-netfilter.o `test -f 'tapset-netfilter.cxx' || echo '$(srcdir)/'`tapset-netfilter.cxx stap-tapset-netfilter.obj: tapset-netfilter.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-netfilter.obj -MD -MP -MF $(DEPDIR)/stap-tapset-netfilter.Tpo -c -o stap-tapset-netfilter.obj `if test -f 'tapset-netfilter.cxx'; then $(CYGPATH_W) 'tapset-netfilter.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-netfilter.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-netfilter.Tpo $(DEPDIR)/stap-tapset-netfilter.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-netfilter.cxx' object='stap-tapset-netfilter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-netfilter.obj `if test -f 'tapset-netfilter.cxx'; then $(CYGPATH_W) 'tapset-netfilter.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-netfilter.cxx'; fi` stap-tapset-perfmon.o: tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-perfmon.o -MD -MP -MF $(DEPDIR)/stap-tapset-perfmon.Tpo -c -o stap-tapset-perfmon.o `test -f 'tapset-perfmon.cxx' || echo '$(srcdir)/'`tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-perfmon.Tpo $(DEPDIR)/stap-tapset-perfmon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-perfmon.cxx' object='stap-tapset-perfmon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-perfmon.o `test -f 'tapset-perfmon.cxx' || echo '$(srcdir)/'`tapset-perfmon.cxx stap-tapset-perfmon.obj: tapset-perfmon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-perfmon.obj -MD -MP -MF $(DEPDIR)/stap-tapset-perfmon.Tpo -c -o stap-tapset-perfmon.obj `if test -f 'tapset-perfmon.cxx'; then $(CYGPATH_W) 'tapset-perfmon.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-perfmon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-perfmon.Tpo $(DEPDIR)/stap-tapset-perfmon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-perfmon.cxx' object='stap-tapset-perfmon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-perfmon.obj `if test -f 'tapset-perfmon.cxx'; then $(CYGPATH_W) 'tapset-perfmon.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-perfmon.cxx'; fi` stap-tapset-mark.o: tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-mark.o -MD -MP -MF $(DEPDIR)/stap-tapset-mark.Tpo -c -o stap-tapset-mark.o `test -f 'tapset-mark.cxx' || echo '$(srcdir)/'`tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-mark.Tpo $(DEPDIR)/stap-tapset-mark.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-mark.cxx' object='stap-tapset-mark.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-mark.o `test -f 'tapset-mark.cxx' || echo '$(srcdir)/'`tapset-mark.cxx stap-tapset-mark.obj: tapset-mark.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-mark.obj -MD -MP -MF $(DEPDIR)/stap-tapset-mark.Tpo -c -o stap-tapset-mark.obj `if test -f 'tapset-mark.cxx'; then $(CYGPATH_W) 'tapset-mark.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-mark.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-mark.Tpo $(DEPDIR)/stap-tapset-mark.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-mark.cxx' object='stap-tapset-mark.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-mark.obj `if test -f 'tapset-mark.cxx'; then $(CYGPATH_W) 'tapset-mark.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-mark.cxx'; fi` stap-tapset-itrace.o: tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-itrace.o -MD -MP -MF $(DEPDIR)/stap-tapset-itrace.Tpo -c -o stap-tapset-itrace.o `test -f 'tapset-itrace.cxx' || echo '$(srcdir)/'`tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-itrace.Tpo $(DEPDIR)/stap-tapset-itrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-itrace.cxx' object='stap-tapset-itrace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-itrace.o `test -f 'tapset-itrace.cxx' || echo '$(srcdir)/'`tapset-itrace.cxx stap-tapset-itrace.obj: tapset-itrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-itrace.obj -MD -MP -MF $(DEPDIR)/stap-tapset-itrace.Tpo -c -o stap-tapset-itrace.obj `if test -f 'tapset-itrace.cxx'; then $(CYGPATH_W) 'tapset-itrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-itrace.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-itrace.Tpo $(DEPDIR)/stap-tapset-itrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-itrace.cxx' object='stap-tapset-itrace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-itrace.obj `if test -f 'tapset-itrace.cxx'; then $(CYGPATH_W) 'tapset-itrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-itrace.cxx'; fi` stap-tapset-utrace.o: tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-utrace.o -MD -MP -MF $(DEPDIR)/stap-tapset-utrace.Tpo -c -o stap-tapset-utrace.o `test -f 'tapset-utrace.cxx' || echo '$(srcdir)/'`tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-utrace.Tpo $(DEPDIR)/stap-tapset-utrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-utrace.cxx' object='stap-tapset-utrace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-utrace.o `test -f 'tapset-utrace.cxx' || echo '$(srcdir)/'`tapset-utrace.cxx stap-tapset-utrace.obj: tapset-utrace.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-utrace.obj -MD -MP -MF $(DEPDIR)/stap-tapset-utrace.Tpo -c -o stap-tapset-utrace.obj `if test -f 'tapset-utrace.cxx'; then $(CYGPATH_W) 'tapset-utrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-utrace.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-utrace.Tpo $(DEPDIR)/stap-tapset-utrace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-utrace.cxx' object='stap-tapset-utrace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-utrace.obj `if test -f 'tapset-utrace.cxx'; then $(CYGPATH_W) 'tapset-utrace.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-utrace.cxx'; fi` stap-task_finder.o: task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-task_finder.o -MD -MP -MF $(DEPDIR)/stap-task_finder.Tpo -c -o stap-task_finder.o `test -f 'task_finder.cxx' || echo '$(srcdir)/'`task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-task_finder.Tpo $(DEPDIR)/stap-task_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='task_finder.cxx' object='stap-task_finder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-task_finder.o `test -f 'task_finder.cxx' || echo '$(srcdir)/'`task_finder.cxx stap-task_finder.obj: task_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-task_finder.obj -MD -MP -MF $(DEPDIR)/stap-task_finder.Tpo -c -o stap-task_finder.obj `if test -f 'task_finder.cxx'; then $(CYGPATH_W) 'task_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/task_finder.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-task_finder.Tpo $(DEPDIR)/stap-task_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='task_finder.cxx' object='stap-task_finder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-task_finder.obj `if test -f 'task_finder.cxx'; then $(CYGPATH_W) 'task_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/task_finder.cxx'; fi` stap-dwflpp.o: dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwflpp.o -MD -MP -MF $(DEPDIR)/stap-dwflpp.Tpo -c -o stap-dwflpp.o `test -f 'dwflpp.cxx' || echo '$(srcdir)/'`dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwflpp.Tpo $(DEPDIR)/stap-dwflpp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwflpp.cxx' object='stap-dwflpp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwflpp.o `test -f 'dwflpp.cxx' || echo '$(srcdir)/'`dwflpp.cxx stap-dwflpp.obj: dwflpp.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-dwflpp.obj -MD -MP -MF $(DEPDIR)/stap-dwflpp.Tpo -c -o stap-dwflpp.obj `if test -f 'dwflpp.cxx'; then $(CYGPATH_W) 'dwflpp.cxx'; else $(CYGPATH_W) '$(srcdir)/dwflpp.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-dwflpp.Tpo $(DEPDIR)/stap-dwflpp.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='dwflpp.cxx' object='stap-dwflpp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-dwflpp.obj `if test -f 'dwflpp.cxx'; then $(CYGPATH_W) 'dwflpp.cxx'; else $(CYGPATH_W) '$(srcdir)/dwflpp.cxx'; fi` stap-rpm_finder.o: rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-rpm_finder.o -MD -MP -MF $(DEPDIR)/stap-rpm_finder.Tpo -c -o stap-rpm_finder.o `test -f 'rpm_finder.cxx' || echo '$(srcdir)/'`rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-rpm_finder.Tpo $(DEPDIR)/stap-rpm_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rpm_finder.cxx' object='stap-rpm_finder.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-rpm_finder.o `test -f 'rpm_finder.cxx' || echo '$(srcdir)/'`rpm_finder.cxx stap-rpm_finder.obj: rpm_finder.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-rpm_finder.obj -MD -MP -MF $(DEPDIR)/stap-rpm_finder.Tpo -c -o stap-rpm_finder.obj `if test -f 'rpm_finder.cxx'; then $(CYGPATH_W) 'rpm_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/rpm_finder.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-rpm_finder.Tpo $(DEPDIR)/stap-rpm_finder.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='rpm_finder.cxx' object='stap-rpm_finder.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-rpm_finder.obj `if test -f 'rpm_finder.cxx'; then $(CYGPATH_W) 'rpm_finder.cxx'; else $(CYGPATH_W) '$(srcdir)/rpm_finder.cxx'; fi` stap-setupdwfl.o: setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-setupdwfl.o -MD -MP -MF $(DEPDIR)/stap-setupdwfl.Tpo -c -o stap-setupdwfl.o `test -f 'setupdwfl.cxx' || echo '$(srcdir)/'`setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-setupdwfl.Tpo $(DEPDIR)/stap-setupdwfl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupdwfl.cxx' object='stap-setupdwfl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-setupdwfl.o `test -f 'setupdwfl.cxx' || echo '$(srcdir)/'`setupdwfl.cxx stap-setupdwfl.obj: setupdwfl.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-setupdwfl.obj -MD -MP -MF $(DEPDIR)/stap-setupdwfl.Tpo -c -o stap-setupdwfl.obj `if test -f 'setupdwfl.cxx'; then $(CYGPATH_W) 'setupdwfl.cxx'; else $(CYGPATH_W) '$(srcdir)/setupdwfl.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-setupdwfl.Tpo $(DEPDIR)/stap-setupdwfl.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupdwfl.cxx' object='stap-setupdwfl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-setupdwfl.obj `if test -f 'setupdwfl.cxx'; then $(CYGPATH_W) 'setupdwfl.cxx'; else $(CYGPATH_W) '$(srcdir)/setupdwfl.cxx'; fi` stap-remote.o: remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-remote.o -MD -MP -MF $(DEPDIR)/stap-remote.Tpo -c -o stap-remote.o `test -f 'remote.cxx' || echo '$(srcdir)/'`remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-remote.Tpo $(DEPDIR)/stap-remote.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='remote.cxx' object='stap-remote.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-remote.o `test -f 'remote.cxx' || echo '$(srcdir)/'`remote.cxx stap-remote.obj: remote.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-remote.obj -MD -MP -MF $(DEPDIR)/stap-remote.Tpo -c -o stap-remote.obj `if test -f 'remote.cxx'; then $(CYGPATH_W) 'remote.cxx'; else $(CYGPATH_W) '$(srcdir)/remote.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-remote.Tpo $(DEPDIR)/stap-remote.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='remote.cxx' object='stap-remote.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-remote.obj `if test -f 'remote.cxx'; then $(CYGPATH_W) 'remote.cxx'; else $(CYGPATH_W) '$(srcdir)/remote.cxx'; fi` stap-privilege.o: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-privilege.o -MD -MP -MF $(DEPDIR)/stap-privilege.Tpo -c -o stap-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-privilege.Tpo $(DEPDIR)/stap-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap-privilege.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx stap-privilege.obj: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-privilege.obj -MD -MP -MF $(DEPDIR)/stap-privilege.Tpo -c -o stap-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-privilege.Tpo $(DEPDIR)/stap-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap-privilege.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` stap-cmdline.o: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cmdline.o -MD -MP -MF $(DEPDIR)/stap-cmdline.Tpo -c -o stap-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cmdline.Tpo $(DEPDIR)/stap-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap-cmdline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx stap-cmdline.obj: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cmdline.obj -MD -MP -MF $(DEPDIR)/stap-cmdline.Tpo -c -o stap-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cmdline.Tpo $(DEPDIR)/stap-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap-cmdline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` stap-tapset-dynprobe.o: tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-dynprobe.o -MD -MP -MF $(DEPDIR)/stap-tapset-dynprobe.Tpo -c -o stap-tapset-dynprobe.o `test -f 'tapset-dynprobe.cxx' || echo '$(srcdir)/'`tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-dynprobe.Tpo $(DEPDIR)/stap-tapset-dynprobe.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-dynprobe.cxx' object='stap-tapset-dynprobe.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-dynprobe.o `test -f 'tapset-dynprobe.cxx' || echo '$(srcdir)/'`tapset-dynprobe.cxx stap-tapset-dynprobe.obj: tapset-dynprobe.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-dynprobe.obj -MD -MP -MF $(DEPDIR)/stap-tapset-dynprobe.Tpo -c -o stap-tapset-dynprobe.obj `if test -f 'tapset-dynprobe.cxx'; then $(CYGPATH_W) 'tapset-dynprobe.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-dynprobe.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-dynprobe.Tpo $(DEPDIR)/stap-tapset-dynprobe.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-dynprobe.cxx' object='stap-tapset-dynprobe.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-dynprobe.obj `if test -f 'tapset-dynprobe.cxx'; then $(CYGPATH_W) 'tapset-dynprobe.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-dynprobe.cxx'; fi` stap-tapset-method.o: tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-method.o -MD -MP -MF $(DEPDIR)/stap-tapset-method.Tpo -c -o stap-tapset-method.o `test -f 'tapset-method.cxx' || echo '$(srcdir)/'`tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-method.Tpo $(DEPDIR)/stap-tapset-method.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-method.cxx' object='stap-tapset-method.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-method.o `test -f 'tapset-method.cxx' || echo '$(srcdir)/'`tapset-method.cxx stap-tapset-method.obj: tapset-method.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-method.obj -MD -MP -MF $(DEPDIR)/stap-tapset-method.Tpo -c -o stap-tapset-method.obj `if test -f 'tapset-method.cxx'; then $(CYGPATH_W) 'tapset-method.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-method.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-method.Tpo $(DEPDIR)/stap-tapset-method.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-method.cxx' object='stap-tapset-method.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-method.obj `if test -f 'tapset-method.cxx'; then $(CYGPATH_W) 'tapset-method.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-method.cxx'; fi` stap-translator-output.o: translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translator-output.o -MD -MP -MF $(DEPDIR)/stap-translator-output.Tpo -c -o stap-translator-output.o `test -f 'translator-output.cxx' || echo '$(srcdir)/'`translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translator-output.Tpo $(DEPDIR)/stap-translator-output.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translator-output.cxx' object='stap-translator-output.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translator-output.o `test -f 'translator-output.cxx' || echo '$(srcdir)/'`translator-output.cxx stap-translator-output.obj: translator-output.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-translator-output.obj -MD -MP -MF $(DEPDIR)/stap-translator-output.Tpo -c -o stap-translator-output.obj `if test -f 'translator-output.cxx'; then $(CYGPATH_W) 'translator-output.cxx'; else $(CYGPATH_W) '$(srcdir)/translator-output.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-translator-output.Tpo $(DEPDIR)/stap-translator-output.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='translator-output.cxx' object='stap-translator-output.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-translator-output.obj `if test -f 'translator-output.cxx'; then $(CYGPATH_W) 'translator-output.cxx'; else $(CYGPATH_W) '$(srcdir)/translator-output.cxx'; fi` stap-stapregex.o: stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex.o -MD -MP -MF $(DEPDIR)/stap-stapregex.Tpo -c -o stap-stapregex.o `test -f 'stapregex.cxx' || echo '$(srcdir)/'`stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex.Tpo $(DEPDIR)/stap-stapregex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex.cxx' object='stap-stapregex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex.o `test -f 'stapregex.cxx' || echo '$(srcdir)/'`stapregex.cxx stap-stapregex.obj: stapregex.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex.obj -MD -MP -MF $(DEPDIR)/stap-stapregex.Tpo -c -o stap-stapregex.obj `if test -f 'stapregex.cxx'; then $(CYGPATH_W) 'stapregex.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex.Tpo $(DEPDIR)/stap-stapregex.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex.cxx' object='stap-stapregex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex.obj `if test -f 'stapregex.cxx'; then $(CYGPATH_W) 'stapregex.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex.cxx'; fi` stap-stapregex-tree.o: stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-tree.o -MD -MP -MF $(DEPDIR)/stap-stapregex-tree.Tpo -c -o stap-stapregex-tree.o `test -f 'stapregex-tree.cxx' || echo '$(srcdir)/'`stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-tree.Tpo $(DEPDIR)/stap-stapregex-tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-tree.cxx' object='stap-stapregex-tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-tree.o `test -f 'stapregex-tree.cxx' || echo '$(srcdir)/'`stapregex-tree.cxx stap-stapregex-tree.obj: stapregex-tree.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-tree.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-tree.Tpo -c -o stap-stapregex-tree.obj `if test -f 'stapregex-tree.cxx'; then $(CYGPATH_W) 'stapregex-tree.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-tree.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-tree.Tpo $(DEPDIR)/stap-stapregex-tree.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-tree.cxx' object='stap-stapregex-tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-tree.obj `if test -f 'stapregex-tree.cxx'; then $(CYGPATH_W) 'stapregex-tree.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-tree.cxx'; fi` stap-stapregex-parse.o: stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-parse.o -MD -MP -MF $(DEPDIR)/stap-stapregex-parse.Tpo -c -o stap-stapregex-parse.o `test -f 'stapregex-parse.cxx' || echo '$(srcdir)/'`stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-parse.Tpo $(DEPDIR)/stap-stapregex-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-parse.cxx' object='stap-stapregex-parse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-parse.o `test -f 'stapregex-parse.cxx' || echo '$(srcdir)/'`stapregex-parse.cxx stap-stapregex-parse.obj: stapregex-parse.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-parse.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-parse.Tpo -c -o stap-stapregex-parse.obj `if test -f 'stapregex-parse.cxx'; then $(CYGPATH_W) 'stapregex-parse.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-parse.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-parse.Tpo $(DEPDIR)/stap-stapregex-parse.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-parse.cxx' object='stap-stapregex-parse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-parse.obj `if test -f 'stapregex-parse.cxx'; then $(CYGPATH_W) 'stapregex-parse.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-parse.cxx'; fi` stap-stapregex-dfa.o: stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-dfa.o -MD -MP -MF $(DEPDIR)/stap-stapregex-dfa.Tpo -c -o stap-stapregex-dfa.o `test -f 'stapregex-dfa.cxx' || echo '$(srcdir)/'`stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-dfa.Tpo $(DEPDIR)/stap-stapregex-dfa.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-dfa.cxx' object='stap-stapregex-dfa.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-dfa.o `test -f 'stapregex-dfa.cxx' || echo '$(srcdir)/'`stapregex-dfa.cxx stap-stapregex-dfa.obj: stapregex-dfa.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stapregex-dfa.obj -MD -MP -MF $(DEPDIR)/stap-stapregex-dfa.Tpo -c -o stap-stapregex-dfa.obj `if test -f 'stapregex-dfa.cxx'; then $(CYGPATH_W) 'stapregex-dfa.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-dfa.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stapregex-dfa.Tpo $(DEPDIR)/stap-stapregex-dfa.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stapregex-dfa.cxx' object='stap-stapregex-dfa.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stapregex-dfa.obj `if test -f 'stapregex-dfa.cxx'; then $(CYGPATH_W) 'stapregex-dfa.cxx'; else $(CYGPATH_W) '$(srcdir)/stapregex-dfa.cxx'; fi` stap-stringtable.o: stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stringtable.o -MD -MP -MF $(DEPDIR)/stap-stringtable.Tpo -c -o stap-stringtable.o `test -f 'stringtable.cxx' || echo '$(srcdir)/'`stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stringtable.Tpo $(DEPDIR)/stap-stringtable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringtable.cxx' object='stap-stringtable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stringtable.o `test -f 'stringtable.cxx' || echo '$(srcdir)/'`stringtable.cxx stap-stringtable.obj: stringtable.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-stringtable.obj -MD -MP -MF $(DEPDIR)/stap-stringtable.Tpo -c -o stap-stringtable.obj `if test -f 'stringtable.cxx'; then $(CYGPATH_W) 'stringtable.cxx'; else $(CYGPATH_W) '$(srcdir)/stringtable.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-stringtable.Tpo $(DEPDIR)/stap-stringtable.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stringtable.cxx' object='stap-stringtable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-stringtable.obj `if test -f 'stringtable.cxx'; then $(CYGPATH_W) 'stringtable.cxx'; else $(CYGPATH_W) '$(srcdir)/stringtable.cxx'; fi` stap-tapset-python.o: tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-python.o -MD -MP -MF $(DEPDIR)/stap-tapset-python.Tpo -c -o stap-tapset-python.o `test -f 'tapset-python.cxx' || echo '$(srcdir)/'`tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-python.Tpo $(DEPDIR)/stap-tapset-python.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-python.cxx' object='stap-tapset-python.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-python.o `test -f 'tapset-python.cxx' || echo '$(srcdir)/'`tapset-python.cxx stap-tapset-python.obj: tapset-python.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-tapset-python.obj -MD -MP -MF $(DEPDIR)/stap-tapset-python.Tpo -c -o stap-tapset-python.obj `if test -f 'tapset-python.cxx'; then $(CYGPATH_W) 'tapset-python.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-python.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-tapset-python.Tpo $(DEPDIR)/stap-tapset-python.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='tapset-python.cxx' object='stap-tapset-python.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-tapset-python.obj `if test -f 'tapset-python.cxx'; then $(CYGPATH_W) 'tapset-python.cxx'; else $(CYGPATH_W) '$(srcdir)/tapset-python.cxx'; fi` stap-analysis.o: analysis.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-analysis.o -MD -MP -MF $(DEPDIR)/stap-analysis.Tpo -c -o stap-analysis.o `test -f 'analysis.cxx' || echo '$(srcdir)/'`analysis.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-analysis.Tpo $(DEPDIR)/stap-analysis.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='analysis.cxx' object='stap-analysis.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-analysis.o `test -f 'analysis.cxx' || echo '$(srcdir)/'`analysis.cxx stap-analysis.obj: analysis.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-analysis.obj -MD -MP -MF $(DEPDIR)/stap-analysis.Tpo -c -o stap-analysis.obj `if test -f 'analysis.cxx'; then $(CYGPATH_W) 'analysis.cxx'; else $(CYGPATH_W) '$(srcdir)/analysis.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-analysis.Tpo $(DEPDIR)/stap-analysis.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='analysis.cxx' object='stap-analysis.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-analysis.obj `if test -f 'analysis.cxx'; then $(CYGPATH_W) 'analysis.cxx'; else $(CYGPATH_W) '$(srcdir)/analysis.cxx'; fi` stap-interactive.o: interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-interactive.o -MD -MP -MF $(DEPDIR)/stap-interactive.Tpo -c -o stap-interactive.o `test -f 'interactive.cxx' || echo '$(srcdir)/'`interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-interactive.Tpo $(DEPDIR)/stap-interactive.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='interactive.cxx' object='stap-interactive.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-interactive.o `test -f 'interactive.cxx' || echo '$(srcdir)/'`interactive.cxx stap-interactive.obj: interactive.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-interactive.obj -MD -MP -MF $(DEPDIR)/stap-interactive.Tpo -c -o stap-interactive.obj `if test -f 'interactive.cxx'; then $(CYGPATH_W) 'interactive.cxx'; else $(CYGPATH_W) '$(srcdir)/interactive.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-interactive.Tpo $(DEPDIR)/stap-interactive.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='interactive.cxx' object='stap-interactive.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-interactive.obj `if test -f 'interactive.cxx'; then $(CYGPATH_W) 'interactive.cxx'; else $(CYGPATH_W) '$(srcdir)/interactive.cxx'; fi` stap-bpf-base.o: bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-base.o -MD -MP -MF $(DEPDIR)/stap-bpf-base.Tpo -c -o stap-bpf-base.o `test -f 'bpf-base.cxx' || echo '$(srcdir)/'`bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-base.Tpo $(DEPDIR)/stap-bpf-base.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-base.cxx' object='stap-bpf-base.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-base.o `test -f 'bpf-base.cxx' || echo '$(srcdir)/'`bpf-base.cxx stap-bpf-base.obj: bpf-base.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-base.obj -MD -MP -MF $(DEPDIR)/stap-bpf-base.Tpo -c -o stap-bpf-base.obj `if test -f 'bpf-base.cxx'; then $(CYGPATH_W) 'bpf-base.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-base.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-base.Tpo $(DEPDIR)/stap-bpf-base.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-base.cxx' object='stap-bpf-base.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-base.obj `if test -f 'bpf-base.cxx'; then $(CYGPATH_W) 'bpf-base.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-base.cxx'; fi` stap-bpf-bitset.o: bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-bitset.o -MD -MP -MF $(DEPDIR)/stap-bpf-bitset.Tpo -c -o stap-bpf-bitset.o `test -f 'bpf-bitset.cxx' || echo '$(srcdir)/'`bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-bitset.Tpo $(DEPDIR)/stap-bpf-bitset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-bitset.cxx' object='stap-bpf-bitset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-bitset.o `test -f 'bpf-bitset.cxx' || echo '$(srcdir)/'`bpf-bitset.cxx stap-bpf-bitset.obj: bpf-bitset.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-bitset.obj -MD -MP -MF $(DEPDIR)/stap-bpf-bitset.Tpo -c -o stap-bpf-bitset.obj `if test -f 'bpf-bitset.cxx'; then $(CYGPATH_W) 'bpf-bitset.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-bitset.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-bitset.Tpo $(DEPDIR)/stap-bpf-bitset.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-bitset.cxx' object='stap-bpf-bitset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-bitset.obj `if test -f 'bpf-bitset.cxx'; then $(CYGPATH_W) 'bpf-bitset.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-bitset.cxx'; fi` stap-bpf-translate.o: bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-translate.o -MD -MP -MF $(DEPDIR)/stap-bpf-translate.Tpo -c -o stap-bpf-translate.o `test -f 'bpf-translate.cxx' || echo '$(srcdir)/'`bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-translate.Tpo $(DEPDIR)/stap-bpf-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-translate.cxx' object='stap-bpf-translate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-translate.o `test -f 'bpf-translate.cxx' || echo '$(srcdir)/'`bpf-translate.cxx stap-bpf-translate.obj: bpf-translate.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-translate.obj -MD -MP -MF $(DEPDIR)/stap-bpf-translate.Tpo -c -o stap-bpf-translate.obj `if test -f 'bpf-translate.cxx'; then $(CYGPATH_W) 'bpf-translate.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-translate.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-translate.Tpo $(DEPDIR)/stap-bpf-translate.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-translate.cxx' object='stap-bpf-translate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-translate.obj `if test -f 'bpf-translate.cxx'; then $(CYGPATH_W) 'bpf-translate.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-translate.cxx'; fi` stap-bpf-opt.o: bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-opt.o -MD -MP -MF $(DEPDIR)/stap-bpf-opt.Tpo -c -o stap-bpf-opt.o `test -f 'bpf-opt.cxx' || echo '$(srcdir)/'`bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-opt.Tpo $(DEPDIR)/stap-bpf-opt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-opt.cxx' object='stap-bpf-opt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-opt.o `test -f 'bpf-opt.cxx' || echo '$(srcdir)/'`bpf-opt.cxx stap-bpf-opt.obj: bpf-opt.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-bpf-opt.obj -MD -MP -MF $(DEPDIR)/stap-bpf-opt.Tpo -c -o stap-bpf-opt.obj `if test -f 'bpf-opt.cxx'; then $(CYGPATH_W) 'bpf-opt.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-opt.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-bpf-opt.Tpo $(DEPDIR)/stap-bpf-opt.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='bpf-opt.cxx' object='stap-bpf-opt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-bpf-opt.obj `if test -f 'bpf-opt.cxx'; then $(CYGPATH_W) 'bpf-opt.cxx'; else $(CYGPATH_W) '$(srcdir)/bpf-opt.cxx'; fi` stap-csclient.o: csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-csclient.o -MD -MP -MF $(DEPDIR)/stap-csclient.Tpo -c -o stap-csclient.o `test -f 'csclient.cxx' || echo '$(srcdir)/'`csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-csclient.Tpo $(DEPDIR)/stap-csclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='csclient.cxx' object='stap-csclient.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-csclient.o `test -f 'csclient.cxx' || echo '$(srcdir)/'`csclient.cxx stap-csclient.obj: csclient.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-csclient.obj -MD -MP -MF $(DEPDIR)/stap-csclient.Tpo -c -o stap-csclient.obj `if test -f 'csclient.cxx'; then $(CYGPATH_W) 'csclient.cxx'; else $(CYGPATH_W) '$(srcdir)/csclient.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-csclient.Tpo $(DEPDIR)/stap-csclient.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='csclient.cxx' object='stap-csclient.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-csclient.obj `if test -f 'csclient.cxx'; then $(CYGPATH_W) 'csclient.cxx'; else $(CYGPATH_W) '$(srcdir)/csclient.cxx'; fi` stap-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nsscommon.o -MD -MP -MF $(DEPDIR)/stap-nsscommon.Tpo -c -o stap-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nsscommon.Tpo $(DEPDIR)/stap-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap-nsscommon.Tpo -c -o stap-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nsscommon.Tpo $(DEPDIR)/stap-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap-client-nss.o: client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-nss.o -MD -MP -MF $(DEPDIR)/stap-client-nss.Tpo -c -o stap-client-nss.o `test -f 'client-nss.cxx' || echo '$(srcdir)/'`client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-nss.Tpo $(DEPDIR)/stap-client-nss.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-nss.cxx' object='stap-client-nss.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-nss.o `test -f 'client-nss.cxx' || echo '$(srcdir)/'`client-nss.cxx stap-client-nss.obj: client-nss.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-nss.obj -MD -MP -MF $(DEPDIR)/stap-client-nss.Tpo -c -o stap-client-nss.obj `if test -f 'client-nss.cxx'; then $(CYGPATH_W) 'client-nss.cxx'; else $(CYGPATH_W) '$(srcdir)/client-nss.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-nss.Tpo $(DEPDIR)/stap-client-nss.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-nss.cxx' object='stap-client-nss.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-nss.obj `if test -f 'client-nss.cxx'; then $(CYGPATH_W) 'client-nss.cxx'; else $(CYGPATH_W) '$(srcdir)/client-nss.cxx'; fi` stap-cscommon.o: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cscommon.o -MD -MP -MF $(DEPDIR)/stap-cscommon.Tpo -c -o stap-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cscommon.Tpo $(DEPDIR)/stap-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap-cscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx stap-cscommon.obj: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-cscommon.obj -MD -MP -MF $(DEPDIR)/stap-cscommon.Tpo -c -o stap-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-cscommon.Tpo $(DEPDIR)/stap-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap-cscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` stap-nss-server-info.o: nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nss-server-info.o -MD -MP -MF $(DEPDIR)/stap-nss-server-info.Tpo -c -o stap-nss-server-info.o `test -f 'nss-server-info.cxx' || echo '$(srcdir)/'`nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nss-server-info.Tpo $(DEPDIR)/stap-nss-server-info.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nss-server-info.cxx' object='stap-nss-server-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nss-server-info.o `test -f 'nss-server-info.cxx' || echo '$(srcdir)/'`nss-server-info.cxx stap-nss-server-info.obj: nss-server-info.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-nss-server-info.obj -MD -MP -MF $(DEPDIR)/stap-nss-server-info.Tpo -c -o stap-nss-server-info.obj `if test -f 'nss-server-info.cxx'; then $(CYGPATH_W) 'nss-server-info.cxx'; else $(CYGPATH_W) '$(srcdir)/nss-server-info.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-nss-server-info.Tpo $(DEPDIR)/stap-nss-server-info.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nss-server-info.cxx' object='stap-nss-server-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-nss-server-info.obj `if test -f 'nss-server-info.cxx'; then $(CYGPATH_W) 'nss-server-info.cxx'; else $(CYGPATH_W) '$(srcdir)/nss-server-info.cxx'; fi` stap-client-http.o: client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-http.o -MD -MP -MF $(DEPDIR)/stap-client-http.Tpo -c -o stap-client-http.o `test -f 'client-http.cxx' || echo '$(srcdir)/'`client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-http.Tpo $(DEPDIR)/stap-client-http.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-http.cxx' object='stap-client-http.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-http.o `test -f 'client-http.cxx' || echo '$(srcdir)/'`client-http.cxx stap-client-http.obj: client-http.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -MT stap-client-http.obj -MD -MP -MF $(DEPDIR)/stap-client-http.Tpo -c -o stap-client-http.obj `if test -f 'client-http.cxx'; then $(CYGPATH_W) 'client-http.cxx'; else $(CYGPATH_W) '$(srcdir)/client-http.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap-client-http.Tpo $(DEPDIR)/stap-client-http.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='client-http.cxx' object='stap-client-http.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_CPPFLAGS) $(CPPFLAGS) $(stap_CXXFLAGS) $(CXXFLAGS) -c -o stap-client-http.obj `if test -f 'client-http.cxx'; then $(CYGPATH_W) 'client-http.cxx'; else $(CYGPATH_W) '$(srcdir)/client-http.cxx'; fi` stap_authorize_cert-stap-authorize-cert.o: stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-stap-authorize-cert.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo -c -o stap_authorize_cert-stap-authorize-cert.o `test -f 'stap-authorize-cert.cxx' || echo '$(srcdir)/'`stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-authorize-cert.cxx' object='stap_authorize_cert-stap-authorize-cert.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-stap-authorize-cert.o `test -f 'stap-authorize-cert.cxx' || echo '$(srcdir)/'`stap-authorize-cert.cxx stap_authorize_cert-stap-authorize-cert.obj: stap-authorize-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-stap-authorize-cert.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo -c -o stap_authorize_cert-stap-authorize-cert.obj `if test -f 'stap-authorize-cert.cxx'; then $(CYGPATH_W) 'stap-authorize-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-authorize-cert.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Tpo $(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-authorize-cert.cxx' object='stap_authorize_cert-stap-authorize-cert.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-stap-authorize-cert.obj `if test -f 'stap-authorize-cert.cxx'; then $(CYGPATH_W) 'stap-authorize-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-authorize-cert.cxx'; fi` stap_authorize_cert-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo -c -o stap_authorize_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo $(DEPDIR)/stap_authorize_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_authorize_cert-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_authorize_cert-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo -c -o stap_authorize_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-nsscommon.Tpo $(DEPDIR)/stap_authorize_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_authorize_cert-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_authorize_cert-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-util.o -MD -MP -MF $(DEPDIR)/stap_authorize_cert-util.Tpo -c -o stap_authorize_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-util.Tpo $(DEPDIR)/stap_authorize_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_authorize_cert-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_authorize_cert-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_authorize_cert-util.obj -MD -MP -MF $(DEPDIR)/stap_authorize_cert-util.Tpo -c -o stap_authorize_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_authorize_cert-util.Tpo $(DEPDIR)/stap_authorize_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_authorize_cert-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_authorize_cert_CPPFLAGS) $(CPPFLAGS) $(stap_authorize_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_authorize_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_gen_cert-stap-gen-cert.o: stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-stap-gen-cert.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo -c -o stap_gen_cert-stap-gen-cert.o `test -f 'stap-gen-cert.cxx' || echo '$(srcdir)/'`stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo $(DEPDIR)/stap_gen_cert-stap-gen-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-gen-cert.cxx' object='stap_gen_cert-stap-gen-cert.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-stap-gen-cert.o `test -f 'stap-gen-cert.cxx' || echo '$(srcdir)/'`stap-gen-cert.cxx stap_gen_cert-stap-gen-cert.obj: stap-gen-cert.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-stap-gen-cert.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo -c -o stap_gen_cert-stap-gen-cert.obj `if test -f 'stap-gen-cert.cxx'; then $(CYGPATH_W) 'stap-gen-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-gen-cert.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-stap-gen-cert.Tpo $(DEPDIR)/stap_gen_cert-stap-gen-cert.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-gen-cert.cxx' object='stap_gen_cert-stap-gen-cert.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-stap-gen-cert.obj `if test -f 'stap-gen-cert.cxx'; then $(CYGPATH_W) 'stap-gen-cert.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-gen-cert.cxx'; fi` stap_gen_cert-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-util.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-util.Tpo -c -o stap_gen_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-util.Tpo $(DEPDIR)/stap_gen_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_gen_cert-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_gen_cert-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-util.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-util.Tpo -c -o stap_gen_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-util.Tpo $(DEPDIR)/stap_gen_cert-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_gen_cert-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_gen_cert-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_gen_cert-nsscommon.Tpo -c -o stap_gen_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-nsscommon.Tpo $(DEPDIR)/stap_gen_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_gen_cert-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_gen_cert-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -MT stap_gen_cert-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_gen_cert-nsscommon.Tpo -c -o stap_gen_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_gen_cert-nsscommon.Tpo $(DEPDIR)/stap_gen_cert-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_gen_cert-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_gen_cert_CXXFLAGS) $(CXXFLAGS) -c -o stap_gen_cert-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_serverd-stap-serverd.o: stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-stap-serverd.o -MD -MP -MF $(DEPDIR)/stap_serverd-stap-serverd.Tpo -c -o stap_serverd-stap-serverd.o `test -f 'stap-serverd.cxx' || echo '$(srcdir)/'`stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-stap-serverd.Tpo $(DEPDIR)/stap_serverd-stap-serverd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-serverd.cxx' object='stap_serverd-stap-serverd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-stap-serverd.o `test -f 'stap-serverd.cxx' || echo '$(srcdir)/'`stap-serverd.cxx stap_serverd-stap-serverd.obj: stap-serverd.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-stap-serverd.obj -MD -MP -MF $(DEPDIR)/stap_serverd-stap-serverd.Tpo -c -o stap_serverd-stap-serverd.obj `if test -f 'stap-serverd.cxx'; then $(CYGPATH_W) 'stap-serverd.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-serverd.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-stap-serverd.Tpo $(DEPDIR)/stap_serverd-stap-serverd.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-serverd.cxx' object='stap_serverd-stap-serverd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-stap-serverd.obj `if test -f 'stap-serverd.cxx'; then $(CYGPATH_W) 'stap-serverd.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-serverd.cxx'; fi` stap_serverd-cscommon.o: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cscommon.o -MD -MP -MF $(DEPDIR)/stap_serverd-cscommon.Tpo -c -o stap_serverd-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cscommon.Tpo $(DEPDIR)/stap_serverd-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap_serverd-cscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cscommon.o `test -f 'cscommon.cxx' || echo '$(srcdir)/'`cscommon.cxx stap_serverd-cscommon.obj: cscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cscommon.obj -MD -MP -MF $(DEPDIR)/stap_serverd-cscommon.Tpo -c -o stap_serverd-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cscommon.Tpo $(DEPDIR)/stap_serverd-cscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cscommon.cxx' object='stap_serverd-cscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cscommon.obj `if test -f 'cscommon.cxx'; then $(CYGPATH_W) 'cscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/cscommon.cxx'; fi` stap_serverd-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-util.o -MD -MP -MF $(DEPDIR)/stap_serverd-util.Tpo -c -o stap_serverd-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-util.Tpo $(DEPDIR)/stap_serverd-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_serverd-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_serverd-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-util.obj -MD -MP -MF $(DEPDIR)/stap_serverd-util.Tpo -c -o stap_serverd-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-util.Tpo $(DEPDIR)/stap_serverd-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_serverd-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` stap_serverd-privilege.o: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-privilege.o -MD -MP -MF $(DEPDIR)/stap_serverd-privilege.Tpo -c -o stap_serverd-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-privilege.Tpo $(DEPDIR)/stap_serverd-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap_serverd-privilege.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-privilege.o `test -f 'privilege.cxx' || echo '$(srcdir)/'`privilege.cxx stap_serverd-privilege.obj: privilege.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-privilege.obj -MD -MP -MF $(DEPDIR)/stap_serverd-privilege.Tpo -c -o stap_serverd-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-privilege.Tpo $(DEPDIR)/stap_serverd-privilege.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='privilege.cxx' object='stap_serverd-privilege.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-privilege.obj `if test -f 'privilege.cxx'; then $(CYGPATH_W) 'privilege.cxx'; else $(CYGPATH_W) '$(srcdir)/privilege.cxx'; fi` stap_serverd-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_serverd-nsscommon.Tpo -c -o stap_serverd-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-nsscommon.Tpo $(DEPDIR)/stap_serverd-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_serverd-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_serverd-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_serverd-nsscommon.Tpo -c -o stap_serverd-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-nsscommon.Tpo $(DEPDIR)/stap_serverd-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_serverd-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_serverd-cmdline.o: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cmdline.o -MD -MP -MF $(DEPDIR)/stap_serverd-cmdline.Tpo -c -o stap_serverd-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cmdline.Tpo $(DEPDIR)/stap_serverd-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap_serverd-cmdline.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cmdline.o `test -f 'cmdline.cxx' || echo '$(srcdir)/'`cmdline.cxx stap_serverd-cmdline.obj: cmdline.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -MT stap_serverd-cmdline.obj -MD -MP -MF $(DEPDIR)/stap_serverd-cmdline.Tpo -c -o stap_serverd-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_serverd-cmdline.Tpo $(DEPDIR)/stap_serverd-cmdline.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='cmdline.cxx' object='stap_serverd-cmdline.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(stap_serverd_CXXFLAGS) $(CXXFLAGS) -c -o stap_serverd-cmdline.obj `if test -f 'cmdline.cxx'; then $(CYGPATH_W) 'cmdline.cxx'; else $(CYGPATH_W) '$(srcdir)/cmdline.cxx'; fi` stap_sign_module-stap-sign-module.o: stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-stap-sign-module.o -MD -MP -MF $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo -c -o stap_sign_module-stap-sign-module.o `test -f 'stap-sign-module.cxx' || echo '$(srcdir)/'`stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo $(DEPDIR)/stap_sign_module-stap-sign-module.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-sign-module.cxx' object='stap_sign_module-stap-sign-module.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-stap-sign-module.o `test -f 'stap-sign-module.cxx' || echo '$(srcdir)/'`stap-sign-module.cxx stap_sign_module-stap-sign-module.obj: stap-sign-module.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-stap-sign-module.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo -c -o stap_sign_module-stap-sign-module.obj `if test -f 'stap-sign-module.cxx'; then $(CYGPATH_W) 'stap-sign-module.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-sign-module.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-stap-sign-module.Tpo $(DEPDIR)/stap_sign_module-stap-sign-module.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='stap-sign-module.cxx' object='stap_sign_module-stap-sign-module.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-stap-sign-module.obj `if test -f 'stap-sign-module.cxx'; then $(CYGPATH_W) 'stap-sign-module.cxx'; else $(CYGPATH_W) '$(srcdir)/stap-sign-module.cxx'; fi` stap_sign_module-nsscommon.o: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-nsscommon.o -MD -MP -MF $(DEPDIR)/stap_sign_module-nsscommon.Tpo -c -o stap_sign_module-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-nsscommon.Tpo $(DEPDIR)/stap_sign_module-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_sign_module-nsscommon.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-nsscommon.o `test -f 'nsscommon.cxx' || echo '$(srcdir)/'`nsscommon.cxx stap_sign_module-nsscommon.obj: nsscommon.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-nsscommon.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-nsscommon.Tpo -c -o stap_sign_module-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-nsscommon.Tpo $(DEPDIR)/stap_sign_module-nsscommon.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='nsscommon.cxx' object='stap_sign_module-nsscommon.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-nsscommon.obj `if test -f 'nsscommon.cxx'; then $(CYGPATH_W) 'nsscommon.cxx'; else $(CYGPATH_W) '$(srcdir)/nsscommon.cxx'; fi` stap_sign_module-util.o: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-util.o -MD -MP -MF $(DEPDIR)/stap_sign_module-util.Tpo -c -o stap_sign_module-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-util.Tpo $(DEPDIR)/stap_sign_module-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_sign_module-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-util.o `test -f 'util.cxx' || echo '$(srcdir)/'`util.cxx stap_sign_module-util.obj: util.cxx @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -MT stap_sign_module-util.obj -MD -MP -MF $(DEPDIR)/stap_sign_module-util.Tpo -c -o stap_sign_module-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/stap_sign_module-util.Tpo $(DEPDIR)/stap_sign_module-util.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='util.cxx' object='stap_sign_module-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(stap_sign_module_CPPFLAGS) $(CPPFLAGS) $(stap_sign_module_CXXFLAGS) $(CXXFLAGS) -c -o stap_sign_module-util.obj `if test -f 'util.cxx'; then $(CYGPATH_W) 'util.cxx'; else $(CYGPATH_W) '$(srcdir)/util.cxx'; fi` install-oldincludeHEADERS: $(oldinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(oldinclude_HEADERS)'; test -n "$(oldincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(oldincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(oldincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(oldincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(oldincludedir)" || exit $$?; \ done uninstall-oldincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(oldinclude_HEADERS)'; test -n "$(oldincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(oldincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(HEADERS) config.h all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkglibexecdir)" "$(DESTDIR)$(oldincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @BUILD_CRASHMOD_FALSE@@BUILD_TRANSLATOR_FALSE@install-exec-local: @BUILD_CRASHMOD_FALSE@@HAVE_NSS_FALSE@install-exec-local: clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-local \ clean-pkglibexecPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f ./$(DEPDIR)/stap-analysis.Po -rm -f ./$(DEPDIR)/stap-bpf-base.Po -rm -f ./$(DEPDIR)/stap-bpf-bitset.Po -rm -f ./$(DEPDIR)/stap-bpf-opt.Po -rm -f ./$(DEPDIR)/stap-bpf-translate.Po -rm -f ./$(DEPDIR)/stap-buildrun.Po -rm -f ./$(DEPDIR)/stap-cache.Po -rm -f ./$(DEPDIR)/stap-client-http.Po -rm -f ./$(DEPDIR)/stap-client-nss.Po -rm -f ./$(DEPDIR)/stap-cmdline.Po -rm -f ./$(DEPDIR)/stap-coveragedb.Po -rm -f ./$(DEPDIR)/stap-csclient.Po -rm -f ./$(DEPDIR)/stap-cscommon.Po -rm -f ./$(DEPDIR)/stap-dwarf_wrappers.Po -rm -f ./$(DEPDIR)/stap-dwflpp.Po -rm -f ./$(DEPDIR)/stap-elaborate.Po -rm -f ./$(DEPDIR)/stap-hash.Po -rm -f ./$(DEPDIR)/stap-interactive.Po -rm -f ./$(DEPDIR)/stap-loc2stap.Po -rm -f ./$(DEPDIR)/stap-main.Po -rm -f ./$(DEPDIR)/stap-mdfour.Po -rm -f ./$(DEPDIR)/stap-nss-server-info.Po -rm -f ./$(DEPDIR)/stap-nsscommon.Po -rm -f ./$(DEPDIR)/stap-parse.Po -rm -f ./$(DEPDIR)/stap-privilege.Po -rm -f ./$(DEPDIR)/stap-remote.Po -rm -f ./$(DEPDIR)/stap-rpm_finder.Po -rm -f ./$(DEPDIR)/stap-session.Po -rm -f ./$(DEPDIR)/stap-setupdwfl.Po -rm -f ./$(DEPDIR)/stap-stapregex-dfa.Po -rm -f ./$(DEPDIR)/stap-stapregex-parse.Po -rm -f ./$(DEPDIR)/stap-stapregex-tree.Po -rm -f ./$(DEPDIR)/stap-stapregex.Po -rm -f ./$(DEPDIR)/stap-staptree.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.Po -rm -f ./$(DEPDIR)/stap-tapset-itrace.Po -rm -f ./$(DEPDIR)/stap-tapset-mark.Po -rm -f ./$(DEPDIR)/stap-tapset-method.Po -rm -f ./$(DEPDIR)/stap-tapset-netfilter.Po -rm -f ./$(DEPDIR)/stap-tapset-perfmon.Po -rm -f ./$(DEPDIR)/stap-tapset-procfs.Po -rm -f ./$(DEPDIR)/stap-tapset-python.Po -rm -f ./$(DEPDIR)/stap-tapset-timers.Po -rm -f ./$(DEPDIR)/stap-tapset-utrace.Po -rm -f ./$(DEPDIR)/stap-tapsets.Po -rm -f ./$(DEPDIR)/stap-task_finder.Po -rm -f ./$(DEPDIR)/stap-translate.Po -rm -f ./$(DEPDIR)/stap-translator-output.Po -rm -f ./$(DEPDIR)/stap-util.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-util.Po -rm -f ./$(DEPDIR)/stap_gen_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po -rm -f ./$(DEPDIR)/stap_gen_cert-util.Po -rm -f ./$(DEPDIR)/stap_serverd-cmdline.Po -rm -f ./$(DEPDIR)/stap_serverd-cscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-nsscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-privilege.Po -rm -f ./$(DEPDIR)/stap_serverd-stap-serverd.Po -rm -f ./$(DEPDIR)/stap_serverd-util.Po -rm -f ./$(DEPDIR)/stap_sign_module-nsscommon.Po -rm -f ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po -rm -f ./$(DEPDIR)/stap_sign_module-util.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-oldincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS \ install-exec-local install-pkglibexecPROGRAMS \ install-pkglibexecSCRIPTS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f ./$(DEPDIR)/stap-analysis.Po -rm -f ./$(DEPDIR)/stap-bpf-base.Po -rm -f ./$(DEPDIR)/stap-bpf-bitset.Po -rm -f ./$(DEPDIR)/stap-bpf-opt.Po -rm -f ./$(DEPDIR)/stap-bpf-translate.Po -rm -f ./$(DEPDIR)/stap-buildrun.Po -rm -f ./$(DEPDIR)/stap-cache.Po -rm -f ./$(DEPDIR)/stap-client-http.Po -rm -f ./$(DEPDIR)/stap-client-nss.Po -rm -f ./$(DEPDIR)/stap-cmdline.Po -rm -f ./$(DEPDIR)/stap-coveragedb.Po -rm -f ./$(DEPDIR)/stap-csclient.Po -rm -f ./$(DEPDIR)/stap-cscommon.Po -rm -f ./$(DEPDIR)/stap-dwarf_wrappers.Po -rm -f ./$(DEPDIR)/stap-dwflpp.Po -rm -f ./$(DEPDIR)/stap-elaborate.Po -rm -f ./$(DEPDIR)/stap-hash.Po -rm -f ./$(DEPDIR)/stap-interactive.Po -rm -f ./$(DEPDIR)/stap-loc2stap.Po -rm -f ./$(DEPDIR)/stap-main.Po -rm -f ./$(DEPDIR)/stap-mdfour.Po -rm -f ./$(DEPDIR)/stap-nss-server-info.Po -rm -f ./$(DEPDIR)/stap-nsscommon.Po -rm -f ./$(DEPDIR)/stap-parse.Po -rm -f ./$(DEPDIR)/stap-privilege.Po -rm -f ./$(DEPDIR)/stap-remote.Po -rm -f ./$(DEPDIR)/stap-rpm_finder.Po -rm -f ./$(DEPDIR)/stap-session.Po -rm -f ./$(DEPDIR)/stap-setupdwfl.Po -rm -f ./$(DEPDIR)/stap-stapregex-dfa.Po -rm -f ./$(DEPDIR)/stap-stapregex-parse.Po -rm -f ./$(DEPDIR)/stap-stapregex-tree.Po -rm -f ./$(DEPDIR)/stap-stapregex.Po -rm -f ./$(DEPDIR)/stap-staptree.Po -rm -f ./$(DEPDIR)/stap-stringtable.Po -rm -f ./$(DEPDIR)/stap-tapset-been.Po -rm -f ./$(DEPDIR)/stap-tapset-dynprobe.Po -rm -f ./$(DEPDIR)/stap-tapset-itrace.Po -rm -f ./$(DEPDIR)/stap-tapset-mark.Po -rm -f ./$(DEPDIR)/stap-tapset-method.Po -rm -f ./$(DEPDIR)/stap-tapset-netfilter.Po -rm -f ./$(DEPDIR)/stap-tapset-perfmon.Po -rm -f ./$(DEPDIR)/stap-tapset-procfs.Po -rm -f ./$(DEPDIR)/stap-tapset-python.Po -rm -f ./$(DEPDIR)/stap-tapset-timers.Po -rm -f ./$(DEPDIR)/stap-tapset-utrace.Po -rm -f ./$(DEPDIR)/stap-tapsets.Po -rm -f ./$(DEPDIR)/stap-task_finder.Po -rm -f ./$(DEPDIR)/stap-translate.Po -rm -f ./$(DEPDIR)/stap-translator-output.Po -rm -f ./$(DEPDIR)/stap-util.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-stap-authorize-cert.Po -rm -f ./$(DEPDIR)/stap_authorize_cert-util.Po -rm -f ./$(DEPDIR)/stap_gen_cert-nsscommon.Po -rm -f ./$(DEPDIR)/stap_gen_cert-stap-gen-cert.Po -rm -f ./$(DEPDIR)/stap_gen_cert-util.Po -rm -f ./$(DEPDIR)/stap_serverd-cmdline.Po -rm -f ./$(DEPDIR)/stap_serverd-cscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-nsscommon.Po -rm -f ./$(DEPDIR)/stap_serverd-privilege.Po -rm -f ./$(DEPDIR)/stap_serverd-stap-serverd.Po -rm -f ./$(DEPDIR)/stap_serverd-util.Po -rm -f ./$(DEPDIR)/stap_sign_module-nsscommon.Po -rm -f ./$(DEPDIR)/stap_sign_module-stap-sign-module.Po -rm -f ./$(DEPDIR)/stap_sign_module-util.Po -rm -f ./$(DEPDIR)/stapvirt-stapvirt.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local uninstall-oldincludeHEADERS \ uninstall-pkglibexecPROGRAMS uninstall-pkglibexecSCRIPTS .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--depfiles am--refresh check check-am check-local clean \ clean-binPROGRAMS clean-cscope clean-generic clean-local \ clean-pkglibexecPROGRAMS cscope cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-hdr \ distclean-local distclean-tags dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS \ install-binSCRIPTS install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-oldincludeHEADERS install-pdf install-pdf-am \ install-pkglibexecPROGRAMS install-pkglibexecSCRIPTS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \ uninstall-local uninstall-oldincludeHEADERS \ uninstall-pkglibexecPROGRAMS uninstall-pkglibexecSCRIPTS .PRECIOUS: Makefile all: macros.systemtap macros.systemtap: $(srcdir)/macros.systemtap.in sed -e "s#@pkgdatadir@#$(pkgdatadir)#g" < $< > $@ install: all $(MAKE) $(AM_MAKEFLAGS) install-recursive git_version.stamp: @if test -f "$(srcdir)/git_version.h"; then \ if test -f "git_version.h"; then :; \ else \ cp "$(srcdir)/git_version.h" "git_version.h"; \ fi; \ fi $(GIT_VERSION_CMD) -k -s $(top_srcdir) -o git_version.h @if test -s "$(srcdir)/git_version.h"; then \ if cmp "$(srcdir)/git_version.h" "git_version.h"; then :; \ else \ echo "Error: $(srcdir)/git_version.h and git_version.h differ."; \ echo " You probably want to remove the former."; \ exit 1; \ fi; \ fi git_version.h: $(srcdir)/git_version.sh -k --srcdir $(srcdir) -o git_version.h cscope: cd $(srcdir) && \ (echo -q ; git ls-files '*.cxx' '*.c' '*.h' | grep -v '^testsuite' ) > cscope.files && \ cscope -b -q @DYNINST_CXXFLAGS@ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@install-exec-local: install-scripts # scripts must be installed before this rule is run @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@install-scripts: install-binSCRIPTS install-pkglibexecSCRIPTS @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ for f in $(bin_SCRIPTS); do \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ sed -i -e "s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(bindir)/$$f; \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ done @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ for f in $(pkglibexec_SCRIPTS); do \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ sed -i -e "/INSTALL-HOOK/d;s,sysconfdir=.*,sysconfdir=$(sysconfdir),;s,pkglibexecdir=.*,pkglibexecdir=$(pkglibexecdir)/,;s,localstatedir=.*,localstatedir=$(localstatedir),;s,\$${PKGLIBEXECDIR},$(pkglibexecdir)/," $(DESTDIR)$(pkglibexecdir)/$$f; \ @BUILD_TRANSLATOR_TRUE@@HAVE_NSS_TRUE@ done @BUILD_CRASHMOD_TRUE@$(STAPLOG): staplog.c @BUILD_CRASHMOD_TRUE@ $(CC) $(staplog_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -shared -rdynamic \ @BUILD_CRASHMOD_TRUE@ $(AM_LDFLAGS) $(LDFLAGS) -fPIC -o $@ $< @BUILD_CRASHMOD_TRUE@all-local: $(STAPLOG) example_index @BUILD_CRASHMOD_TRUE@install-exec-local: $(STAPLOG) @BUILD_CRASHMOD_TRUE@ $(MKDIR_P) $(DESTDIR)$(pkglibdir) @BUILD_CRASHMOD_TRUE@ $(INSTALL) $(STAPLOG) $(DESTDIR)$(pkglibdir) @BUILD_CRASHMOD_FALSE@all-local: example_index example_index: $(EXAMPLE_SOURCE_DIR)/index.html $(EXAMPLE_SOURCE_DIR)/index.html: $(EXAMPLE_META_FILES) $(EXAMPLE_INDEX_GEN) @echo "The script example index is outdated, run" @echo " cd $(EXAMPLE_SOURCE_DIR) && \\ " @echo " perl examples-index-gen.pl" @echo "to regenerate it." install-data-local: (cd $(srcdir)/runtime; for f in *.[ch]; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/$$f; done) @HAVE_DYNINST_TRUE@ (cd $(srcdir)/runtime/dyninst; find . \( -name '*.[ch]' \) -print \ @HAVE_DYNINST_TRUE@ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/dyninst/$$f; done) (cd $(srcdir)/runtime/unwind; find . \( -name '*.[ch]' \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/unwind/$$f; done) (cd $(srcdir)/runtime/transport; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/transport/$$f; done) (cd $(srcdir)/runtime/softfloat; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/softfloat/$$f; done) (cd $(srcdir)/runtime/linux; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/$$f; done) (cd $(srcdir)/runtime/linux/uprobes; for f in Makefile *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes/$$f; done) (cd $(srcdir)/runtime/linux/uprobes2; for f in *.[ch]; \ do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/runtime/linux/uprobes2/$$f; done) (cd $(srcdir)/tapset; find . \( -name '*.stp' -o -name '*.stpm' -o -name README \) -print \ | while read f; do $(INSTALL_DATA) -D $$f $(DESTDIR)$(pkgdatadir)/tapset/$$f; done) (cd $(srcdir)/testsuite/systemtap.examples; find . -type f -print \ | egrep -v 'check.exp|ChangeLog|examples-index-gen.pl|html/.*\.tmpl|metadatabase.dbq$$' \ | while read f; do if test -x $$f; then \ i_cmd="$(INSTALL_PROGRAM)"; else \ i_cmd="$(INSTALL_DATA)"; fi; \ $$i_cmd -D $$f $(DESTDIR)$(pkgdatadir)/examples/$$f; done) test -e $(DESTDIR)$(sysconfdir)/systemtap || mkdir -p $(DESTDIR)$(sysconfdir)/systemtap @BUILD_SERVER_TRUE@ test -e $(DESTDIR)$(localstatedir)/run/stap-server || mkdir -p $(DESTDIR)$(localstatedir)/run/stap-server @BUILD_SERVER_TRUE@ test -e $(DESTDIR)$(localstatedir)/log || mkdir -p $(DESTDIR)$(localstatedir)/log gcov: find . -name '*.gc*' | xargs rm -f $(MAKE) clean CXXFLAGS="-g -fprofile-arcs -ftest-coverage" CFLAGS="-g -fprofile-arcs -ftest-coverage" all install -sudo $(MAKE) installcheck $${RUNTESTFLAGS+RUNTESTFLAGS=$${RUNTESTFLAGS}} for dir in $(SUBDIRS); do \ (cd $$dir; gcov *.gcno > SUMMARY.gcov 2>&1 || true); \ done find . -name '*.gcov' clean-local: rm -rf ${PACKAGE_TARNAME}-*.tar.gz rm -rf ${PACKAGE_TARNAME}-${PACKAGE_VERSION} rm -rf $(TEST_COV_DIR) rm -rf stap.info rm -rf staplog.so distclean-local: rm -f doc/beginners/en-US doc/beginners/build/en-US/testsuite uninstall-local: rm -rf $(DESTDIR)$(pkgdatadir) rm -rf $(DESTDIR)$(libdir)/$(PACKAGE) -rm -rf $(DESTDIR)$(localstatedir)/cache/$(PACKAGE) @list='$(EXAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(EXAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(EXAMPLE_INSTALL_DIR)/$$p"; \ done @list='$(DEMO_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(DEMO_INSTALL_DIR)/$$p'"; \ rm -f "$(DEMO_INSTALL_DIR)/$$p"; \ done @list='$(SAMPLE_SRC)'; for f in $$list; do p=`basename $$f`; \ echo " rm -f '$(SAMPLE_INSTALL_DIR)/$$p'"; \ rm -f "$(SAMPLE_INSTALL_DIR)/$$p"; \ done rm -rf $(DESTDIR)$(sysconfdir)/systemtap rm -rf $(DESTDIR)$(docdir)/examples @BUILD_SERVER_TRUE@ rm -rf $(DESTDIR)$(localstatedir)/run/stap-server @BUILD_SERVER_TRUE@ rm -f $(DESTDIR)$(localstatedir)/log/stap-server/log check-local: SRCDIR=`cd $(srcdir); pwd`; \ PWD=`pwd`; \ $(MAKE) -C testsuite check SYSTEMTAP_RUNTIME=$$SRCDIR/runtime SYSTEMTAP_TAPSET=$$SRCDIR/tapset LD_LIBRARY_PATH=$$LD_LIBRARY_PATH$${LD_LIBRARY_PATH:+:}$$PWD/lib-elfutils:$$PWD/lib-elfutils/systemtap SYSTEMTAP_PATH=$$PWD SYSTEMTAP_INCLUDES=$$PWD/includes RUNTESTFLAGS="$(RUNTESTFLAGS)" PKGLIBDIR="$(pkglibexecdir)"; installcheck: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" installcheck-parallel: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite installcheck-parallel RUNTESTFLAGS="$(RUNTESTFLAGS)" list-unfinished: if test \! -e $(DESTDIR)$(bindir)/stap; then \ echo $(DESTDIR)$(bindir)/stap doesn\'t exist, run make install; \ exit -1; \ fi; \ if test $(builddir)/stap -nt $(DESTDIR)$(bindir)/stap; then \ echo "$(DESTDIR)$(bindir)/stap is not recent, run make install"; \ exit -1; \ fi; $(MAKE) -C testsuite list-unfinished RUNTESTFLAGS="$(RUNTESTFLAGS)" # All the variables are overridden by run-stap, but SYSTEMTAP_RUNTIME # is used by the testsuite scripts themselves. runcheck: testsuite/stap testsuite/dtrace $(MAKE) -C testsuite installcheck RUNTESTFLAGS="$(RUNTESTFLAGS)" \ SYSTEMTAP_PATH="`cd testsuite; pwd`" \ SYSTEMTAP_RUNTIME="`cd $(srcdir)/runtime; pwd`" testsuite/stap: run-stap (echo '#!/bin/sh'; echo "exec `pwd`/run-stap" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ testsuite/dtrace: dtrace (echo '#!/bin/sh'; echo "exec `pwd`/dtrace" '$${1+"$$@"}') > $@.new chmod 555 $@.new mv -f $@.new $@ update-po: (cd $(srcdir); ls -1d *.c *.cxx *.h staprun/*.c staprun/*.h) \ | grep -v loc2c-test.c \ | grep -v config.h \ | grep -v git_version.h \ | grep -v staprun/config.h \ | sort > $(srcdir)/po/POTFILES.in $(MAKE) -C po update-po @echo @echo if systemtam.pot is shown as modified ... @echo (cd $(srcdir)/po; git status *.pot) @echo @echo ... then check in with zanata ... @echo @echo % cd $(srcdir) @echo % zanata-cli -B push -s po -t po @echo % zanata-cli -B pull -s po -t po @echo @echo if the .po files are shown as modified ... @echo (cd $(srcdir)/po; git status *.po) @echo @echo ... regenerate just once ... @echo @echo % $(MAKE) -C `pwd` update-po uprobes: $(MAKE) -C $(srcdir)/runtime/uprobes clean default install-uprobes: $(MAKE) -C $(DESTDIR)$(pkgdatadir)/runtime/uprobes clean default .PHONY: $(PHONIES) dist-gzip: cd $(srcdir); git status | grep working.directory.clean || (echo "You should commit your changes before 'make rpm'.") (cd $(srcdir); git archive --prefix=systemtap-$(VERSION)/ --format=tar HEAD) | gzip > systemtap-$(VERSION).tar.gz rpm: dist-gzip if [ `id -u` = 0 ]; then echo NOTE: do not run this as root; exit 1; fi if [ ! -w `rpm --eval %_topdir` ]; then \ echo WARNING: you do not have access to `rpm --eval %_topdir`; \ echo WARNING: you may receive a permission denied error; \ echo WARNING: consider adding \'%_topdir $(HOME)/rpmbuild\' to $(HOME)/.rpmmacros; \ fi mkdir -p `rpm --eval %_specdir` mkdir -p `rpm --eval %_srcrpmdir` mkdir -p `rpm --eval %_rpmdir` mkdir -p `rpm --eval %_builddir` mkdir -p `rpm --eval %_buildroot` rpmbuild --define "_sourcedir $(PWD)/" --define "release_override .`date +%Y%m%d%H%M`" -ta systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) srpm: dist-gzip mkdir -p `rpm --eval %_srcrpmdir` rpmbuild --define "_sourcedir $(PWD)/" -ts systemtap-$(VERSION).tar.gz $(RPMBUILDFLAGS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.6/NEWS000066400000000000000000003777741414446751200141540ustar00rootroot00000000000000* What's new in version 4.6 - SystemTap has added support for the 64-bit RISC-V architecture. - stap-prep now tries to download the main kernel debuginfo file from a debuginfod server, if configured. - Updated syscall_any tapset mapping to include newer syscalls. - syscall_any tapset can be used by the bpf backend. - SystemTap now uses DynInst to perform a liveness analysis on target variables and warn when a guru-mode modification to a variable will have no effect. The liveness analysis is currently done on x86_64, PowerPC, and AArch64. - The kernel-user relayfs transport again sorts messages into a total time order across CPUs. High output-volume scripts may need a larger "-s BUF" parameter to reliably transfer. "-b" bulk mode is also available again as an alternative. - abort() tapset can be used by the bpf backend. - The bpf backend now supports foreach iteration in multi-key associative arrays. * What's new in version 4.5, 2021-05-07 - Java probing support has been updated to work with the latest versions of the JVM and byteman (PR27739). - An initial version of the bpf/uconversions.stp tapset provides tapset functions such as user_long_error() to access values in userspace. - Enabled the -c option to work with the bpf backend (PR25177). - Enum values can now be accessed as $context variables (PR25346). - Executables for which stap has execute but not read permissions (--x--x--x) can now be probed with build-id probes and debuginfod. This allows probing some setuid programs (PR27251). - Added VMA-tracking support to the stapdyn backend. - Several concurrency/locking fixes and improvements were made to the uprobes family of probes and to the transport subsystem. Large machines with hundreds of CPUs are better supported. - The kernel runtime now uses procfs as the default namespace for the relayfs pseudo-files. - Floating point variables may now be accessed directly as normal $context variables. 32-bit floats are automatically widened to doubles. (PR13838) - A wider variety of SecureBoot MOK keys are now recognized for more reliable triggering of stap-server module signing. Document some additional lockdown/secureboot administrative escape options. (PR26665) - On startup, stap explains the [man FOO] diagnostic syntax. * What's new in version 4.4, 2020-11-09 - Make syscall arguments writable again in non-DWARF probes on kernels that use syscall wrappers to pass arguments via pt_regs (currently x86_64 4.17+ and aarch64 4.19+). - Add new syntax for defining aliases with both a prologue and an epilogue: 'probe ALIAS = PROBE { }, { }' - Add @probewrite predicate. @probewrite(var) returns 1 if var has been written to in the probe handler body and 0 otherwise. The check can only be used with probes that have an epilogue or prologue. - Implicit thread local storage variables can now be accessed on x86_64, ppc64le, and s390x. - Replaced spinlocks with RCU locks in vma map and utrace task's hash table lookups which reduces CPU time a lot when there are a lot of target processes and vma tracker or task finder is enabled. We also increased the default hash table sizes to reduce hash conflicts. - stap-prep now avoids downloading kernel debuginfo if a successful connection to debuginfod server is made. - The locks required to protect concurrent access to global variables has been optimized with a "pushdown" algorithm, so that they span the smallest possible critical region. Formerly, and with --compatible=4.3, locks always spanned the entire probe handler. Lock pushdown means much greater potential concurrency between probes running on different CPUs. - Systemtap now supports kernel-lockdown configurations that disable debugfs, by instead using procfs to carry relayfs transport files. - Systemtap now supports extracting 64-bit floating point and stored in long type. Also basic floating point arithmetic and comparison functions are provided in a tapset. More automated syntax coming soon. e.g.: probe process.function("foo") { fp = user_long(& $fp_variable) println (fp_to_string (fp_add (string_to_fp("3.14"), fp))) } * What's new in version 4.3, 2020-06-11 - tapset functions for reading CPU registers and primitives involved with the process memory maps work in 'probe process.begin'. - probe aliases starting with nfs.proc support IPv6 as server_ip and client_ip. Also, ip are represented with string valued now. - The target of process probes may be specified by hexadecimal buildid as an alternative to path names. This makes it possible to probe a variety of versions or aliases of a program, even if they are running inside containers under a different path name. Works best with a debuginfod server that publishes the executables / debuginfo. The following probes glibc.so 2.32-2.fc32.x86_64 from fedora running anywhere on your machine. # export DEBUGINFOD_URLS=https://debuginfod.elfutils.org/ # stap -e 'probe process("7ca24d4dc3de9d62d9ad6bb25e5b70a3e57a342f") .function("*system") { log("hi") }' - Functions can now be context-sensitive, meaning that they may make references to $context variables and similar constructs that could formerly appear only inside probe handlers. This is implemented by cloning the such functions for each probe. Only some probe point (dwarf-based user & kernel) types supported. function foo () { println ($$vars) } probe kernel.function("do_exit") { foo() } probe process("/bin/ls").function("main") { foo() } probe process("/lib*/libc.so.6").mark("*") { foo() } - Add new tapset function dump_stack() which prints the current kernel backtrace to the kernel trace buffer (as a thin wrapper around the kernel C API function dump_stack). - Almost all of the kmalloc() allocations exceeding 4KB have been replaced by vmalloc(). This helps stap's kernel runtime work properly on systems with serious fragmentation in physical memory address space. - More $variable resolution errors may be generated, especially for @var("") constructs that target global variables. These are duplicate-eliminated by default, but may be seen with verbosity>=2. - The stapbpf backend now supports try-catch statements, an improved error tapset and error probes. - The "Build-id mismatch" condition now becomes a warning, so while related probes are not inserted, the rest of the script may run. - The process(EXE).begin probe handlers are now always triggered for already-running target processes. - The proc_mem_rss() tapset function now includes the resident shared memory pages as expected. The old behavior can be restored by the --compatible=4.2 option on the command line. - Modules compiled with guru mode for a particular kernel version can now only be loaded on kernels with exactly matching version (vermagic string) instead of any kernel whose API matches according to the modversions mechanism. Use -B CONFIG_MODVERSIONS=y to restore the prior behaviour. * What's new in version 4.2, 2019-11-18 - Initial support for multi-dimensional supports has been added to the stapbpf backend. Note that these arrays cannot be iterated upon with a foreach loop. - The stapbpf backend now supports sorting by value in foreach loops. - The stapbpf backend now supports the concatenation operator for userspace probes. - The stapbpf backend now supports the target() function and -x option. - The gettimeofday_* functions are now provided for the stapbpf backend. - The values of an array can now be iterated over in foreach loops in the stapbpf backend. They are no longer defaulted to 0. - The stapbpf backend now supports order parameterization for begin and end probes. - When the -v option is set along with -L option, the output includes duplicate probe points which are distinguished by their PC address. - The stapbpf backend now supports stap-exporter extensions. - The stapbpf backend now supports procfs probes. The implementation uses FIFO special files in /var/tmp/systemtap-$EFFUSER/MODNAME instead of the proc filesystem files. - The eBPF backend now uses bpf raw tracepoints for kernel.trace("*") probes. These have target variable arguments that match the arguments available for the traditional linux kernel modules tracepoints. Support for the older bpf tracepoint arguments can be forced with a --compatible=4.1 option on the command line. - New backtracing functions print_[u]backtrace_fileline() have been added to the tapset. These functions behave similarly to print_[u]backtrace(), the only difference being that file names and line numbers are added to the backtrace. - Now it is possible to issue a backtrace using user specified pc, sp, and fp which can be used to generate backtraces of different contexts. This was introduced to get backtraces of user code from within the go runtime but it can also be used to do things like generating backtraces of user code from within signal handlers. - The compiler optimizes out probes with empty handlers. Previously, warnings were issued but, the probe was not internally removed. For example, this script now outputs a warning and an error as the only probe handler is empty: probe begin {} Additionally, probe handlers that evaluate to empty are also removed. For example, in this script, the begin probe is elided as $foo does not exist, however, an error won't be outputted because atleast one probe with a non-empty handler exists (probe begin): probe begin { print("Protected from elision") } probe end { if (@defined($foo)) { print("Evaluates to empty handler") } } - The automatic printing implementation now differentiates between pointer and integer types, which are printed as hex or decimal respectively. - The sys/sdt.h file changes the way i386 registers operands are sometimes named, due to an ambiguity. A comment block explains. * What's new in version 4.1, 2019-05-07 - Runtime/tapsets were ported to include up to kernel version 5.1-rc2 - The translator's pass-2 (elaboration) phase has been dramatically accelerated by eschewing processing of unreferenced parts of the tapset and embedded-C code. - New macros @this1, ..., @this8 have been added to the script language. The macros can be used to save values in entry probes and later retrieve them in return probes. This can be used in instances where @entry does not work. For example: probe tp_syscall.read { @this1 = buf_uaddr } probe tp_syscall.read.return { buf_uaddr = @this1 printf("%s", user_string(buf_uaddr)) } - Operator @var() no longer assumes @entry() in return probes. The old behavior can be restored by the '--compatible 4.0' option. - Where available (kernel 4.15+), the kernel-module runtime now uses the kernel-provided ktime_get_real_fast_ns() mechanism for timekeeping rather than the SystemTap runtime's own timekeeping machinery. - New stapbpf tapset task.stp with function task_current. - New stapbpf tapset functions kernel_string, kernel_string_n, execname, ktime_get_ns. - A new stapbpf transport layer has been implemented based on perf_events infrastructure. This transport layer removes some limitations on strings and printf() that were previously imposed by BPF's trace_printk() mechanism: - It is now possible to use format-width specifiers in printf(). - It is now possible to use more than three format specifiers in printf(). - It is now possible to use multiple '%s' format specifiers in printf(). - Using stapbpf should no longer trigger a trace_printk()-associated warning on dmesg. - In the stapbpf backend, foreach() now supports iteration of arrays with string keys. - A preview version of statistical aggregate functionality for stapbpf is now included. For now, in the stapbpf backend, aggregates only support @count(), @sum() and @avg() operations. - Added support for unhandled DWARF operator DW_OP_GNU_parameter_ref in location expressions for target symbols. * What's new in version 4.0, 2018-10-13 - Runtime/tapsets were ported to include up to kernel version 4.19-rc - A new network service, stap-exporter, is included. It glues systemtap and the web. It allows a prometheus (or compatible systems such as pcp) to consume metrics exported by systemtap scripts. Some tapset macros/functions are available to make it easier to write such scripts. See the stap-exporter(8) man page and the systemd service. - When a systemtap module is loaded, the name of the original stap script is now printed to dmesg by the kernel runtime. - On some Fedora kernels, the information necessary to automatically engage in SecureBoot module signing is hidden from systemtap. Setting the $SYSTEMTAP_SIGN environment variable forces it on. A running stap-server instance will also be needed. - Embedded-C functions marked /* guru */ may now be invoked from other tapset probes / functions, while still being invalid for normal call from an unprivileged user script. - The syscall tapset is now updated to work on kernel 4.17+. Additionally, the tapset now includes an automatic fallback alias to the sys_enter / sys_exit kernel tracepoints, if no other kprobe-based mechanism is found. These changes have brought unavoidable consequences. Raw $target variables for the syscall arguments and return probes (e.g. @entry($fd), $return, returnval()) may not longer be relied upon. Instead, use the variables defined by the tapset aliases. For example: % stap -L syscall.read syscall.read name:string fd:long buf_uaddr:long count:long argstr:string % stap -L syscall.read.return syscall.read.return name:string retval:long retstr:string to see the available variables for that syscall. See [man stapprobes] for further details. returnval() in particular is being deprecated soon; use retval in syscall.*.return probes instead. - New script language operators @kderef/@uderef and @kregister/@uregister were added. @kderef/@uderef (size,address) can be used to dereference integers and @kregister/@uregister (dwarf#) can be used to access register values. - A systemd service file has been added for systemtap.service (which runs a configurable set of scripts automatically on system startup). The existing /etc/init.d/systemtap init script has been moved to a new utility command 'systemtap-service' which preserves functionality such as configuring onboot systemtap scripts via dracut. See systemtap-service(8) for details. - The eBPF backend's string support has been improved. Strings can now be stored in variables, passed as function arguments, and stored as array keys and values. - The 3rd operand of the ternary operator '?:' in the script language now binds tighter than the binary assignment operators like '=' and '+=', just like the C language. The original operator precedence can be restored by the '--compatible 3.3' option. - The script language now supports the use of bare 'return' statements (without any return values) inside functions which do not return any values. A trailing semicolon is recommended for such return statements to avoid any potential ambiguity. The parser treats a following semicolon (';') or a closing curly bracket ('}') as a terminator for such bare return statements. - Parentheses after unary '&' with a target-symbol expression is now accepted in the script language. - Tapset functions register() and u_register() now support 8-bit x86 register names "ah", "al", "bh", "bl", "ch", "cl", "dh", and "dl" on both x86_64 and i386. And 16-bit x86 registers are now truly read as 16-bit integers instead of as 32-bit ones. - The experimental ftrace ring buffer mechanism (STP_USE_RING_BUFFER) has been deprecated and may be removed in future versions. * What's new in version 3.3, 2018-06-08 - A new "stap --example FOO.stp" mode searches the example scripts distributed with systemtap for a file named FOO.stp, so its whole path does not need to be typed in. - Systemtap's runtime has learned to deal with several of the collateral damage from kernel hardening after meltdown/spectre, including more pointer hiding and relocation. The kptr_restrict procfs flag is forced on if running on a new enough kernel. - The "stap --sysroot /PATH" option has received a revamp, so it works much better against cross-compiled environments. - The eBPF backend has learned to perform loops - at least in the userspace "begin/end" probe contexts, so one can iterate across BPF arrays for reporting. (The linux kernel eBPF interpreter precludes loops and string processing.) It can also handle much larger probe handler bodies, with a smarter register spiller/allocator. - The eBPF backend now supports uprobes, perf counter, timer, and tracepoint probes. - An rpm macro %_systemtap_tapsetdir is now defined, to make it easier for third party packages to add .stp files into the standard tapset. - Several low level locking-related fixes were added to the runtime that used uprobes/tracepoint apis, in order to work more reliably on rt kernels and on high-cpu-count machines. - Runtime/tapsets were ported to include up to kernel version 4.16. (The syscall tapsets are broken on kernel 4.17-rc, and will be fixed in a next release coming soon; PR23160.) - Add new built-in tapset function abort() which is similar to exit(), but it aborts the current probe handler (and any function calls in it) immediately instead of waiting for its completion. Probe handlers already running on *other* CPU cores, however, will still continue to their completion. Unlike error(), abort() cannot be caught by try {...} catch {...}. Similar to exit(), abort() yeilds the zero process exit code. It works with both the kernel and dyninst runtimes. This function can be disabled by the '--compatible 3.3' option. * What's new in version 3.2, 2017-10-18 - SystemTap now includes an extended Berkeley Packet Filter (eBPF) backend. This experimental backend does not use kernel modules and instead produces eBPF programs that are verified by the kernel and executed by an in-kernel virtual machine. Select this backend with the new stap option '--runtime=bpf'. For example: stap --runtime=bpf -e \ 'probe kernel.function("sys_open") { printf("hi from stapbpf!\n") }' Please see the stapbpf(8) man page for more information. - The regular expression engine now supports extraction of the matched string and subexpressions using the matched() tapset function: if ("regexculpicator" =~ "reg(ex.*p).*r") log(matched(1)) -> exculp - The translator produces better diagnostics for common/annoying case of missing debuginfo that blocks use of context $variables. - "stap -k" build trees in $TMPDIR now also include a preprocessed .i form of the generated module .c code, for problem diagnostics purposes. - The syscall.execve probes now provide a decoded env_str string vector, just like the argument vector. Because of this, the unused __count_envp() and __count_compat_evenp() functions have been deprecated. - The task_exe_file() Function has been deprecated and replaced by the current_exe_file() function. - A new probe alias input.char allows scripts to access input from stdin during runtime. * What's new in version 3.1, 2017-02-17 - Systemtap now needs C++11 to build. - Syscall and nd_syscall tapsets have been merged in a way that either dwarf-based, or non-dwarf probe gets automatically used based on debuginfo availability (e.g. probe syscall.open). To force use the dwarf based probe, a dw_syscall has been introduced (e.g. probe dw_syscall.open) and the non-dwarf syscall probes were left untouched (e.g. nd_syscall.open). - The syscall tapset files have been reorganized in a way that original big tapset files carrying many syscall probes were split into smaller 'sysc_' prefixed tapset files. This should reduce the syscall tapset maintenance burden. - The powerpc variant of syscall.compat_sysctl got deprecated on favor of syscall.sysctl32. This aligns the syscall to its respective nd_syscall and to ia64/s390/x86_64 variants too. - The syscall.compat_pselect7a (this was actually a typo, but still available for compatibility purposes with --compatible 1.3) has beed deprecated. - The 'description_auddr' convenience variable of syscall.add_key has been deprecated. - Support has been added for probing python 2 and 3 functions using a custom python helper module. Python function probes can target function entry, returns, or specific line numbers. probe python2.module("myscript").function("foo") { println($$parms) } To run with the custom python helper module, you'd use python's '-m' option like the following: stap myscript.stp -c "python -m HelperSDT myscript.py" - Java method probes now convert all types of java parameters to strings using the java toString() method before passing them to systemtap probes; new argN variables copy them into string variables. Previously, only numeric types were passed, and only by casting to integers. The previous behaviour is available with --compatible=3.0 . 3.1: probe java(...).class(...).method(...) { printf("%s", arg1) } 3.0: probe java(...).class(...).method(...) { printf("%d", $arg1) } - An older defensive measure to suppress kernel kprobes optimizations since the 3.x era has been disabled for recent kernels. This improves the performance of kernel function probes. In case of related problems, please report and work around with: # echo 0 > /proc/sys/debug/kprobes-optimization - Context variables in .return probes should be accessed with @entry($var) rather than $var, to make it clear that entry-time snapshots are being used. The latter construct now generates a warning. Availability testing with either @defined(@entry($var)) or @defined($var) works. - Tapsets containing process probes may now be placed in the special $prefix/share/systemtap/tapset/PATH/ directory to have their process parameter prefixed with the location of the tapset. For example, process("foo").function("NAME") expands to process("/usr/bin/foo").function("NAME") when placed in $prefix/share/systemtap/tapset/PATH/usr/bin/ This is intended to help write more reusable tapsets for userspace binaries. - The implementation of "var <<< X" for each aggregate variable is now specially compiled to compute only the script-requested @op(var) values, not all potential ones. This speeds up the <<< operations. - Systemtap now warns if script arguments given on the command line are unused, instead of mentioned by the script with $n/@n. - Netfilter tapsets now provide variables data_hex and data_str to display packet contents in hexadecimal and ASCII respectively. - Translator now accepts new @const() operator for convenient expressing constants in tapset code, or guru-mode scripts. See stap(1) for details. - New -T option allows the script to be terminated after a specified number of seconds. This is a shortcut for adding the probe, timer {exit()}. - New installcheck-parallel testsuite feature allows running the tests in parallel in order to save time. See testsuite/README for details. - New tapset functions set_user_string(), set_user_string_n(), set_user_long() set_user_int(), set_user_short(), set_user_char() and set_user_pointer() to write a value of specified type directly to a user space address. - New tapset functions user_buffer_quoted(), user_buffer_quoted_error(), kernel_buffer_quoted(), and kernel_buffer_quoted_error() to print a buffer of an exact length. These functions can handle '\0' characters as well. - New statistics @variance() operator using the Welford's online algorithm for per-cpu computation, and the Total Variance formula authored by Niranjan Kamat and Arnab Nandi from the Ohio State University for the cross-cpu aggregation. - New command within interactive mode, sample. Allows you to search through all included example scripts to load for further editing or running. Sample and example scripts have been moved to /usr/share/systemtap/examples. A symlink in the former location under $docdir links to it. * What's new in version 3.0, 2016-03-27 - The new experimental "interactive" mode, specified by "stap -i", drops you into a command-line prompt where you can build up a script, run it, edit it, run it again, etc. Type "help" for a list of commands. - New experimental --monitor[=INTERVAL] option similar to unix "top". This allows users to see statistics about the running module(uptime, module name, invoker uid, memory sizes, global variables, and the current probe list along with their statistics). An interface is also provided to allow control over the running module(resetting global variables, sorting the list of probes, deactivating and reactivating probes). - The performance of associative arrays have been dramatically improved, especially for densely filled tables and for multiple indexes. The hash tables behind these arrays is now sized as a function of the array maximum size with an optional MAPHASHBIAS space/time tradeoff knob. - Add macros @prints to print a scalar aggregate variable, @prints[1-9] to print an array aggregate (of given index-arity), formatted similarly to the automatic printing of written-only global variables. global a, b probe oneshot { a <<< 1; b[tid()] <<< 2 } probe end { @prints(a); @prints1(b) } - Functions may now be overloaded during module runtime using the "next" statement in script functions and STAP_NEXT macro for embedded-C functions. They may also be overloaded by number of parameters during compile time. For example, Runtime overloading: function f() { if (condition) next; print("first function") } function f() %{ STAP_NEXT; print("second function") %} function f() { print("third function") } For the given functions above, a functioncall f(), will execute the body of the third function if condition evaluates to true and print "third function". Note that the second function is unconditionally nexted. Parameter overloading: function g() { print("first function") } function g(x) { print("second function") } g() -> "first function" g(1) -> "second function" Note that runtime overloading does not occur in the above example as the number of parameters of the functions differ. The use of a next statement inside a function while no more overloads remain will trigger a runtime exception. The function candidates are selected at compile time and is determined by the number of arguments provided for the functioncall. - Add Czech version of manual pages. - The stap compile server will log the stap client's options that are passed to the server. The options that get logged on the server will include the script name or the -e script, depending on which is used by the client. - Embedded-C functions and blocks may now access script level global variables using the STAP_GLOBAL_GET_* and STAP_GLOBAL_SET_* macros. To read or write the script global var, the /* pragma:read:var */ or /* pragma:write:var */ marker must be placed in the embedded-C function or block. The written type must match the type inferred at script level. Scalars: STAP_GLOBAL_SET_var(STAP_GLOBAL_GET_var()+1) -> increments script global var by 1 STAP_GLOBAL_SET_var("hello") Associative arrays: STAP_GLOBAL_GET_var(index-1, ..., index-n) STAP_GLOBAL_SET_var(index-1, ..., index-n, new value) - Probe point brace expansion is now supported to improve brevity in specifying probe points. For example, process.{function("a"), function("b").{call,return}} => process.function("a"), process.function("b").call, process.function("b").return process.{function("*").callees,plt}? => process.function("*").callees?, process.plt? {kernel,module("nfs")}.function("nfs*")! => kernel.function("nfs*")!, module("nfs").function("nfs*")! - Profiling timers at arbitrary frequencies are now provided and perf probes now support a frequency field as an alternative to sampling counts. probe timer.profile.freq.hz(N) probe perf.type(N).config(M).hz(X) The specified frequency is only accurate up to around 100hz. You may need to provide a higher value to achieve the desired rate. - Added support for private global variables and private functions. The scope of these is limited to the tapset file they are defined in (PR19136). - New tapset function string_quoted() to quote and \-escape general strings. String $context variables that are pretty-printed are now processed with such a quotation engine, falling back to a 0x%x (hex pointer) on errors. - Functions get_mmap_args() and get_32mmap_args() got deprecated. * What's new in version 2.9, 2015-10-08 - SystemTap now uses symbols from /proc/kallsyms when kernel debuginfo is not available. - New --prologue-searching[=WHEN] option has been added to stap with '-P' being its short counterpart. Using --prologue-searching=never turns prologue searching deliberately off working around issue of int_arg() returning wrong value when a 32-bit userspace binary having debug info is being probed with active prologue searching (PR18649). - The powerpc variant of nd_syscall.compat_sysctl got deprecated on favor of nd_syscall.sysctl32. This aligns the nd_syscall to its respective syscall and to ia64/s390/x86_64 variants too. - New tapset function assert(expression, msg) has been added. - Embedded-C functions may now use the new STAP_PRINTF(fmt, ...) macro for output. - New tapset functions fullname_struct_path and fullname_struct_nameidata resolve full path names from internal kernel struct pointers. - New tapset functions arch_bytes() and uarch_bytes() to obtain address size for kernel and user space respectively. - New tapset function switch_file() allows control over rotation of output files. - The [nd_]syscall tapset got autodocumented. Related paragraph got added to PDF and HTML tapset reference. Also a new tapset::syscall 3stap man page got added. - Embedded-C functions with parameter arity-0 can now be marked with the /* stable */ /* pure */ pragmas, if (roughly speaking) the function is side-effect-free and idempotent. The translator may execute these speculatively and have their results memoized. This lets probes with multiple calls to such functions run faster. Context variable ($foo) getter functions (in non-guru mode), and numerous tapset functions are now marked as /* stable */ /* pure */. Several example scripts have been modified to eschew explicit memoization. - Callee probe points now support '.return' and '.call' suffix. For example, process("proc").function("foo").callee("bar").return will fire upon returning from bar when called by foo. process("proc").function("foo").callee("bar").call will only fire for non-inlined callees. - The following tapset variables and functions are deprecated in version 2.9: - The '__int32_compat' library macro got deprecated in favor of new '__compat_long' library macro. - The 'uargs' convenience variable of the 'seccomp' syscall probe got deprecated in favor of new 'uargs_uaddr' variable. - SystemTap has reduced its memory consumption by using interned_strings (a wrapper for boost::string_ref) in place of std::string instances. The change is to reduce the number of duplicate strings created by replacing them with interned_strings which act like pointers to existing strings. For the implementation of interned_string, see stringtable.h * What's new in version 2.8, 2015-06-17 - SystemTap has improved support for probing golang programs. Work has been done to be able to handle DWARF information, reporting file names, line numbers, and column numbers, and tolerance of odd characters in symbol names. - The function::*, probe::* and new macro::* man pages cross-references the enclosing tapset::* man page. For example: function::pn(3stap) mentions tapset::pn(3stap) in the SEE ALSO section - New stapref(1) man page provides a reference for the scripting language. The stapref page contains an overview of the features available in the language, such as keywords, data types, operators and more. - The @task macro performs the very common @cast to a task_struct. The embedded-C bodies of task_current() and pid2task() are now wrapped by @task, which gives them a debuginfo type on the return value. With autocast type propagation, this removes the need for any explicit @cast in many places. Other places which take untyped task pointers as parameters, for instance, now use @task as well to simplify their code. - New namespace-aware tapset functions [task_]ns_*() and ia new option --target-namespaces=PID to denote a target set of namespaces corresponding to the PID's namespaces. The namespace-aware tapsets will return values relative to the target namespaces if specified, or the stap process' namespaces. - Netfilter probes now attempt to decode Spanning Tree Protocol packets into local variables: probe netfilter.bridge.*, br_* variables, stp_dump.stp sample script. - Colorization of error string tokens is made more robust, especially in presence of $N/@N substitution. - The following tapset variables and functions are deprecated in version 2.8: - The 'hostname_uaddr' variable in the syscall.setdomainname and nd_syscall.setdomainname probe aliases have been deprecated in favor of the new 'domainname_uaddr' variable. - The 'fd' and 'fd_str' variables in the syscall.execveat and nd_syscall.execveat probe aliases have been deprecated in favor of the new 'dirfd' and 'dirfd_str' variables. * What's new in version 2.7, 2015-02-18 - Some systemtap sample scripts are now identified with the "_best" keyword, because they are generally useful or educational. They are now promoted within the generated index files. - Passing strings to and from functions has become faster due to optimization (passing some strings by reference instead of by value/copy). It may be disabled by using the unoptimize flag (-u). To make embedded-C functions eligible for the same optimization, use the pragma /* unmodified-fnargs */ to indicate that the function body will not modify the function arguments. Remember to use MAXSTRINGLEN for string length, rather than sizeof(string_arg) (which might now be a pointer). - SystemTap now allows .function probes to be specified by their full function name, file, and declaration line number. Use the .statement probe to probe a specific line number. - Tracepoint probes can now also be specified by the target subsystem. For example, the following are all supported: probe kernel.trace("sched:sched_switch") --> probe sched_switch found in the sched subsystem probe kernel.trace("sched:*") --> probe all tracepoints in sched subsystem As a result, tapset functions such as pn() will now return a different string than before. To retain the previous behaviour, use '--compatible=2.6'. - The following functions are deprecated in release 2.7: - _adjtx_mode_str(), _statfs_f_type_str(), _waitid_opt_str(), _internal_wait_opt_str(), and _epoll_events_str(). - New tapset functions [u]symfileline(), [u]symfile() and [u]symline() will return a string containing the specified portion of the filename:linenumber match from a given address. Using these functions may result in large generated modules from stored address->file:line information. * What's new in version 2.6, 2014-09-05 - SystemTap now supports on-the-fly arming/disarming of certain probe types: kprobes, uprobes, and timer.*s(NUM) probes. For example, this probe probe kernel.function("vfs_read") if (i > 4) { ... } will automatically register/unregister the associated kprobe on vfs_read whenever the value of the condition changes (as some probe handler modifies 'i'). This allows us to avoid probe overhead when we're not interested. If the arming capability is not relevant/useful, nest the condition in the normal probe handler: probe kernel.function("vfs_read") { if (i > 4) { ... } } - statement("*@file:NNN").nearest probes now available to let systemtap translate probe to nearest probe-able line to one given if necessary - process("PATH").library("PATH").plt("NAME").return probes are now supported. - SystemTap now supports SDT probes with operands that refer to symbols. - While in listing mode (-l/-L), probes printed are now more consistent and precise. - Statement probes now support enumerated linenos to probe discontiguous linenos using the form: process.statement("foo@file.c:3,5-7,9") - Statement counting is now suppressed in the generated c code for probes that are non-recursive and loop-free. Statement counting can be turned back on in unoptimize mode (-u). - SystemTap now asserts that the PID provided for a process probe corresponds to a running process. - DWARF process probes can be bound to a specific process using the form: process(PID).function("*") - SystemTap now accepts additional scripts through the new -E SCRIPT option. There still needs to be a main script specified through -e or file in order to provide an additional script. This makes it feasible to have scripts in the $HOME/.systemtap/rc file. For example: -E 'probe begin, end, error { log("systemtap script " . pn()) }' -E 'probe timer.s(30) { error ("timeout") } The -E SCRIPT option can also be used in listing mode (-l/-L), such that probe points for the additional scripts will not listed, but other parts of the script are still available, such as macros or aliases. - SystemTap now supports array slicing within foreach loop conditions, delete statements and membership tests. Wildcards are represented by "*". Examples of the expressions are: foreach ([a,b,c] in val[*,2,*]) delete val[*, 2, *] [*, 2, *] in val - Integer expressions which are derived from DWARF values, like context $vars, @cast, and @var, will now carry that type information into subsequent reads. Such expressions can now use "->" and "[]" operators, as can local variables which were assigned such values. foo = $param->foo; printf("x:%d y:%d\n", foo->x, foo->y) printf("my value is %d\n", ($type == 42 ? $foo : $bar)->value) printf("my parent pid is %d\n", task_parent(task_current())->tgid) * What's new in version 2.5, 2014-04-30 - Systemtap now supports backtracing through its own, invoking module. - Java probes now support backtracing using the print_java_backtrace() and sprint_java_backtrace() functions. - Statement probes (e.g. process.statement) are now faster to resolve, more precise, and work better with inlined functions. - New switches have been added to help inspect the contents of installed library files: stap --dump-functions --> list all library functions and their args stap --dump-probe-aliases --> list all library probe aliases - The heuristic algorithms used to search for function-prologue endings were improved, to cover more optimization (or lack-of-optimization, or incorrect-debuginfo) cases. These heuristics are necessary to find $context parameters for some function-call/entry probes. We recommend programs be built with CFLAGS+=-grecord-gcc-switches to feed information to the heuristics. - The stap --use-server option now more correctly supports address:port type parametrization, for manual use in the absence of avahi. - A new probe alias "oneshot" allows a single quick script fragment to run, then exit. - The argv tapset now merges translate-time and run-time positional arguments, so all of these work: stap -e 'probe oneshot {println(argv[1]," ",argv[2])}' hello world stap -e 'probe oneshot {println(argv[1]," ",argv[2])}' \ -G argv_1=hello -G argv_2=world staprun hello.ko argv_1=hello argv_2=world - SystemTap now falls back on the symbol table for probing functions in processes if the debuginfo is not available. - SystemTap now supports a %( guru_mode == 0 /* or 1 */ %) conditional for making dual-use scripts. - SystemTap now supports UEFI/SecureBoot systems, via machine-owner-keys maintained by a trusted stap-server on the network. (Key enrollment requires a one-time reboot and BIOS conversation.) https://sourceware.org/systemtap/wiki/SecureBoot - SystemTap now reports more accurate and succinct errors on type mismatches. - Embedded-C functions may use STAP_RETURN(value) instead of the more wordy STAP_RETVALUE assignment followed by a "goto out". The macro supports numeric or string values as appropriate. STAP_ERROR(...) is available to return with a (catchable) error. - Some struct-sockaddr fields are now individually decoded for socket-related syscalls: probe syscall.connect { println (uaddr_af, ":", uaddr_ip) } - The documentation for the SystemTap initscript service and the SystemTap compile-server service have been completely converted from README files to man pages (see systemtap(8) and stap-server(8)). - SystemTap is now capable of inserting modules early during the boot process on dracut-based systems. See the 'onboot' command in systemtap(8) for more information. - DWARF probes can now use the '.callee[s]' variants, which allow more precise function probing. For example, the probe point process("myproc").function("foo").callee("bar") will fire upon entering bar() from foo(). A '.callees' probe will instead place probes on all callees of foo(). Note that this also means that probe point wildcards should be used with more care. For example, use signal.*.return rather than signal.*.*, which would also match '.callees'. See stapprobes(3stap) for more info. This feature requires at least GCC 4.7. - A few new functions in the task_time tapsets, as well as a new tapset function task_ancestry(), which prints out the parentage of a process. - The kprocess.exec probe has been updated to use syscall.execve, which allows access to the new process' arguments (through the new 'argstr' or 'args' variables) as well as giving better support across kernel versions. Note also that the 'filename' variable now holds the filename (quoted), or the address (unquoted) if it couldn't be retrieved. - The [s]println() function can now be called without any arguments to simply print a newline. - Suggestions are now provided when markers could not be resolved. For example, process("stap").mark("benchmart") will suggest 'benchmark'. - SystemTap colors can now be turned off by simply setting SYSTEMTAP_COLORS to be empty, rather than having to make it invalid. - There is a new context tapset function, pnlabel(), which returns the name of the label which fired. - The following tapset variables and functions are deprecated in release 2.5: - The 'clone_flags', 'stack_start', 'stack_size', 'parent_tid_uaddr', and 'child_tid_uaddr' variables in the 'syscall.fork' and 'nd_syscall.fork' probe aliases. - The '_sendflags_str()' and '_recvflags_str()' functions have been deprecated in favor of the new '_msg_flags_str()' function. - The 'flags' and 'flags_str' variables in the 'syscall.accept' and 'nd_syscall.accept' probe alias. - The 'first', 'second', and 'uptr_uaddr' variables in the 'syscall.compat_sys_shmctl', and 'nd_syscall.compat_sys_shmctl' probe aliases have been deprecated in favor of the new 'shmid', 'cmd', and 'buf_uaddr' variables. * What's new in version 2.4, 2013-11-06 - Better suggestions are given in many of the semantic errors in which alternatives are provided. Additionally, suggestions are now provided when plt and trace probes could not be resolved. For example, kernel.trace("sched_siwtch") will suggest 'sched_switch'. - SystemTap is now smarter about error reporting. Errors from the same source are considered duplicates and suppressed. A message is displayed on exit if any errors/warnings were suppressed. - Statistics aggregate typed objects are now implemented locklessly, if the translator finds that they are only ever read (using the foreach / @count / etc. constructs) in a probe-begin/end/error. - SystemTap now supports probing inside virtual machines using the libvirt and unix schemes, e.g. stap -ve 'probe timer.s(1) { printf("hello!\n") }' \ --remote=libvirt://MyVirtualMachine Virtual machines managed by libvirt can be prepared using stapvirt. See stapvirt(1) and the --remote option in stap(1) for more details. - Systemtap now checks for and uses (when available) the .gnu_debugdata section which contains a subset of debuginfo, useful for backtraces and function probing - SystemTap map variables are now allocated with vmalloc() instead of with kmalloc(), which should cause memory to be less fragmented. - Although SystemTap itself requires elfutils 0.148+, staprun only requires elfutils 0.142+, which could be useful with the '--disable-translator' configure switch. - Under FIPS mode (/proc/sys/crypto/fips_enabled=1), staprun will refuse to load systemtap modules (since these are not normally signed with the kernel's build-time keys). This protection may be suppressed with the $STAP_FIPS_OVERRIDE environment variable. - The stap-server client & server code now enable all SSL/TLS ciphers rather than just the "export" subset. - For systems with in-kernel utrace, 'process.end' and 'thread.end' probes will hit before the target's parent process is notified of the target's death. This matches the behavior of newer kernels without in-kernel utrace. * What's new in version 2.3, 2013-07-25 - More context-accessing functions throw systemtap exceptions upon a failure, whereas in previous versions they might return non-error sentinel values like "" or "". Use try { } / catch { } around these, or new wrapper functions such as user_string_{n_}quoted() that internally absorb exceptions. - java("org.my.MyApp") probes are now restricted to pre-existing jvm pid's with a listing in jps -l output to avoid recursive calls - The tapset [nd_]syscall.semop parameter tsops_uaddr is renamed sops_uaddr for consistency with [nd_]syscall.semtimedop. - The udp.stp tapset adds some ip-address/port variables. - A new guru-mode-only tapset function raise() is available to send signals to the current task. - Support for the standard Posix ERE named character classes has been added to the regexp engine, e.g. [:digit:], [:alpha:], ... - A substantial internal overhaul of the regexp engine has resulted in correct behaviour on further obscure edge cases. The regexp engine now implements the ERE standard and correctly passes the testsuite for the glibc regexp engine (minus portions corresponding to unimplemented features -- i.e. subexpression capture and reuse). - Alternative functions are now suggested when function probes could not be resolved. For example, kernel.function("vfs_reads") will suggest vfs_read. Other probes for which suggestions are made are module.function, process.function, and process.library.function. - Has life been a bit bland lately? Want to spice things up? Why not write a few faulty probes and feast your eyes upon the myriad of colours adorning your terminal as SystemTap softly whispers in your ear... 'parse error'. Search for '--color' in 'man stap' for more info. - The following tapset functions are deprecated in release 2.3: 'stap_NFS_CLIENT', '__getfh_inode', '_success_check', '_sock_prot_num', '_sock_fam_num', '_sock_state_num', '_sock_type_num', and '_sock_flags_num'. * What's new in version 2.2.1, 2013-05-16 * What's new in version 2.2, 2013-05-14 - Experimental support has been added for probing Java methods using Byteman 2.0 as a backend. Java method probes can target method entries, returns, or specific statements in the method as specified by line number. probe java("org.my.MyApp").class("^java.lang.Object").method("foo(int)") { println($$parms) } See java/README for information on how to set up Java/Byteman functionality. Set env STAPBM_VERBOSE=yes for more tracing. - The stap -l output and pn() tapset function's return value may be slightly different for complicated web of wildcarded/aliased probes. - The dyninst backend has improved in several aspects: - Setting custom values for global variables is now supported, both with -G when compiling a script, and from the stapdyn command line when loading a precompiled module. - A high-performance shared-memory-based transport is used for trace data. - A systemd service file and tmpfile have been added to allow systemtap-server to be managed natively by systemd. - Due to the removal of register_timer_hook in recent kernels, the behaviour of timer.profile has been changed slightly. This probe is now an alias which uses the old mechanism where possible, but falls back to perf.sw.cpu_clock or another mechanism when the kernel timer hook is not available. To require the kernel timer hook mechanism in your script, use timer.profile.tick instead of timer.profile. - The following tapset variables are deprecated in release 2.2: - The 'origin' variables in the 'generic.fop.llseek', 'generic.fop.llseek.return', and 'nfs.fop.llseek' probes. The 'origin' variable has been replaced by the 'whence' variable. - The 'page_index' variable in the 'vfs.block_sync_page' and 'vfs.buffer_migrate_page' probe aliases. - The 'write_from' and 'write_upto' variables in the '_vfs.block_prepare_write' and '_vfs.block_prepare_write.return' probe aliases. - The 'regs' variable in the 'syscall.sigaltstack', 'nd_syscall.sigaltstack', 'syscall.fork', and 'nd_syscall.fork' probe aliases. - The 'first', 'second', 'third', and 'uptr_uaddr' variables in the 'syscall.compat_sys_shmat' and 'nd_syscall.compat_sys_shmat' probe aliases. - The following tapset functions are deprecated in release 2.2: 'ppos_pos', '_dev_minor', and '_dev_major' - The folowing tapset functions used to return error strings instead of raising an error. The original behavior is deprecated in release 2.2. 'ctime', 'probemod', 'modname' * What's new in version 2.1, 2013-02-13 - EMACS and VIM editor modes for systemtap source files are included / updated. - The translator now eliminates duplicate tapset files between its preferred directory (as configured during the build with --prefix=/ or specified with the -I /path option), and files it may find under $XDG_DATA_DIRS. This should eliminate a class of conflicts between parallel system- and hand-built systemtap installations. - The translator accepts a --suppress-time-limits option, which defeats time-related constraints, to allows probe handlers to run for indefinite periods. It requires the guru mode (-g) flag to work. Add the earlier --suppress-handler-errors flag for a gung-ho "just-keep-going" attitude. - Perf event probes may now be read on demand. The counter probe is defined using the counter-name part: probe perf.type(0).config(0).counter("NAME"). The counter is read in a user space probe using @perf("NAME"), e.g. process("PROCESS").statement("func@file") {stat <<< @perf("NAME")} - Perf event probes may now be bound to a specific task using the process-name part: probe perf.type(0).config(0).process("NAME") { } If the probed process name is not specified, then it is inferred from the -c CMD argument. - Some error messages and warnings now refer to additional information that is found in man pages. These are generally named error::FOO or warning::BAR (in the 7stap man page section) and may be read via % man error::FOO % man warning::BAR - The dyninst backend has improved in several aspects: - The runtime now allows much more concurrency when probing multithreaded processes, and will also follow probes across forks. - Several new probe types are now supported, including timers, function return, and process.begin/end and process.thread.begin/end. - Semaphores for SDT probes are now set properly. - Attaching to existing processes with -x PID now works. - The foreach looping construct can now sort aggregate arrays by the user's choice of aggregating function. Previously, @count was implied. e.g.: foreach ([x,y] in array @sum +) { println(@sum(array[x,y])) } - Proof of concept support for regular expression matching has been added: if ("aqqqqqb" =~ "q*b") { ... } if ("abc" !~ "q*b") { ... } The eventual aim is to support roughly the same functionality as the POSIX Extended Regular Expressions implemented by glibc. Currently missing features include extraction of the matched string and subexpressions, and named character classes ([:alpha:], [:digit:], &c). Special thanks go to the re2c project, whose public domain code this functionality has been based on. For more info on re2c, see: http://sourceforge.net/projects/re2c/ - The folowing tapset variables are deprecated in release 2.1 and will be removed in release 2.2: - The 'send2queue' variable in the 'signal.send' probe. - The 'oldset_addr' and 'regs' variables in the 'signal.handle' probe. - The following tapset probes are deprecated in release 2.1 and will be removed in release 2.2: - signal.send.return - signal.handle.return * What's new in version 2.0, 2012-10-09 - Systemtap includes a new prototype backend, which uses Dyninst to instrument a user's own processes at runtime. This backend does not use kernel modules, and does not require root privileges, but is restricted with respect to the kinds of probes and other constructs that a script may use. Users from source should configure --with-dyninst and install a fresh dyninst snapshot such as that in Fedora rawhide. It may be necessary to disable conflicting selinux checks; systemtap will advise. Select this new backend with the new stap option --runtime=dyninst and a -c target process, along with normal options. (-x target processes are not supported in this prototype version.) For example: stap --runtime=dyninst -c 'stap -l begin' \ -e 'probe process.function("main") { println("hi from dyninst!") }' - To aid diagnosis, when a kernel panic occurs systemtap now uses the panic_notifier_list facility to dump a summary of its trace buffers to the serial console. - The systemtap preprocessor now has a simple macro facility as follows: @define add(a,b) %( ((@a)+(@b)) %) @define probegin(x) %( probe begin { @x } %) @probegin( foo = @add(40, 2); print(foo) ) Macros defined in the user script and regular tapset .stp files are local to the file. To get around this, the tapset library can define globally visible 'library macros' inside .stpm files. (A .stpm file must contain a series of @define directives and nothing else.) The status of the feature is experimental; semantics of macroexpansion may change (unlikely) or expand in the future. - Systemtap probe aliases may be used with additional suffixes attached. The suffixes are passed on to the underlying probe point(s) as shown below: probe foo = bar, baz { } probe foo.subfoo.option("gronk") { } // expands to: bar.subfoo.option("gronk"), baz.subfoo.option("gronk") In practical terms, this allows us to specify additional options to certain tapset probe aliases, by writing e.g. probe syscall.open.return.maxactive(5) { ... } - To support the possibility of separate kernel and dyninst backends, the tapsets have been reorganized into separate folders according to backend. Thus kernel-specific tapsets are located under linux/, the dyninst-specific ones under dyninst/ - The backtrace/unwind tapsets have been expanded to allow random access to individual elements of the backtrace. (A caching mechanism ensures that the backtrace computation run at most once for each time a probe fires, regardless of how many times or what order the query functions are called in.) New tapset functions are: stack/ustack - return n'th element of backtrace callers/ucallers - return first n elements of backtrace print_syms/print_usyms - print full information on a list of symbols sprint_syms/sprint_usyms - as above, but return info as a string The following existing functions have been superseded by print_syms() et al.; new scripts are recommended to avoid using them: print_stack() print_ustack() sprint_stack() sprint_ustack() - The probefunc() tapset function is now myproc-unprivileged, and can now be used in unprivileged scripts for such things as profiling in userspace programs. For instance, try running systemtap.examples/general/para-callgraph.stp in unprivileged mode with a stapusr-permitted probe. The previous implementation of probefunc() is available with "stap --compatible=1.8". - Preprocessor conditional to vary code based on script privilege level: unprivileged -- %( systemtap_privilege == "stapusr" %? ... %) privileged -- %( systemtap_privilege != "stapusr" %? ... %) or, alternately %( systemtap_privilege == "stapsys" || systemtap_privilege == "stapdev" %? ... %) - To ease migration to the embedded-C locals syntax introduced in 1.8 (namely, STAP_ARG_* and STAP_RETVALUE), the old syntax can now be re-enabled on a per-function basis using the /* unmangled */ pragma: function add_foo:long(a:long, b:long) %{ /* unmangled */ THIS->__retvalue = THIS->a + STAP_ARG_b; %} Note that both the old and the new syntax may be used in an /* unmangled */ function. Functions not marked /* unmangled */ can only use the new syntax. - Adjacent string literals are now glued together irrespective of intervening whitespace or comments: "foo " "bar" --> "foo bar" "foo " /* comment */ "bar" --> "foo bar" Previously, the first pair of literals would be glued correctly, while the second would cause a syntax error. * What's new in version 1.8, 2012-06-17 - staprun accepts a -T timeout option to allow less frequent wake-ups to poll for low-throughput output from scripts. - When invoked by systemtap, the kbuild $PATH environment is sanitized (prefixed with /usr/bin:/bin:) in an attempt to exclude compilers other than the one the kernel was presumed built with. - Printf formats can now use "%#c" to escape non-printing characters. - Pretty-printed bitfields use integers and chars use escaped formatting for printing. - The systemtap compile-server and client now support IPv6 networks. - IPv6 addresses may now be specified on the --use-server option and will be displayed by --list-servers, if the avahi-daemon service is running and has IPv6 enabled. - Automatic server selection will automatically choose IPv4 or IPv6 servers according to the normal server selection criteria when avahi-daemon is running. One is not preferred over the other. - The compile-server will automatically listen on IPv6 addresses, if available. - To enable IPv6 in avahi-daemon, ensure that /etc/avahi/avahi-daemon.conf contains an active "use-ipv6=yes" line. After adding this line run "service avahi-daemon restart" to activate IPv6 support. - See man stap(1) for details on how to use IPv6 addresses with the --use-server option. - Support for DWARF4 .debug_types sections (for executables and shared libraries compiled with recent GCC's -gdwarf-4 / -fdebug-types-section). PR12997. SystemTap now requires elfutils 0.148+, full .debug_types support depends on elfutils 0.154+. - Systemtap modules are somewhat smaller & faster to compile. Their debuginfo is now suppressed by default; use -B CONFIG_DEBUG_INFO=y to re-enable. - @var now an alternative language syntax for accessing DWARF variables in uprobe and kprobe handlers (process, kernel, module). @var("somevar") can be used where $somevar can be used. The @var syntax also makes it possible to access non-local, global compile unit (CU) variables by specifying the CU source file as follows @var("somevar@some/src/file.c"). This will provide the target variable value of global "somevar" as defined in the source file "some/src/file.c". The @var syntax combines with all normal features of DWARF target variables like @defined(), @entry(), [N] array indexing, field access through ->, taking the address with the & prefix and shallow or deep pretty printing with a $ or $$ suffix. - Stap now has resource limit options: --rlimit-as=NUM --rlimit-cpu=NUM --rlimit-nproc=NUM --rlimit-stack=NUM --rlimit-fsize=NUM All resource limiting has been moved from the compile server to stap itself. When running the server as "stap-server", default resource limit values are specified in ~stap-server/.systemtap/rc. - Bug CVE-2012-0875 (kernel panic when processing malformed DWARF unwind data) is fixed. - The systemtap compile-server now supports multiple concurrent connections. Specify the desired maximum number of concurrent connections with the new stap-server/stap-serverd --max-threads option. Specify a value of '0' to tell the server not to spawn any new threads (handle all connections serially in the main thread). The default value is the number of processor cores on the host. - The following tapset functions are deprecated in release 1.8 and will be removed in release 1.9: daddr_to_string() - SystemTap now mangles local variables to avoid collisions with C headers included by tapsets. This required a change in how embedded-C functions access local parameters and the return value slot. Instead of THIS->foo in an embedded-C function, please use the newly defined macro STAP_ARG_foo (substitute the actual name of the argument for 'foo'); instead of THIS->__retvalue, use the newly defined STAP_RETVALUE. All of the tapsets and test cases have been adapted to use this new notation. If you need to run code which uses the old THIS-> notation, run stap with the --compatible=1.7 option. - There is updated support for user-space probing against kernels >= 3.5, which have no utrace but do have the newer inode-uprobes work by Srikar Dronamraju and colleagues. For kernels < 3.5, the following 3 sets of kernel patches would need to be backported to your kernel to use this preliminary user-space probing support: - inode-uprobes patches: - 2b144498350860b6ee9dc57ff27a93ad488de5dc - 7b2d81d48a2d8e37efb6ce7b4d5ef58822b30d89 - a5f4374a9610fd7286c2164d4e680436727eff71 - 04a3d984d32e47983770d314cdb4e4d8f38fccb7 - 96379f60075c75b261328aa7830ef8aa158247ac - 3ff54efdfaace9e9b2b7c1959a865be6b91de96c - 35aa621b5ab9d08767f7bc8d209b696df281d715 - 900771a483ef28915a48066d7895d8252315607a - e3343e6a2819ff5d0dfc4bb5c9fb7f9a4d04da73 - exec tracepoint kernel patch: - 4ff16c25e2cc48cbe6956e356c38a25ac063a64d - task_work_add kernel patches: - e73f8959af0439d114847eab5a8a5ce48f1217c4 - 4d1d61a6b203d957777d73fcebf19d90b038b5b2 - 413cd3d9abeaef590e5ce00564f7a443165db238 - dea649b8ac1861107c5d91e1a71121434fc64193 - f23ca335462e3c84f13270b9e65f83936068ec2c * What's new in version 1.7, 2012-02-01 - Map inserting and deleting is now significantly faster due to improved hashing and larger hash tables. The hashes are also now randomized to provide better protection against deliberate collision attacks. - Formatted printing is faster by compiling the formatting directives to C code rather than interpreting at run time. - Systemtap loads extra command line options from $SYSTEMTAP_DIR/rc ($HOME/.systemtap/rc by default) before the normal argc/argv. This may be useful to activate site options such as --use-server or --download-debuginfo or --modinfo. - The stap-server has seen many improvements, and is no longer considered experimental. - The stap-server service (initscript) now supports four new options: -D MACRO[=VALUE] --log LOGFILE --port PORT-NUMBER --SSL CERT-DATABASE These allow the specification of macro definitions to be passed to stap by the server, the location of the log file, network port number and NSS certificate database location respectively. These options are also supported within individual server configuration files. See stap-server and initscript/README.stap-server for details. The stap-server is no longer activated by default. - process("PATH").[library("PATH")].function("NAME").exported probes are now supported to filter function() to only exported instances. - The translator supports a new --suppress-handler-errors option, which causes most runtime errors to be turned into quiet skipped probes. This also disables the MAXERRORS and MAXSKIPPED limits. - Translator warnings have been standardized and controlled by the -w / -W flags. - The translator supports a new --modinfo NAME=VALUE option to emit additional MODULE_INFO(n,v) macros into the generated code. - There is no more fixed maximum number of VMA pages that will be tracked at runtime. This reduces memory use for those scripts that don't need any, or only limited target process VMA tracking and allows easier system wide probes inspecting shared library variables and/or user backtraces. stap will now silently ignore -DTASK_FINDER_VMA_ENTRY_ITEMS. - The tapset functions remote_id() and remote_uri() identify the member of a swarm of "stap --remote FOO --remote BAR baz.stp" concurrent executions. - Systemtap now supports a new privilege level and group, "stapsys", which is equivalent to the privilege afforded by membership in the group "stapdev", except that guru mode (-g) functionality may not be used. To support this, a new option, --privilege=[stapusr|stapsys|stapdev] has been added. --privilege=stapusr is equivalent to specifying the existing --unprivileged option. --privilege=stapdev is the default. See man stap(1) for details. - Scripts that use kernel.trace("...") probes compile much faster. - The systemtap module cache is cleaned less frequently, governed by the number of seconds in the $SYSTEMTAP_DIR/cache/cache_clean_interval_s file. - SDT can now define up to 12 arguments in a probe point. - Parse errors no longer generate a cascade of false errors. Instead, a parse error skips the rest of the current probe or function, and resumes at the next one. This should generate fewer and better messages. - Global array wrapping is now supported for both associative and statistics typed arrays using the '%' character to signify a wrapped array. For example, 'global foo%[100]' would allow the array 'foo' to be wrapped if more than 100 elements are inserted. - process("PATH").library("PATH").plt("NAME") probes are now supported. Wildcards are supported in the plt-name part, to refer to any function in the program linkage table which matches the glob pattern and the rest of the probe point. - A new option, --dump-probe-types, will dump a list of supported probe types. If --unprivileged is also specified, the list will be limited to probe types which are available to unprivileged users. - Systemtap can now automatically download the required debuginfo using abrt. The --download-debuginfo[=OPTION] can be used to control this feature. Possible values are: 'yes', 'no', 'ask', and a positive number representing the timeout desired. The default behavior is to not automatically download the debuginfo. - The translator has better support for probing C++ applications by better undertanding of compilation units, nested types, templates, as used in probe point and @cast constructs. - On 2.6.29+ kernels, systemtap can now probe kernel modules that arrive and/or depart during the run-time of a session. This allows probing of device driver initialization functions, which had formerly been blocklisted. - New tapset functions for cpu_clock and local_clock access were added. - There is some limited preliminary support for user-space probing against kernels such as linux-next, which have no utrace but do have the newer inode-uprobes work by Srikar Dronamraju and colleagues. - The following probe types are deprecated in release 1.7 and will be removed in release 1.8: kernel.function(number).inline module(string).function(number).inline process.function(number).inline process.library(string).function(number).inline process(string).function(number).inline process(string).library(string).function(number).inline - The systemtap-grapher is deprecated in release 1.7 and will be removed in release 1.8. - The task_backtrace() tapset function was deprecated in 1.6 and has been removed in 1.7. - MAXBACKTRACE did work in earlier releases, but has now been documented in the stap 1 manual page. - New tapset function probe_type(). Returns a short string describing the low level probe handler type for the current probe point. - Both unwind and symbol data is now only collected and emitted for scripts actually using backtracing or function/data symbols. Tapset functions are marked with /* pragma:symbols */ or /* pragma:unwind */ to indicate they need the specific data. - Kernel backtraces can now be generated for non-pt_regs probe context if the kernel support dump_trace(). This enables backtraces from certain timer probes and tracepoints. - ubacktrace() should now also work for some kernel probes on x86 which can use the dwarf unwinder to recover the user registers to provide more accurate user backtraces. - For s390x the systemtap runtime now properly splits kernel and user addresses (which are in separate address spaces on that architecture) which enable user space introspection. - ppc and s390x now supports user backtraces through the DWARF unwinder. - ppc now handles function descriptors as symbol names correctly. - arm support kernel backtraces through the DWARF unwinder. - arm now have a uprobes port which enables user probes. This still requires some kernel patches (user_regsets and tracehook support for arm). - Starting in release 1.7, these old variables will be deprecated: - The 'pid' variable in the 'kprocess.release' probe has been deprecated in favor of the new 'released_pid' variable. - The 'args' variable in the '_sunrpc.clnt.create_client.rpc_new_client_inline' probe has been deprecated in favor of the new internal-only '__args' variable. - Experimental support for recent kernels without utrace has been added for the following probe types: process(PID).begin process("PATH").begin process.begin process(PID).thread.begin process("PATH").thread.begin process.thread.begin process(PID).end process("PATH").end process.end process(PID).thread.end process("PATH").thread.end process.thread.end process(PID).syscall process("PATH").syscall process.syscall process(PID).syscall.return process("PATH").syscall.return process.syscall.return - staprun disables kprobe-optimizations in recent kernels, as problems were found. (PR13193) * What's new in version 1.6, 2011-07-25 - Security fixes for CVE-2011-2503: read instead of mmap to load modules, CVE-2011-2502: Don't allow path-based auth for uprobes - The systemtap compile-server no longer uses the -k option when calling the translator (stap). As a result, the server will now take advantage of the module cache when compiling the same script more than once. You may observe an improvement in the performance of the server in this situation. - The systemtap compile-server and client now each check the version of the other, allowing both to adapt when communicating with a down-level counterpart. As a result, all version of the client can communicate with all versions of the server and vice-versa. Client will prefer newer servers when selecting a server automatically. - SystemTap has improved support for the ARM architecture. The kread() and kwrite() operations for ARM were corrected allowing many of the tapsets probes and function to work properly on the ARM architecture. - Staprun can now rename the module to a unique name with the '-R' option before inserting it. Systemtap itself will also call staprun with '-R' by default. This allows the same module to be inserted more than once, without conflicting duplicate names. - Systemtap error messages now provide feedback when staprun or any other process fails to launch. This also specifically covers when the user doesn't have the proper permissions to launch staprun. - Systemtap will now map - to _ in module names. Previously, stap -L 'module("i2c-core").function("*")' would be empty. It now returns a list had stap -L 'module("i2c_core").function("*") been specified. - Systemtap now fills in missing process names to probe points, to avoid having to name them twice twice: % stap -e 'probe process("a.out").function("*") {}' -c 'a.out ...' Now the probed process name is inferred from the -c CMD argument. % stap -e 'probe process.function("*") {}' -c 'a.out ...' - stap -L 'process("PATH").syscall' will now list context variables - Depends on elfutils 0.142+. - Deprecated task_backtrace:string (task:long). This function will go away after 1.6. Please run your scripts with stap --check-version. * What's new in version 1.5, 2011-05-23 - Security fixes for CVE-2011-1781, CVE-2011-1769: correct DW_OP_{mod,div} division-by-zero bug - The compile server and its related tools (stap-gen-ert, stap-authorize-cert, stap-sign-module) have been re-implemented in C++. Previously, these components were a mix of bash scripts and C code. These changes should be transparent to the end user with the exception of NSS certificate database password prompting (see below). The old implementation would prompt more than once for the same password in some situations. - eventcount.stp now allows for event counting in the format of 'stap eventcount.stp process.end syscall.* ...', and also reports corresponding event tid's. - Systemtap checks that the build-id of the module being probed matches the build-id saved in the systemtap module. Invoking systemtap with -DSTP_NO_BUILDID_CHECK will bypass this build-id runtime verification. See man ld(1) for info on --build-id. - stapio will now report if a child process has an abnormal exit along with the associated status or signal. - Compiler optimization may sometimes result in systemtap not being able to access a user-space probe argument. Compiling the application with -DSTAP_SDT_ARG_CONSTRAINT=nr will force the argument to be an immediate or register value which should enable systemtap to access the argument. - GNU Gettext has now been intergrated with systemtap. Our translation page can be found at http://www.transifex.net/projects/p/systemtap/ . "make update-po" will generate the necessary files to use translated messages. Please refer to the po/README file for more info and please consider contributing to this I18N effort! - The new addr() function returns the probe's instruction pointer. - process("...").library("...") probes are now supported. Wildcards are supported in the library-name part, to refer to any shared library that is required by process-name, which matches the glob pattern and the rest of the probe point. - The "--remote USER@HOST" functionality can now be specified multiple times to fan out on multiple targets. If the targets have distinct kernel and architecture configurations, stap will automatically build the script appropriately for each one. This option is also no longer considered experimental. - The NSS certificate database generated for use by the compile server is now generated with no password. Previously, a random password was generated and used to access the database. This change should be transparent to most users. However, if you are prompted for a password when using systemtap, then running $libexecdir/stap-gen-cert should correct the problem. - The timestamp tapset includes jiffies() and HZ() for lightweight approximate timekeeping. - A powerful new command line option --version has been added. - process.mark now supports $$parms for reading probe parameters. - A new command line option, --use-server-on-error[=yes|no] is available for stap. It instructs stap to retry compilation of a script using a compile server if it fails on the local host. The default setting is 'no'. - The following deprecated tools have been removed: stap-client stap-authorize-server-cert stap-authorize-signing-cert stap-find-or-start-server stap-find-servers Use the --use-server, --trust-server and --list-servers options of stap instead. * What's new in version 1.4, 2011-01-17 - Security fixes for CVE-2010-4170, CVE-2010-4171: staprun module loading/unloading - A new /* myproc-unprivileged */ marker is now available for embedded C code and and expressions. Like the /* unprivileged */ marker, it makes the code or expression available for use in unprivileged mode (see --unprivileged). However, it also automatically adds a call to assert_is_myproc() to the code or expression, thus, making it available to the unprivileged user only if the target of the current probe is within the user's own process. - The experimental "--remote USER@HOST" option will run pass 5 on a given ssh host, after building locally (or with --use-server) for that target. - Warning messages from the script may now be suppressed with the stap and/or staprun -w option. By default, duplicate warning messages are suppressed (up to a certain limit). With stap --vp 00002 and above, the duplicate elimination is defeated. - The print_ubacktrace and usym* functions attempt to print the full path of the user-space binaries' paths, instead of just the basename. The maximum saved path length is set by -DTASK_FINDER_VMA_ENTRY_PATHLEN, default 64. Warning messages are produced if unwinding fails due to a missing 'stap -d MODULE' option, providing preloaded unwind data. - The new tz_ctime() tapset function prints times in the local time zone. - More kernel tracepoints are accessible to the kernel.trace("...") mechanism, if kernel source trees or debuginfo are available. These formerly "hidden" tracepoints are those that are declared somewhere other than the usual include/linux/trace/ headers, such as xfs and kvm. - debuginfo-based process("...").function/.statement/.mark probes support wildcards in the process-name part, to refer to any executable files that match the glob pattern and the rest of the probe point. - The -t option now displays information per probe-point rather than a summary for each probe. It also now shows the derivation chain for each probe-point. - A rewrite of the sys/sdt.h header file provides zero-cost startup (few or no ELF relocations) for the debuginfo-less near-zero-cost runtime probes. Binaries compiled with earlier sdt.h versions remain supported. The stap -L (listing) option now lists parameters for sys/sdt.h markers. - The implementation of the integrated compile-server client has been extended. o --use-server now accepts an argument representing a particular server and may be specified more than once. o --list-servers now accepts an expanded range of arguments. o a new --trust-servers option has been added to stap to replace several old certificate-management scripts. o The following tools are now deprecated and will be removed in release 1.5: stap-client stap-authorize-server-cert stap-authorize-signing-cert stap-find-or-start-server stap-find-servers See man stap(1) for complete details. - The compile-server now returns the uprobes.ko to the client when it is required by the script being compiled. The integrated compile-server client now makes it available to be loaded by staprun. The old (deprecated) stap-client does not do this. - process probes with scripts as the target are recognized by stap and the interpreter would be selected for probing. - Starting in release 1.5, these old variables/functions will be deprecated and will only be available when the '--compatible=1.4' flag is used: - In the 'syscall.add_key' probe, the 'description_auddr' variable has been deprecated in favor of the new 'description_uaddr' variable. - In the 'syscall.fgetxattr', 'syscall.fsetxattr', 'syscall.getxattr', 'syscall.lgetxattr', and 'syscall.lremovexattr' probes, the 'name2' variable has been deprecated in favor of the new 'name_str' variable. - In the 'nd_syscall.accept' probe the 'flag_str' variable has been deprecated in favor of the new 'flags_str' variable. - In the 'nd_syscall.dup' probe the 'old_fd' variable has been deprecated in favor of the new 'oldfd' variable. - In the 'nd_syscall.fgetxattr', 'nd_syscall.fremovexattr', 'nd_syscall.fsetxattr', 'nd_syscall.getxattr', and 'nd_syscall.lremovexattr' probes, the 'name2' variable has been deprecated in favor of the new 'name_str' variable. - The tapset alias 'nd_syscall.compat_pselect7a' was misnamed. It should have been 'nd_syscall.compat_pselect7' (without the trailing 'a'). - The tapset function 'cpuid' is deprecated in favor of the better known 'cpu'. - In the i386 'syscall.sigaltstack' probe, the 'ussp' variable has been deprecated in favor of the new 'uss_uaddr' variable. - In the ia64 'syscall.sigaltstack' probe, the 'ss_uaddr' and 'oss_uaddr' variables have been deprecated in favor of the new 'uss_uaddr' and 'uoss_uaddr' variables. - The powerpc tapset alias 'syscall.compat_sysctl' was deprecated and renamed 'syscall.sysctl32'. - In the x86_64 'syscall.sigaltstack' probe, the 'regs_uaddr' variable has been deprecated in favor of the new 'regs' variable. * What's new in version 1.3, 2010-07-21 - The uprobes kernel module now has about half the overhead when probing NOPs, which is particularly relevant for sdt.h markers. - New stap option -G VAR=VALUE allows overriding global variables by passing the settings to staprun as module options. - The tapset alias 'syscall.compat_pselect7a' was misnamed. It should have been 'syscall.compat_pselect7' (without the trailing 'a'). Starting in release 1.4, the old name will be deprecated and will only be available when the '--compatible=1.3' flag is used. - A new procfs parameter .umask(UMASK) which provides modification of file permissions using the proper umask value. Default file permissions for a read probe are 0400, 0200 for a write probe, and 0600 for a file with a read and write probe. - It is now possible in some situations to use print_ubacktrace() to get a user space stack trace from a kernel probe point. e.g. for user backtraces when there is a pagefault: $ stap -d /bin/sort --ldd -e 'probe vm.pagefault { if (pid() == target()) { printf("pagefault @0x%x\n", address); print_ubacktrace(); } }' -c /bin/sort [...] pagefault @0x7fea0595fa70 0x000000384f07f958 : __GI_strcmp+0x12b8/0x1440 [libc-2.12.so] 0x000000384f02824e : __gconv_lookup_cache+0xee/0x5a0 [libc-2.12.so] 0x000000384f021092 : __gconv_find_transform+0x92/0x2cf [libc-2.12.so] 0x000000384f094896 : __wcsmbs_load_conv+0x106/0x2b0 [libc-2.12.so] 0x000000384f08bd90 : mbrtowc+0x1b0/0x1c0 [libc-2.12.so] 0x0000000000404199 : ismbblank+0x39/0x90 [sort] 0x0000000000404a4f : inittables_mb+0xef/0x290 [sort] 0x0000000000406934 : main+0x174/0x2510 [sort] 0x000000384f01ec5d : __libc_start_main+0xfd/0x1d0 [libc-2.12.so] 0x0000000000402509 : _start+0x29/0x2c [sort] [...] - New tapset functions to get a string representation of a stack trace: sprint_[u]backtrace() and sprint_[u]stack(). - New tapset function to get the module (shared library) name for a user space address umodname:string(long). The module name will now also be in the output of usymdata() and in backtrace addresses even when they were not given with -d at the command line. - Kernel backtraces are now much faster (replaced a linear search with a binary search). - A new integrated compile-server client is now available as part of stap. o 'stap --use-server ...' is equivalent to 'stap-client ...' o 'stap --list-servers' is equivalent to 'stap-find-servers' o 'stap --list-servers=online' is equivalent to 'stap-find-servers --all' o stap-client and its related tools will soon be deprecated. o the nss-devel and avahi-devel packages are required for building stap with the integrated client (checked during configuration). o nss and avahi are required to run the integrated client. - A new operator @entry is available for automatically saving an expression at entry time for use in a .return probe. probe foo.return { println(get_cycles() - @entry(get_cycles())) } - Probe $target variables and @cast() can now use a suffix to print complex data types as strings. Use a single '$' for a shallow view, or '$$' for a deeper view that includes nested types. For example, with fs_struct: $fs$ : "{.users=%i, .lock={...}, .umask=%i, .in_exec=%i, .root={...}, .pwd={...}}" $fs$$ : "{.users=%i, .lock={.raw_lock={.lock=%u}}, .umask=%i, .in_exec=%i, .root={.mnt=%p, .dentry=%p}, .pwd={.mnt=%p, .dentry=%p}}" - The user-space markers no longer default to an implicit MARKER_NAME_ENABLED() semaphore check for each marker. To check for enabled markers use a .d declaration file, then: if (MARKER_NAME_ENABLED()) MARKER_NAME() - Hyphenated marker names such as process(...).mark("foo-bar") are now accepted in scripts. They are mapped to the double-underscore form ("foo__bar"). - More robust user-space markers support is included. For some platforms (x86*, ppc*), this can let systemtap probe the markers without debuginfo. This implementation also supports preserving the "provider" name associated with a marker: probe process("foo").provider("bar").mark("baz") to match STAP_PROBE(bar, baz <...>) (Compile with -DSTAP_SDT_V1 to revert to the previous implementation. Systemtap supports pre-existing or new binaries using them.) - Embedded-C may be used within expressions as values, when in guru mode: num = %{ LINUX_VERSION_CODE %} // int64_t name = %{ /* string */ THIS_MODULE->name %} // const char* printf ("%s %x\n", name, num) The usual /* pure */, /* unprivileged */, and /* guru */ markers may be used as with embedded-C functions. - By default the systemtap-runtime RPM builds now include a shared library, staplog.so, that allows crash to extract systemtap data from a vmcore image. - Iterating with "foreach" can now explicitly save the value for the loop. foreach(v = [i,j] in array) printf("array[%d,%s] = %d\n", i, j, v /* array[i,j] */) - The new "--ldd" option automatically adds any additional shared libraries needed by probed or -d-listed userspace binaries to the -d list, to enable symbolic backtracing through them. Similarly, the new "--all-modules" option automatically adds any currently loaded kernel modules (listed in /proc/modules) to the -d list. - A new family of set_kernel_* functions make it easier for gurus to write new values at arbitrary memory addresses. - Probe wildcards can now use '**' to cross the '.' separator. $ stap -l 'sys**open' syscall.mq_open syscall.open - Backward compatibility flags (--compatible=VERSION, and matching script preprocessing predicate %( systemtap_v CMP "version" %) and a deprecation policy are being introduced, in case future tapset/language changes break valid scripts. * What's new in version 1.2, 2010-03-22 - Prototype support for "perf events", where the kernel supports the 2.6.33 in-kernel API. Probe points may refer to low-level perf_event_attr type/config numbers, or to a number of aliases defined in the new perf.stp tapset: probe perf.sw.cpu_clock, perf.type(0).config(4) { } - Type-casting can now use multiple headers to resolve codependencies. @cast(task, "task_struct", "kernel")->fs->umask - Tapset-related man pages have been renamed. 'man -k 3stap' should show the installed list, which due to prefixing should no longer collide over ordinary system functions. - User space marker arguments no longer use volatile if the version of gcc, which must be at least 4.5.0, supports richer DWARF debuginfo. Use cflags -DSTAP_SDT_VOLATILE=volatile or -DSTAP_SDT_VOLATILE= when building the sys/sdt.h application to override this one way or another. - A new construct for error handling is available. It is similar to c++ exception catching, using try and catch as new keywords. Within a handler or function, the following is valid and may be nested: try { /* arbitrary statements */ } catch (er) { /* e.g. println("caught error ", er) */ } - A new command line flag '-W' forces systemtap to abort translation of a script if any warnings are produced. It is similar to gcc's -Werror. (If '-w' is also supplied to suppress warnings, it wins.) - A new predicate @defined is available for testing whether a particular $variable/expression is resolvable at translate time: probe foo { if (@defined($bar)) log ("$bar is available here") } - Adjacent string literals are glued together, making this construct valid: probe process("/usr" @1 "/bin").function("*") { ... } - In order to limit potential impact from future security problems, the stap-server process does not permit its being launched as root. - On recent kernels, for some architectures/configurations, hardware breakpoint probes are supported. The probe point syntax is: probe kernel.data(ADDRESS).write probe kernel.data(ADDRESS).length(LEN).write probe kernel.data("SYMBOL_NAME").write * What's new in version 1.1, 2010-01-15 - New tracepoint based tapset for memory subsystem. - The loading of signed modules by staprun is no longer allowed for ordinary, unprivileged users. This means that only root, members of the group 'stapdev' and members of the group 'stapusr' can load systemtap modules using staprun, stap or stap-client. The minimum privilege required to run arbitrary --unprivileged scripts is now 'stapusr' membership. - The stap-server initscript is available. This initscript allows you to start systemtap compile servers as a system service and to manage these servers as a group or individually. The stap-server initscript is installed by the systemtap-server rpm. The build directory for the uprobes module (/usr/share/systemtap/runtime/uprobes) is made writable by the 'stap-server' group. All of the files generated when building the uprobes module, including the digital signature, are also writable by members of stap-server. See initscript/README.stap-server for details. - Some of the compile server client, server and certificate management tools have been moved from $bindir to $libexecdir/systemtap. You should use the new stap-server script or the stap-server initscript for server management where possible. The stap-server script provides the same functionality as the stap-server initscript except that the servers are run by the invoking user by default as opposed to servers started by the stap-server initscript which are run by the user stap-server by default. See stap-server(8) for more information. You may continue to use these tools by adding $libexecdir/systemtap to your path. You would need to do this, for example, if you are not root, you want to start a compile server and you are not running systemtap from a private installation. In this case you still need to use stap-start-server. - Any diagnostic output line that starts with "ERROR", as in error("foo"), will promote a "Pass 5: run failed", and the return code is 1. - Systemtap now warns about global variables being referenced from other script files. This aims to protect against unintended local-vs-global namespace collisions such as: % cat some_tapset.stp probe baz.one = bar { foo = $foo; bar = $bar } % cat end_user_script.stp global foo # intended to be private variable probe timer.s(1) { foo ++ } probe baz.* { println(foo, pp()) } % stap end_user_script.stp WARNING: cross-file global variable reference to foo from some_tapset.stp - Preprocessor conditional for kernel configuration testing: %( CONFIG_foo == "y" %? ... %) - ftrace(msg:string) tapset function to send strings to the system-wide ftrace ring-buffer (if any). - Better support for richer DWARF debuginfo output from GCC 4.5 (variable tracking assignments). Kernel modules are now always resolved against all their dependencies to find any info referring to missing symbols. DW_AT_const_value is now supported when no DW_AT_location is available. * What's new in verson 1.0, 2009-09-22 - process().mark() probes now use an enabling semaphore to reduce the computation overhead of dormant probes. - The function spec for dwarf probes now supports C++ scopes, so you can limit the probes to specific namespaces or classes. Multiple scopes can be specified, and they will be matched progressively outward. probe process("foo").function("std::vector<*>::*") { } probe process("foo").function("::global_function") { } - It is now possible to cross-compile systemtap scripts for foreign architectures, using the new '-a ARCH' and '-B OPT=VALUE' flags. For example, put arm-linux-gcc etc. into your $PATH, and point systemtap at the target kernel build tree with: stap -a arm -B CROSS_COMPILE=arm-linux- -r /build/tree [...] The -B option is passed to kbuild make. -r identifies the already configured/built kernel tree and -a its architecture (kbuild ARCH=...). Systemtap will infer -p4. - Cross compilation using the systemtap client and server - stap-start-server now accepts the -r, -R, -I, -B and -a options in order to start a cross compiling server. The server will correctly advertise itself with respect to the kernel release and architecture that it compiles for. - When specified on stap-client, the -r and -a options will be considered when searching for a suitable server. - When using the systemtap client and server udp port 5353 must be open in your firewall in order for the client to find servers using avahi-browse. Also the systemtap server will choose a random port in the range 1024-63999 for accepting ssl connections. - Support for unprivileged users: *********************************************************************** * WARNING!!!!!!!!!! * * This feature is EXPERIMENTAL at this time and should be used with * * care. This feature allows systemtap kernel modules to be loaded by * * unprivileged users. The user interface and restrictions will change * * as this feature evolves. * *********************************************************************** - Systemtap modules generated from scripts which use a restricted subset of the features available may be loaded by staprun for unprivileged users. Previously, staprun would load modules only for root or for members of the groups stapdev and stapusr. - Using the --unprivileged option on stap enables translation-time checking for use by unprivileged users (see restrictions below). - All modules deemed suitable for use by unprivileged users will be signed by the systemtap server when --unprivileged is specified on stap-client. See module signing in release 0.9.8 and stap-server in release 0.9 below. - Modules signed by trusted signers (servers) and verified by staprun will be loaded by staprun regardless of the user's privilege level. - The system administrator asserts the trustworthiness of a signer (server) by running stap-authorize-signing-cert as root, where the can be found in ~/.systemtap/ssl/server/stap.cert for servers started by ordinary users and in $sysconfdir/systemtap/ssl/server/stap.cert for servers started by root. - Restrictions are intentionally strict at this time and may be relaxed in the future: - probe points are restricted to: begin, begin(n), end, end(n), error, error(n), never, timer.{jiffies,s,sec,ms,msec,us,usec,ns,nsec}(n)*, timer.hz(n), process.* (for processes owned by the user). - use of embedded C code is not allowed. - use of tapset functions is restricted. - some tapset functions may not be used at all. A message will be generated at module compilation time. - some actions by allowed tapset functions may only be performed in the context of the user's own process. A runtime fault will occur in these situations, for example, direct memory access. - The is_myproc() tapset function has been provided so that tapset writers for unprivileged users can check that the context is of the users own process before attempting these actions. - accessing the kernel memory space is not allowed. - The following command line options may not be used by stap-client -g, -I, -D, -R, -B - The following environment variables are ignored by stap-client: SYSTEMTAP_RUNTIME, SYSTEMTAP_TAPSET, SYSTEMTAP_DEBUGINFO_PATH - nss and nss-tools are required to use this feature. - Support output file switching by SIGUSR2. Users can command running stapio to switch output file by sending SIGUSR2. - Memory consumption for scripts involving many uprobes has been dramatically reduced. - The preprocessor now supports || and && in the conditions. e.g. %( arch == "x86_64" || arch == "ia64" %: ... %) - The systemtap notion of "architecture" now matches the kernel's, rather than that of "uname -m". This means that 32-bit i386 family are all known as "i386" rather than "i386" or "i686"; "ppc64" as "powerpc"; "s390x" as "s390", and so on. This is consistent between the new "-a ARCH" flag and the script-level %( arch ... %) conditional. - It is now possible to define multiple probe aliases with the same name. A probe will expand to all matching aliases. probe foo = bar { } probe foo = baz { } probe foo { } # expands twice, once to bar and once to baz - A new experimental transport mechanism, using ftrace's ring_buffer, has been added. This may become the default transport mechanism in future versions of systemtap. To test this new transport mechanism, define 'STP_USE_RING_BUFFER'. - Support for recognizing DW_OP_{stack,implicit}_value DWARF expressions as emitted by GCC 4.5. * What's new in version 0.9.9, 2009-08-04 - Systemwide kernel .function.return (kretprobe) maxactive defaults may be overridden with the -DKRETACTIVE=nnn parameter. - Translation pass 2 is significantly faster by avoiding unnecessary searching through a kernel build/module directory tree. - When compiled against elfutils 0.142 systemtap now handles the new DW_OP_call_frame_CFA generated by by GCC. - uprobes and ustack() are more robust when used on applications that depend on prelinked/separate debuginfo shared libraries. - User space PROBE marks are not always found with or without separate debuginfo. The .probes section itself is now always put in the main elf file and marked as allocated. When building pic code the section is marked writable. The selinux memory check problems seen with programs using STAP_PROBES is fixed. - statement() probes can now override "address not at start of statement" errors in guru mode. They also provide alternative addresses to use in non-guru mode. - The stapgraph application can generate graphs of data and events emitted by systemtap scripts in real time. Run "stapgraph testsuite/systemtap.examples/general/grapher.stp" for an example of graphing the system load average and keyboard events. - Dwarf probes now show parameters and local variables in the verbose listing mode (-L). - Symbol aliases are now resolved to their canonical dwarf names. For example, probing "malloc" in libc resolves to "__libc_malloc". - The syntax for dereferencing $target variables and @cast() gained new capabilities: - Array indexes can now be arbitrary numeric expressions. - Array subscripts are now supported on pointer types. - An '&' operator before a @cast or $target returns the address of the final component, especially useful for nested structures. - For reading all probe variables, kernel.mark now supports $$vars and $$parms, and process.syscall now supports $$vars. - The SNMP tapset provides probes and functions for many network statistics. See stapprobes.snmp(3stap) for more details. - The dentry tapset provides functions to map kernel VFS directory entries to file or full path names: d_path(), d_name() and reverse_path_walk(). - SystemTap now has userspace markers in its own binaries, and the stap tapset provides the available probepoints and local variables. - Miscellaneous new tapset functions: - pgrp() returns the process group ID of the current process - str_replace() performs string replacement * What's new in version 0.9.8, 2009-06-11 - Miscellaneous new tapset functions: - sid() returns the session ID of the current process - stringat() indexes a single character from a string. - Using %M in print formats for hex dumps can now print entire buffers, instead of just small numbers. - Dwarfless syscalls: The nd_syscalls tapset is now available to probe system calls without requiring kernel debugging information. All of the same probepoints in the normal syscalls tapset are available with an "nd_" prefix, e.g. syscall.open becomes nd_syscall.open. Most syscall arguments are also available by name in nd_syscalls. - Module signing: If the appropriate nss libraries are available on your system, stap-server will sign each compiled module using a self-generated certificate. This is the first step toward extending authority to load certain modules to unprivileged users. For now, if the system administrator adds a certificate to a database of trusted signers (stap-authorize-signing-cert), modules signed using that certificate will be verified by staprun against tampering. Otherwise, you should notice no difference in the operation of stap or staprun. * What's new in version 0.9.7, 2009-04-23 - @cast can now determine its type information using an explicit header specification. For example: @cast(tv, "timeval", "")->tv_sec @cast(task, "task_struct", "kernel")->tgid - The overlapping process.* tapsets are now separated. Those probe points documented in stapprobes(3stap) remain the same. Those that were formerly in stapprobes.process(3stap) have been renamed to kprocess, to reflect their kernel perspective on processes. - The --skip-badvars option now also suppresses run-time error messages that would otherwise result from erroneous memory accesses. Such accesses can originate from $context expressions fueled by erroneous debug data, or by kernel_{long,string,...}() tapset calls. - New probes kprobe.function(FUNCTION) and kprobe.function(FUNCTION).return for dwarfless probing. These postpone function address resolution to run-time and use the kprobe symbol-resolution mechanism. Probing of absolute statements can be done using the kprobe.statement(ADDRESS).absolute construct. - EXPERIMENTAL support for user process unwinding. A new collection of tapset functions have been added to handle user space backtraces from probe points that support them (currently process and timer probes - for timer probes test whether or not in user space first with the already existing user_mode() function). The new tapset functions are: uaddr - User space address of current running task. usymname - Return the symbol of an address in the current task. usymdata - Return the symbol and module offset of an address. print_ustack - Print out stack for the current task from string. print_ubacktrace - Print stack back trace for current task. ubacktrace - Hex backtrace of current task stack. Please read http://sourceware.org/ml/systemtap/2009-q2/msg00364.html on the current restrictions and possible changes in the future and give feedback if you want to influence future developments. * What's new in version 0.9.5, 2009-03-27 - New probes process().insn and process().insn.block that allows inspection of the process after each instruction or block of instructions executed. So to count the total number of instructions a process executes during a run do something like: $ stap -e 'global steps; probe process("/bin/ls").insn {steps++} probe end {printf("Total instructions: %d\n", steps);}' \ -c /bin/ls This feature can slow down execution of a process somewhat. - Systemtap probes and function man pages extracted from the tapsets are now available under 3stap. To show the page for probe vm.pagefault or the stap function pexecname do: $ man 3stap vm.pagefault $ man 3stap pexecname - Kernel tracepoints are now supported for probing predefined kernel events without any debuginfo. Tracepoints incur less overhead than kprobes, and context parameters are available with full type information. Any kernel 2.6.28 and later should have defined tracepoints. Try the following to see what's available: $ stap -L 'kernel.trace("*")' - Typecasting with @cast now supports modules search paths, which is useful in case there are multiple places where the type definition may be found. For example: @cast(sdev, "scsi_device", "kernel:scsi_mod")->sdev_state - On-file flight recorder is supported. It allows stap to record huge trace log on the disk and to run in background. Passing -F option with -o option runs stap in background mode. In this mode, staprun is detached from console, and stap itself shows staprun's pid and exits. Specifying the max size and the max number of log files are also available by passing -S option. This option has one or two arguments seperated by a comma. The first argument is the max size of a log file in MB. If the size of a log file exceeds it, stap switches to the next log file automatically. The second is how many files are kept on the disk. If the number of log files exceeds it, the oldest log file is removed automatically. The second argument can be omitted. For example, this will record output on log files each of them is smaller than 1024MB and keep last 3 logs, in background. % stap -F -o /tmp/staplog -S 1024,3 script.stp - In guru mode (-g), the kernel probing blocklist is disabled, leaving only a subset - the kernel's own internal kprobe blocklist - to attempt to filter out areas unsafe to probe. The differences may be enough to probe more interrupt handlers. - Variables unavailable in current context may be skipped by setting a session level flag with command line option --skip-badvars now available. This replaces any dwarf $variable expressions that could not be resolved with literal numeric zeros, along with a warning message. - Both kernel markers and kernel tracepoint support argument listing through stap -L 'kernel.mark("*")' or stap -L 'kernel.trace("*")' - Users can use -DINTERRUPTIBLE=0 to prevent interrupt reentrancy in their script, at the cost of a bit more overhead to toggle the interrupt mask. - Added reentrancy debugging. If stap is run with the arguments "-t -DDEBUG_REENTRANCY", additional warnings will be printed for every reentrancy event, including the probe points of the resident and interloper probes. - Default to --disable-pie for configure. Use --enable-pie to turn it back on. - Improved sdt.h compatibility and test suite for static dtrace compatible user space markers. - Some architectures now use syscall wrappers (HAVE_SYSCALL_WRAPPERS). The syscall tapset has been enhanced to take care of the syscall wrappers in this release. - Security fix for CVE-2009-0784: stapusr module-path checking race. * What's new in version 0.9, 2009-02-19 - Typecasting is now supported using the @cast operator. A script can define a pointer type for a "long" value, and then access type members using the same syntax as with $target variables. For example, this will retrieve the parent pid from a kernel task_struct: @cast(pointer, "task_struct", "kernel")->parent->pid - process().mark() probes are now possible to trace static user space markers put in programs with the STAP_PROBE macro using the new sys/sdt.h include file. This also provides dtrace compatible markers through DTRACE_PROBE and an associated python 'dtrace' script that can be used in builds based on dtrace that need dtrace -h or -G functionality. - For those that really want to run stap from the build tree there is now the 'run-stap' script in the top-level build directory that sets up the SYSTEMTAP_TAPSET, SYSTEMTAP_RUNTIME, SYSTEMTAP_STAPRUN, and SYSTEMTAP_STAPIO environment variables (installing systemtap, in a local prefix, is still recommended for common use). - Systemtap now comes with a new Beginners Guide that walks the user through their first steps setting up stap, understanding how it all works, introduces some useful scripts and describes some common pitfalls. It isn't created by default since it needs a Publican setup, but full build instructions can be found in the wiki: http://sourceware.org/systemtap/wiki/PublicanQuikHowto An online version can be found at: http://sourceware.org/systemtap/SystemTap_Beginners_Guide.pdf - Standard tapsets included with Systemtap were modified to include extractable documentation information based on the kernel-doc infrastructure. When configured --enabled-docs a HTML and PDF version of the Tapset Reference Manual is produced explaining probes defined in each tapset. - The systemtap client and compile server are now available. These allow you to compile a systemtap module on a host other than the one which it will be run, providing the client and server are compatible. Other than using a server for passes 1 through 4, the client behaves like the 'stap' front end itself. This means, among other things, that the client will automatically load the resulting module on the local host unless -p[1234] was specified. See stap-server(8) for more details. The client/server now use SSL for network connection security and for signing. The systemtap client and server are prototypes only. Interfaces, options and usage may change at any time. - function("func").label("label") probes are now supported to allow matching the label of a function. - Systemtap initscript is available. This initscript allows you to run systemtap scripts as system services (in flight recorder mode) and control those scripts individually. See README.systemtap for details. - The stap "-r DIR" option may be used to identify a hand-made kernel build directory. The tool determines the appropriate release string automatically from the directory. - Serious problems associated with user-space probing in shared libraries were corrected, making it now possible to experiment with probe shared libraries. Assuming dwarf debugging information is installed, use this twist on the normal syntax: probe process("/lib64/libc-2.8.so").function("....") { ... } This would probe all threads that call into that library. Running "stap -c CMD" or "stap -x PID" naturally restricts this to the target command+descendants only. $$vars etc. may be used. - For scripts that sometimes terminate with excessive "skipped" probes, rerunning the script with "-t" (timing) will print more details about the skippage reasons. - Symbol tables and unwind (backtracing) data support were formerly compiled in for all probed modules as identified by the script (kernel; module("name"); process("file")) plus those listed by the stap "-d BINARY" option. Now, this data is included only if the systemtap script uses tapset functions like probefunc() or backtrace() that require such information. This shrinks the probe modules considerably for the rest. - Per-pass verbosity control is available with the new "--vp {N}+" option. "stap --vp 040" adds 4 units of -v verbosity only to pass 2. This is useful for diagnosing errors from one pass without excessive verbosity from others. - Most probe handlers now run with interrupts enabled, for improved system responsiveness and less probing overhead. This may result in more skipped probes, for example if a reentrant probe handler is attempted from within an interrupt handler. It may also make the systemtap overload detection facility more likely to be triggered, as interrupt handlers' run time would be included in the self-assessed overhead of running probe handlers. * What's new in version 0.8, 2008-11-13 - Cache limiting is now available. If the compiled module cache size is over a limit specified in the $SYSTEMTAP_DIR/cache/cache_mb_limit file, some old cache entries will be unlinked. See man stap(1) for more. - Error and warning messages are now followed by source context displaying the erroneous line/s and a handy '^' in the following line pointing to the appropriate column. - A bug reporting tool "stap-report" is now available which will quickly retrieve much of the information requested here: http://sourceware.org/systemtap/wiki/HowToReportBugs - The translator can resolve members of anonymous structs / unions: given struct { int foo; struct { int bar; }; } *p; this now works: $p->bar - The stap "-F" flag activates "flight recorder" mode, which consists of translating the given script as usual, but implicitly launching it into the background with staprun's existing "-L" (launch) option. A user can later reattach to the module with "staprun -A MODULENAME". - Additional context variables are available on user-space syscall probes. - $argN ($arg1, $arg2, ... $arg6) in process(PATH_OR_PID).syscall gives you the argument of the system call. - $return in process(PATH_OR_PID).syscall.return gives you the return value of the system call. - Target process mode (stap -c CMD or -x PID) now implicitly restricts all "process.*" probes to the given child process. (It does not affect kernel.* or other probe types.) The CMD string is normally run directly, rather than via a /bin/sh -c subshell, since then utrace/uprobe probes receive a fairly "clean" event stream. If metacharacters like redirection operators were present in CMD, then "sh -c CMD" is still used, and utrace/uprobe probes will receive events from the shell. % stap -e 'probe process.syscall, process.end { printf("%s %d %s\n", execname(), pid(), pp())}'\ -c ls ls 2323 process.syscall ls 2323 process.syscall ls 2323 process.end - Probe listing mode is improved: "-L" lists available script-level variables % stap -L 'syscall.*open*' syscall.mq_open name:string name_uaddr:long filename:string mode:long u_attr_uaddr:long oflag:long argstr:string syscall.open name:string filename:string flags:long mode:long argstr:string syscall.openat name:string filename:string flags:long mode:long argstr:string - All user-space-related probes support $PATH-resolved executable names, so probe process("ls").syscall {} probe process("./a.out").syscall {} work now, instead of just probe process("/bin/ls").syscall {} probe process("/my/directory/a.out").syscall {} - Prototype symbolic user-space probing support: # stap -e 'probe process("ls").function("*").call { log (probefunc()." ".$$parms) }' \ -c 'ls -l' This requires: - debugging information for the named program - a version of utrace in the kernel that is compatible with the "uprobes" kernel module prototype. This includes RHEL5 and older Fedora, but not yet current lkml-track utrace; a "pass 4a"-time build failure means your system cannot use this yet. - Global variables which are written to but never read are now automatically displayed when the session does a shutdown. For example: global running_tasks probe timer.profile {running_tasks[pid(),tid()] = execname()} probe timer.ms(8000) {exit()} - A formatted string representation of the variables, parameters, or local variables at a probe point is now supported via the special $$vars, $$parms, and $$locals context variables, which expand to a string containing a list "var1=0xdead var2=0xbeef var3=?". (Here, var3 exists but is for some reason unavailable.) In return probes only, $$return expands to an empty string for a void function, or "return=0xf00". * What's new in version 0.7, 2008-07-15 - .statement("func@file:*") and .statement("func@file:M-N") probes are now supported to allow matching a range of lines in a function. This allows tracing the execution of a function. - Scripts relying on probe point wildcards like "syscall.*" that expand to distinct kprobes are processed significantly faster than before. - The vector of script command line arguments is available in a tapset-provided global array argv[]. It is indexed 1 ... argc, another global. This can substitute for of preprocessor directives @NNN that fail at parse time if there are not enough arguments. printf("argv: %s %s %s", argv[1], argv[2], argv[3]) - .statement("func@file+line") probes are now supported to allow a match relative to the entry of the function incremented by line number. This allows using the same systemtap script if the rest of the file.c source only changes slightly. - A probe listing mode is available. % stap -l vm.* vm.brk vm.mmap vm.munmap vm.oom_kill vm.pagefault vm.write_shared - More user-space probe types are added: probe process(PID).begin { } probe process("PATH").begin { } probe process(PID).thread.begin { } probe process("PATH").thread.begin { } probe process(PID).end { } probe process("PATH").end { } probe process(PID).thread.end { } probe process("PATH").thread.end { } probe process(PID).syscall { } probe process("PATH").syscall { } probe process(PID).syscall.return { } probe process("PATH").syscall.return { } - Globals now accept ; terminators global odds, evens; global little[10], big[5]; * What's new in version 0.6, 2007-12-15 - A copy of the systemtap tutorial and language reference guide are now included. - There is a new format specifier, %m, for the printf family of functions. It functions like %s, except that it does not stop when a nul ('\0') byte is encountered. The number of bytes output is determined by the precision specifier. The default precision is 1. For example: printf ("%m", "My String") // prints one character: M printf ("%.5", myString) // prints 5 bytes beginning at the start // of myString - The %b format specifier for the printf family of functions has been enhanced as follows: 1) When the width and precision are both unspecified, the default is %8.8b. 2) When only one of the width or precision is specified, the other defaults to the same value. For example, %4b == %.4b == %4.4b 3) Nul ('\0') bytes are used for field width padding. For example, printf ("%b", 0x1111deadbeef2222) // prints all eight bytes printf ("%4.2b", 0xdeadbeef) // prints \0\0\xbe\xef - Dynamic width and precision are now supported for all printf family format specifiers. For example: four = 4 two = 2 printf ("%*.*b", four, two, 0xdeadbbeef) // prints \0\0\xbe\xef printf ("%*d", four, two) // prints 2 - Preprocessor conditional expressions can now include wildcard style matches on kernel versions. %( kernel_vr != "*xen" %? foo %: bar %) - Prototype support for user-space probing is showing some progress. No symbolic notations are supported yet (so no probing by function names, file names, process names, and no access to $context variables), but at least it's something: probe process(PID).statement(ADDRESS).absolute { } This will set a uprobe on the given process-id and given virtual address. The proble handler runs in kernel-space as usual, and can generally use existing tapset functions. - Crash utility can retrieve systemtap's relay buffer from a kernel dump image by using staplog which is a crash extension module. To use this feature, type commands as below from crash(8)'s command line: crash> extend staplog.so crash> help systemtaplog Then, you can see more precise help message. - You can share a relay buffer amoung several scripts and merge outputs from several scripts by using "-DRELAY_HOST" and "-DRELAY_GUEST" options. For example: # run a host script % stap -ve 'probe begin{}' -o merged.out -DRELAY_HOST & # wait until starting the host. % stap -ve 'probe begin{print("hello ");exit()}' -DRELAY_GUEST % stap -ve 'probe begin{print("world\n");exit()}' -DRELAY_GUEST Then, you'll see "hello world" in merged.out. - You can add a conditional statement for each probe point or aliase, which is evaluated when the probe point is hit. If the condition is false, the whole probe body(including aliases) is skipped. For example: global switch = 0; probe syscall.* if (switch) { ... } probe procfs.write {switch = strtol($value,10)} /* enable/disable ctrl */ - Systemtap will warn you if your script contains unused variables or functions. This is helpful in case of misspelled variables. If it doth protest too much, turn it off with "stap -w ...". - You can add error-handling probes to a script, which are run if a script was stopped due to errors. In such a case, "end" probes are not run, but "error" ones are. probe error { println ("oops, errors encountered; here's a report anyway") foreach (coin in mint) { println (coin) } } - In a related twist, one may list probe points in order of preference, and mark any of them as "sufficient" beyond just "optional". Probe point sequence expansion stops if a sufficient-marked probe point has a hit. This is useful for probes on functions that may be in a module (CONFIG_FOO=m) or may have been compiled into the kernel (CONFIG_FOO=y), but we don't know which. Instead of probe module("sd").function("sd_init_command") ? , kernel.function("sd_init_command") ? { ... } which might match neither, now one can write this: probe module("sd").function("sd_init_command") ! , /* <-- note excl. mark */ kernel.function("sd_init_command") { ... } - New security model. To install a systemtap kernel module, a user must be one of the following: the root user; a member of the 'stapdev' group; or a member of the 'stapusr' group. Members of the stapusr group can only use modules located in the /lib/modules/VERSION/systemtap directory (where VERSION is the output of "uname -r"). - .statement("...@file:line") probes now apply heuristics to allow an approximate match for the line number. This works similarly to gdb, where a breakpoint placed on an empty source line is automatically moved to the next statement. A silly bug that made many $target variables inaccessible to .statement() probes was also fixed. - LKET has been retired. Please let us know on if you have been a user of the tapset/tools, so we can help you find another way. - New families of printing functions println() and printd() have been added. println() is like print() but adds a newline at the end; printd() is like a sequence of print()s, with a specified field delimiter. * What's new since version 0.5.14?, 2007-07-03 - The way in which command line arguments for scripts are substituted has changed. Previously, $1 etc. would interpret the corresponding command line argument as an numeric literal, and @1 as a string literal. Now, the command line arguments are pasted uninterpreted wherever $1 etc. appears at the beginning of a token. @1 is similar, but is quoted as a string. This change does not modify old scripts, but has the effect of permitting substitution of arbitrary token sequences. # This worked before, and still does: % stap -e 'probe timer.s($1) {}' 5 # Now this also works: % stap -e 'probe syscall.$1 {log(@1)}' open # This won't crash, just signal a recursion error: % stap -e '$1' '$1' # As before, $1... is recognized only at the beginning of a token % stap -e 'probe begin {foo$1=5}' * What's new since version 0.5.13?, 2007-03-26 - The way in which systemtap resolves function/inline probes has changed: .function(...) - now refers to all functions, inlined or not .inline(...) - is deprecated, use instead: .function(...).inline - filters function() to only inlined instances .function(...).call - filters function() to only non-inlined instances .function(...).return - as before, but now pairs best with .function().call .statement() is unchanged. * What's new since version 0.5.12?, 2007-01-01 - When running in -p4 (compile-only) mode, the compiled .ko file name is printed on standard output. - An array element with a null value such as zero or an empty string is now preserved, and will show up in a "foreach" loop or "in" test. To delete such an element, the scripts needs to use an explicit "delete array[idx]" statement rather than something like "array[idx]=0". - The new "-P" option controls whether prologue searching heuristics will be activated for function probes. This was needed to get correct debugging information (dwarf location list) data for $target variables. Modern compilers (gcc 4.1+) tend not to need this heuristic, so it is no longer default. A new configure flag (--enable-prologues) restores it as a default setting, and is appropriate for older compilers (gcc 3.*). - Each systemtap module prints a one-line message to the kernel informational log when it starts. This line identifies the translator version, base address of the probe module, a broken-down memory consumption estimate, and the total number of probes. This is meant as a debugging / auditing aid. - Begin/end probes are run with interrupts enabled (but with preemption disabled). This will allow begin/end probes to be longer, to support generating longer reports. - The numeric forms of kernel.statement() and kernel.function() probe points are now interpreted as relocatable values - treated as relative to the _stext symbol in that kernel binary. Since some modern kernel images are relocated to a different virtual address at startup, such addresses may shift up or down when actually inserted into a running kernel. kernel.statement(0xdeadbeef): validated, interpreted relative to _stext, may map to 0xceadbeef at run time. In order to specify unrelocated addresses, use the new ".absolute" probe point suffix for such numeric addresses. These are only allowed in guru mode, and provide access to no $target variables. They don't use debugging information at all, actually. kernel.statement(0xfeedface).absolute: raw, unvalidated, guru mode only * What's new since version 0.5.10?, 2006-10-19 - Offline processing of debugging information, enabling general cross-compilation of probe scripts to remote hosts, without requiring identical module/memory layout. This slows down compilation/translation somewhat. - Kernel symbol table data is loaded by staprun at startup time rather than compiled into the module. - Support the "limit" keyword for foreach iterations: foreach ([x,y] in ary limit 5) { ... } This implicitly exits after the fifth iteration. It also enables more efficient key/value sorting. - Support the "maxactive" keyword for return probes: probe kernel.function("sdfsdf").maxactive(848) { ... } This allows up to 848 concurrently outstanding entries to the sdfsdf function before one returns. The default maxactive number is smaller, and can result in missed return probes. - Support accessing of saved function arguments from within return probes. These values are saved by a synthesized function-entry probe. - Add substantial version/architecture checking in compiled probes to assert correct installation of debugging information and correct execution on a compatible kernel. - Add probe-time checking for sufficient free stack space when probe handlers are invoked, as a safety improvement. - Add an optional numeric parameter for begin/end probe specifications, to order their execution. probe begin(10) { } /* comes after */ probe begin(-10) {} - Add an optional array size declaration, which is handy for very small or very large ones. global little[5], big[20000] - Include some example scripts along with the documentation. - Change the start-time allocation of probe memory to avoid causing OOM situations, and to abort cleanly if free kernel memory is short. - Automatically use the kernel DWARF unwinder, if present, for stack tracebacks. - Many minor bug fixes, performance, tapset, and error message improvements. systemtap-4.6/README000066400000000000000000000130121414446751200143010ustar00rootroot00000000000000systemtap: a linux trace/probe tool Visit the project web site at , for documentation and mailing lists for developers and users. This is free software. See the COPYING file for redistribution/modification terms. See the INSTALL file for generic build instructions. See the HACKING file for contribution advice. Prerequisites: - linux kernel - kernel module build environment (kernel-devel rpm) and/or dyninst - optionally, debugging information for kernel/user-space being instrumented - C compiler (same as what kernel was compiled with), to build kernel modules - C++11 compiler such as gcc 4.8+, to build systemtap itself - elfutils 0.151+ with libdwfl for debugging information parsing - Python for tools which are scripts, such as dtrace(1) - root privileges Installation steps: - If equipped with elfutils version 0.178 or later, try using debuginfod for automatic debuginfo downloading. This experimental public server may be enough: % export DEBUGINFOD_URLS=https://debuginfod.elfutils.org/ % export DEBUGINFOD_PROGRESS=1 See https://sourceware.org/elfutils/Debuginfod.html for more details. - Otherwise, install any debuginfo packages you need, for kernel and/or userspace. On modern Fedora, # debuginfo-install kernel [...] (Beware of confusion between kernel vs. kernel-debug vs kernel-PAE etc. variants. Each likely has a corresponding development and debuginfo package.) - Install the systemtap package. On modern Fedora, # yum install systemtap systemtap-runtime Build steps: - Consider installing the kernel-debuginfo, kernel-devel, gcc and dependent packages (or see below if you are building your own kernels from source). If using only the pure-userspace dyninst backend, install gcc and dyninst-devel. - If available, install your distribution's copy of elfutils and its development headers/libraries. Or if desired, build elfutils separately one time, and install it to /usr/local. See https://elfutils.org/ elfutils version 0.178 introduces automatic debuginfo downloading, which can makes systemtap usage easier. - On modern Fedora, install general optional build-requisites: # yum-builddep systemtap On modern Debian/Ubuntu, similarly: # apt-get build-dep systemtap - Download systemtap sources: https://sourceware.org/systemtap/ftp/releases/ https://sourceware.org/systemtap/ftp/snapshots/ (or) git clone git://sourceware.org/git/systemtap.git (or) https://sourceware.org/git/systemtap.git - Build systemtap normally: % .../configure [other autoconf options] Add env LDFLAGS=-L/path/ CPPFLAGS=-I/path/ before configure to locate libraries in non-system directories. Consider configuring with "--enable-dejazilla" to automatically contribute to our public test result database. Consider configuring with "--prefix=DIRECTORY" to specify an installation directory other than /usr/local. It can be an ordinary personal directory. % make all # make install To uninstall systemtap: # make uninstall Alternately, on a Fedora-like system: % make rpm # rpm -i /path/to/rpmbuild/.../systemtap*rpm - Run systemtap: To run systemtap after installation, add $prefix/bin to your $PATH, or refer to $prefix/bin/stap directly. If you keep your build tree around, you can also use the "stap" binary there. Some samples should be available under $prefix/share/doc/systemtap/examples. For the normal linux-kernel-module based backend, run "stap" as root. If desired, create "stapdev" and "stapusr" entries in /etc/groups. Any users in "stapdev"+"stapusr" will be able to run systemtap as if with root privileges. Users in "stapusr" only may launch (with "staprun") pre-compiled probe modules (created by "stap -p4 ...") that a system administrator copied under /lib/modules/`uname -r`/systemtap. "stapusr" may also be permitted to create arbitrary unprivileged systemtap scripts of their own. See README.unprivileged for additional setup instructions. To run a simple test. # stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' To run the full test suite from the build tree, install dejagnu, then run with root privileges: # make installcheck For the prototype dyninst pure-userspace backend, run "stap" as any user. % stap --runtime=dyninst -e 'probe process.function("*") { println(pn(), ":", $$parms) }' -c 'ls' For the prototype bpf backend, run "stap" as "root" # stap --runtime=bpf -e 'probe kernel.function("do_exit") { printf("bye %d\n", pid()) }' Tips: - By default, systemtap looks for the debug info in these locations: /boot/vmlinux-`uname -r` /usr/lib/debug/lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/vmlinux /lib/modules/`uname -r`/build/vmlinux Building a kernel.org kernel: - Build the kernel using your normal procedures. Enable CONFIG_DEBUG_INFO, CONFIG_KPROBES, CONFIG_RELAY, CONFIG_DEBUG_FS, CONFIG_MODULES, CONFIG_MODULE_UNLOAD, CONFIG_UPROBES if able - % make modules_install install headers_install - Boot into the kernel. - If you wish to leave the kernel build tree in place, simply run % stap -r /path/to/kernel/build/tree [...] You're done. - Or else, if you wish to install the kernel build/debuginfo data into a place where systemtap will find it without the "-r" option: % ln -s /path/to/kernel/build/tree /lib/modules/RELEASE/build - Instead of using the "-r" option, you can also use the environment variable SYSTEMTAP_RELEASE to direct systemtap to the kernel data. systemtap-4.6/README.security000066400000000000000000000074731414446751200161650ustar00rootroot00000000000000Systemtap builds kernel modules. To insert a kernel module on a system, root access is needed. SECURITY MODEL ============== Originally sudo(8) was used to grant root access. After compiling a new kernel module, stap ran "sudo staprun module_path". This worked, but required all systemtap users to have root access. Many sysadmins on enterprise systems do not have root access. So, a new security model was developed. To run the staprun program (which installs systemtap kernel modules), a user must be one of the following: * the root user; * a member of both 'stapdev' and 'stapusr' groups; or * a member of the 'stapusr' group. Members of the stapusr group can only use modules located in the /lib/modules/VERSION/systemtap directory (where VERSION is the output of "uname -r"). This directory must be owned by root and not be world writable. So, there are two classes of users: systemtap developers (the root user and members of the stapdev/stapusr groups) and systemtap users (members of only the stapusr group). Systemtap developers can compile and run any systemtap script. Systemtap users can only run "approved" pre-compiled modules located in /lib/modules/VERSION/systemtap. USAGE ===== Here's the usage case. A systemtap developer hears of a problem on a production machine (which doesn't have a compiler or kernel debuginfo installed). So, he write a systemtap script to probe certain areas of the kernel that will give him a better idea of what is going on. He develops the script on a development machine (that has the compiler and kernel debuginfo installed). Once he is satisfied with the systemtap script, he creates the systemtap kernel module and copies it to /lib/modules/VERSION/systemtap on the target production machine. He then asks a systemtap user on that machine to run the module and report the results. The above usage case would look something like this: On the development machine: # vi pmod.stp (The systemtap developer writes the systemtap script.) # stap -m pmod pmod.stp (The systemtap developer compiles and runs the script. If necessary, the script may need to be edited to fix any errors.) # scp pmod.ko prod_machine:/lib/modules/`uname -r`/systemtap (The systemtap developer copies the compiled kernel module to the proper directory on the production machine. Of course other methods - ftp, nfs, etc. could be used to transfer the module.) On the production machine: $ staprun pmod (The systemtap user runs the newly developed systemtap kernel module.) There are (at least) 2 different usage scenarios for the /lib/modules/VERSION/systemtap directory. 1) Most restrictive usage. If only root should be able to add "approved" systemtap modules to /lib/modules/VERSION/systemtap, the permissions should be 755, like this: drwxr-xr-x 2 root root 4096 2007-08-07 13:54 systemtap/ 2) More permissive usage. If all systemtap developers should be able to add "approved" systemtap modules to /lib/modules/VERSION/systemtap, its permissions should be 775 (and be owned by root, group stapdev), like this: drwxrwxr-x 2 root stapdev 4096 2007-08-07 13:54 systemtap/ INTERNALS ========= To accomplish the new security model, staprun has been split into two programs: staprun and stapio. Here is a description of a typical systemtap session. The staprun program is a setuid program that does some system setup, loads the kernel module, then runs stapio (and waits for it to finish). The stapio program runs as the invoking user and is responsible for all communication with the kernel module. After the script runs to completion, stapio fork/execs staprun -d to unload the kernel module. staprun is a setuid program. It holds on to the root privileges only for the least amount of time (as required to verify/load compiled kernel module files). It invokes only stapio, and only as the original (unprivileged) user. systemtap-4.6/README.stapregex000066400000000000000000000011361414446751200163060ustar00rootroot00000000000000The following files in this directory incorporate code from the re2c project: - stapregex.h - stapregex.cxx - stapregex-tree.h - stapregex-tree.cxx - stapregex-parse.h - stapregex-parse.cxx - stapregex-dfa.h - stapregex-dfa.cxx The codebase these files are based on was originally released into the public domain. Many thanks to the developers of re2c for their work. As a courtesy to the original developers of re2c, please include appropriate acknowledgment in future code derived from this file. Information on the original re2c distribution can be found at: http://sourceforge.net/projects/re2c/ systemtap-4.6/README.unprivileged000066400000000000000000000303111414446751200167760ustar00rootroot00000000000000Unprivileged Mode for Systemtap Users ===================================== Introduction ------------ In order to use the full capabilities of systemtap, one must run it as root or as a member of the groups stapusr and stapdev. For other (unprivileged) users, systemtap does provide support for use of a subset of systemtap's capabilities to perform limited probing. For example, tracing your own applications or polling using timers. The intent is to give unprivileged users capabilities similar to those provided by a debugger. Below are instructions for running systemtap scripts in unprivileged mode. Systemtap Compile Server ------------------------ In order to load the kernel module produced by compiling a systemtap script for an unprivileged user, we must know that the script was compiled correctly and that the script does not do anything dangerous. A systemap compile server provides the trusted compilation environment needed to certify both conditions. NOTE: In order to use a compile server, the nss and nspr packages must be installed on the client host and systemtap must have been built with NSS enabled. Run 'stap -V | grep NSS' to find out if NSS is enabled. NOTE: In order to detect servers on the local network, the avahi package must be installed on the client host and systemtap must have been built with avahi enabled. Run 'stap -V | grep AVAHI' to find out if avahi is enabled. To find out if a suitable server is available on the local network, this command should produce output similar to the following: # stap --list-servers --privileged=stapusr Systemtap Compile Server Status for 'online,trusted,compatible,signer' host=somehost ip=10.15.16.156 port=10913 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" NOTE: In order for servers to be detected, the port for mDNS (5353/udp) must be open on the server and client hosts. If no servers are listed, then you must ask your system administrator to make the appropriate compile server available on the local host or on the local network. The server must be trusted as an ssl peer and as a systemtap module signer on the local host. See "Setup and Administration of Unprivileged Users for System Administrators" below for more details. Trust of Unprivileged Users --------------------------- Even with the appropriate compile server available, each unprivileged user must be explicitly trusted. This is done by adding each unprivileged user to the group stapusr and possibly the group stapsys on each host on which they will run systemtap scripts. To see if you are a member of the group stapusr on the local host, this command should produce output similar to the following: # getent group stapusr stapusr:x:483:someuser,anotheruser If your userid is listed, then you are already a member of the group stapusr. If it is not, then you must ask your system administrator to add you to this group. Once added, Try the command newgrp stapusr to activate your membership. If all else fails, logging out and back in again should work. See the manual page for newgrp(1) for details. Using Systemtap in Unprivileged Mode ------------------------------------ Unprivileged users can compile any systemtap script either directly or using a compile server, but systemtap will not load the resulting kernel module for an unprivileged user unless it has been compiled and certified by a trusted compile server. To do this, as an unprivileged user, this command should produce output similar to the following: # stap -e 'probe begin { printf ("Hello\n"); exit (); }' Hello For unprivileged users, stap will automatically add the options --privilege and --use-server (you could also specify them yourself). --use-server tells systemtap to compile the script using a server. --privilege tells the server to check the script to maker sure it doesn't do anything 'dangerous', i.e. nothing that a user with the specified privilege credentials shouldn't be able to do. If the server approves of your script and is able to compile it, systemtap will then load the resulting module for you even though you are an unprivileged user. If you save the resulting module by using the -p4 option of stap, then trusted, unprivileged users can load the module at a later time using staprun: # stap -e 'probe begin { printf ("Hello\n"); exit (); }' -p4 stap_5330.ko # staprun stap_5330.ko Hello Note that the module has already been certified (signed), so no special options are needed. Additional Information ---------------------- o When specifying path names in your script and compiling using a server, you must use a server which has access to those paths (e.g. via nfs, or a server on the local host) and you must specify the paths in full from the servers's point of view. For example, specify probe process("foo").begin() as probe process("/the/full/path/as/seen/by/the/server/to/foo").begin() o You can use '--privilege=[stapusr|stapsys] -pN' (for 1 <= N <= 4) without --use-server to compile and check scripts directly. stap will still check your script for 'dangerous' behavior, but will not load it for an unprivileged user. o When using --privilege, all compile time and run time restrictions are enforced for all users, including root and members of the group stapdev. Setup and Administration of Unprivileged Users for System Administrators ======================================================================== Introduction ------------ In order to use the full capabilities of systemtap, one must run it as root or as a member of the group stapdev. For other (unprivileged) users, systemtap does provide support for use of a subset of systemtap's capabilities to perform limited probing. For example, tracing your own applications or polling using timers. The intent is to give unprivileged users capabilities similar to those provided by a debugger. In order for this to happen, the system administrator must first perform some setup: o Systemtap compile server(s) must be made available on the local network. One server is needed for each kernel version and architecture pair for which users will compile scripts. o The compile server(s) must be trusted as an SSL peer and as a signer of systemtap modules on hosts on which unprivileged users will compile and run their scripts respectively. o Unprivileged users must be added to the group stapusr, and possibly the group stapsys on the host(s) on which they will run their scripts. Below are the necessary steps for the system administrator to setup the above infrastructure. Systemtap Compile Server ------------------------ In order to load the kernel module produced by compiling a systemtap script for an unprivileged user, we must know that the script was compiled correctly and that the script does not do anything dangerous. A systemap compile server provides a trusted environment needed to certify both conditions. In order to make a compile server available on the local network the systemtap-server package and its prerequisites must be installed on the server host. The system administrator then uses the following command: sudo service stap-server start [-r KERNEL-RELEASE] [-a ARCH] For example: # sudo service stap-server start -r 2.6.34.7-61.fc13.x86_64 -a x86_64 Starting stap-server -a "x86_64" -r "2.6.34.7-61.fc13.x86_64" -u "stap-server" [ OK ] This starts a compile server for the specified kernel release and hardware architecture. The kernel and kernel-devel package for the specified release and architecture must be installed on the server host. The kernel-debuginfo package for each kernel release and architecture should also be installed, but is not relevant for unprivileged users. If either one (or both) the kernel release and/or architecture is not specified, the kernel release and/or architecture of the server host will be used: # sudo service stap-server start Starting stap-server -a "x86_64" -r "2.6.34.7-66.fc13.x86_64" -u "stap-server" [ OK ] As a short cut, to start a server for each kernel release and architecture installed on the server host, use the command: # sudo service stap-server start -i Starting stap-server -a "x86_64" -r "2.6.34.7-61.fc13.x86_64" -u "stap-server" [ OK ] Starting stap-server -a "x86_64" -r "2.6.34.7-63.fc13.x86_64" -u "stap-server" [ OK ] Starting stap-server -a "x86_64" -r "2.6.34.7-66.fc13.x86_64" -u "stap-server" [ OK ] NOTE: Only root can start a systemtap server using the service command. Trust of Compile Servers ------------------------ Once systemtap compile servers have been made available on the local network, the system administrator must certify which ones are trusted as SSL peers, as systemtap kernel module signers or both. Certifying a compile server as an SSL peer means what the system administrator trusts that it compiles systemtap scripts correctly. Certifying a compile server as a module signer means that the system administrator trusts it to correctly check a systemtap script for behavior which should not be made available to unprivileged users. When a script is compiled using the --privilege option, the server checks the script for such behavior and cryptographically signs the resulting module if it is safe for use by unprivileged users. Verification of the signature certifies that the module was certified as 'safe' by the server and that it has not been altered since it was certified. Systemtap compile servers started by using the 'service' command are automatically trusted both as SSL peers and as module signers on the server's host. No further setup of the servers is necessary for users (clients) on that same host. Before clients on another host can make use of a server, the system administrator of each client host must certify trust in that server. This is performed in two steps: 1) Identify the server(s) to be trusted. # stap --list-servers=online,compatible Systemtap Compile Server Status for 'online,compatible' host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" Identify the server(s) to be trusted by examining the host name, ip address and sysinfo (kernel release and architecture). Take note of the 'certinfo' field of each server to be trusted. NOTE: In order for servers to be detected, the port for mDNS (5353/udp) must be open on the server and client hosts. 2) For each server to be trusted for use by unprivileged clients, use the command: sudo stap --trust-servers=ssl,signer,all-users --use-server=CERTINFO1 [--use-server=CERTINFO2 ...] where each CERTINFOn is the value of the 'certinfo' field of a server to be trusted (obtained using the previous command). For example: # sudo stap --trust-servers=ssl,signer,all-users --use-server=00:93:49:be:2a Add trust in the following servers as an SSL peer for all users and as a module signer for all users? host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" [y/N] y Using the 'certinfo' to specify each server ensures that the exact servers which were intended are the ones which become trusted. Note that only root can certify trust in a server as signer in this way. Now verify the result: # stap --list-servers --privilege=stapusr Systemtap Compile Server Status for 'online,trusted,compatible,signer' host=somehost ip=10.15.16.156 port=26543 sysinfo="2.6.34.7-66.fc13.x86_64 x86_64" certinfo="00:93:49:be:2a" Each of the servers you specified in stap 2 above should be listed. Trust of Unprivileged Users --------------------------- Finally, once compile servers have been set up and are trusted, each unprivileged user must be explicitly trusted. This is done by adding each unprivileged user to the group stapusr, and possibly the group stapsys on each host on which they will run systemtap scripts: sudo usermod -a -G stapusr[,stapsys] USERID If the user is already logged in, they can try using newgrp stapusr to activate their membership. If all else fails, logging out and back in again should work. See newgrp(1) for details. systemtap-4.6/aclocal.m4000066400000000000000000001533331414446751200152740ustar00rootroot00000000000000# generated automatically by aclocal 1.16.2 -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.2], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.2])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 1999-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 dnl python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 dnl python3.2 python3.1 python3.0 dnl python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 dnl python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Getting [:3] seems to be dnl the best way to do this; it's what "site.py" does in the standard dnl library. AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl Use the values of $prefix and $exec_prefix for the corresponding dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made dnl distinct variables so they can be overridden if need be. However, dnl general consensus is that you shouldn't need this ability. AC_SUBST([PYTHON_PREFIX], ['${prefix}']) AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) dnl At times (like when building shared libraries) you may want dnl to know which OS platform Python thinks this is. AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': can_use_sysconfig = 0 except ImportError: pass" dnl Set up 4 directories: dnl pythondir -- where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON script directory], [am_cv_python_pythondir], [if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl pkgpythondir -- $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl pyexecdir -- directory for installing python extension modules dnl (shared libraries) dnl Query distutils for this directory. AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], [am_cv_python_pyexecdir], [if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2020 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_check_compile_flag.m4]) m4_include([m4/ax_cxx_compile_stdcxx.m4]) m4_include([m4/gettext.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/nls.m4]) m4_include([m4/pkg.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) systemtap-4.6/analysis.cxx000066400000000000000000000142411414446751200157750ustar00rootroot00000000000000// systemtap analysis code // Copyright (C) 2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #ifdef HAVE_DYNINST #include "loc2stap.h" #include "analysis.h" #include #include #include using namespace Dyninst; using namespace SymtabAPI; using namespace ParseAPI; using namespace std; // Data structures to cache dyninst parsing of binaries class bin_info { public: bin_info(SymtabCodeSource *s=NULL, CodeObject *c=NULL): sts(s), co(c) {}; ~bin_info(){}; SymtabCodeSource *sts; CodeObject *co; }; typedef map parsed_bin; static parsed_bin cached_info; class analysis { public: analysis(string name); SymtabCodeSource *sts; CodeObject *co; }; // Get the binary set up for anaysis analysis::analysis(string name) { char *name_str = strdup(name.c_str()); sts = NULL; co = NULL; // Use cached information if available if (cached_info.find(name) != cached_info.end()) { sts = cached_info[name].sts; co = cached_info[name].co; goto cleanup; } // Not not seen before // Create a new binary code object from the filename argument sts = new SymtabCodeSource(name_str); if(!sts) goto cleanup; co = new CodeObject(sts); if(!co) goto cleanup; // Cache the info for future reference { bin_info entry(sts,co); cached_info.insert(make_pair(name,entry)); } cleanup: free(name_str); } #if defined(__i386__) || defined(__x86_64__) static const MachRegister dyninst_register_64[] = { x86_64::rax, x86_64::rdx, x86_64::rcx, x86_64::rbx, x86_64::rsi, x86_64::rdi, x86_64::rbp, x86_64::rsp, x86_64::r8, x86_64::r9, x86_64::r10, x86_64::r11, x86_64::r12, x86_64::r13, x86_64::r14, x86_64::r15, x86_64::rip }; static const MachRegister dyninst_register_32[] = { x86::eax, x86::edx, x86::ecx, x86::ebx, x86::esi, x86::edi, x86::ebp, x86::esp }; #elif defined(__aarch64__) static const MachRegister dyninst_register_64[] = { aarch64::x0, aarch64::x1, aarch64::x2, aarch64::x3, aarch64::x4, aarch64::x5, aarch64::x6, aarch64::x7, aarch64::x8, aarch64::x9, aarch64::x10, aarch64::x11, aarch64::x12, aarch64::x13, aarch64::x14, aarch64::x15, aarch64::x16, aarch64::x17, aarch64::x18, aarch64::x19, aarch64::x20, aarch64::x21, aarch64::x22, aarch64::x23, aarch64::x24, aarch64::x25, aarch64::x26, aarch64::x27, aarch64::x28, aarch64::x29, aarch64::x30, aarch64::sp }; static const MachRegister dyninst_register_32[1]; // No 32-bit support #elif defined(__powerpc__) static const MachRegister dyninst_register_64[] = { ppc64::r0, ppc64::r1, ppc64::r2, ppc64::r3, ppc64::r4, ppc64::r5, ppc64::r6, ppc64::r7, ppc64::r8, ppc64::r9, ppc64::r10, ppc64::r11, ppc64::r12, ppc64::r13, ppc64::r14, ppc64::r15, ppc64::r16, ppc64::r17, ppc64::r18, ppc64::r19, ppc64::r20, ppc64::r21, ppc64::r22, ppc64::r23, ppc64::r24, ppc64::r25, ppc64::r26, ppc64::r27, ppc64::r28, ppc64::r29, ppc64::r30, ppc64::r31 }; static const MachRegister dyninst_register_32[] = { ppc32::r0, ppc32::r1, ppc32::r2, ppc32::r3, ppc32::r4, ppc32::r5, ppc32::r6, ppc32::r7, ppc32::r8, ppc32::r9, ppc32::r10, ppc32::r11, ppc32::r12, ppc32::r13, ppc32::r14, ppc32::r15, ppc32::r16, ppc32::r17, ppc32::r18, ppc32::r19, ppc32::r20, ppc32::r21, ppc32::r22, ppc32::r23, ppc32::r24, ppc32::r25, ppc32::r26, ppc32::r27, ppc32::r28, ppc32::r29, ppc32::r30, ppc32::r31 }; #endif // Data structures to cache dyninst liveness analysis of a function typedef map precomputed_liveness; static precomputed_liveness cached_liveness; int liveness(string executable, Dwarf_Addr addr, location_context ctx) { // should cache the executable names like the other things analysis func_to_analyze(executable); MachRegister r; // Determine whether 32-bit or 64-bit code as the register names are different in dyninst int reg_width = func_to_analyze.co->cs()->getAddressWidth(); // Find where the variable is located location *loc = ctx.locations.back (); // If variable isn't in a register, punt (return 0) if (loc->type != loc_register) return 0; // Map dwarf number to dyninst register name, punt if out of range unsigned int regno = loc->regno; switch (reg_width){ case 4: if (regno >= (sizeof(dyninst_register_32)/sizeof(MachRegister))) return 0; r = dyninst_register_32[regno]; break; case 8: if (regno >= (sizeof(dyninst_register_64)/sizeof(MachRegister))) return 0; r = dyninst_register_64[regno]; break; default: // All the current architectures that systemtap (and dyninst) support // are 32-bit (4 byte) or 64-bit (8 byte). Should never end up here. assert(false); return 0; } // Find the function containing the probe point. std::set ff_s; if(func_to_analyze.co->findFuncs(NULL, addr, ff_s) <= 0) return 0; ParseAPI::Function *func = *ff_s.begin(); LivenessAnalyzer *la; // LivenessAnalyzer does allow some caching on a per executable basis // Check if a previous liveness analyzer exists for the executable if (cached_liveness.find(executable) != cached_liveness.end()) { la = cached_liveness[executable]; }else { // Otherwise create new liveness analysis la = new LivenessAnalyzer(reg_width); cached_liveness.insert(make_pair(executable,la)); } la->analyze(func); // Get the basic block and instruction containing the the probe point. set bb_s; if (func_to_analyze.co->findBlocks(NULL, addr, bb_s) != 1 ) return 0; // too many (or too few) basic blocks, punt Block *bb = *bb_s.begin(); // Construct a liveness query location for the probe point. InsnLoc i(bb, addr, bb->getInsn(addr)); Location iloc(func, i); // Query to see if whether the register is live at that point bool used; la->query(iloc, LivenessAnalyzer::Before, r, used); return (used ? 1 : -1); } #endif // HAVE_DYNINST systemtap-4.6/analysis.h000066400000000000000000000013021414446751200154140ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef ANALYSIS_H #define ANALYSIS_H #include "config.h" // Three outcomes of analysis: // < 0 false // == 0 unable to determine // > 0 true #ifdef HAVE_DYNINST extern int liveness(std::string executable, Dwarf_Addr location, location_context ctx); #else #define liveness(executable, location, var) (0) #endif // HAVE_DYNINST #endif // ANALYSIS_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/ar-lib000077500000000000000000000133031414446751200145200ustar00rootroot00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2018 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <"; } } insn::insn() : code(-1), id(0), off(0), dest(NULL), src0(NULL), src1(NULL), prev(NULL), next(NULL) { } bool is_jmp(opcode code) { if (BPF_CLASS (code) != BPF_JMP) return false; switch (BPF_OP (code)) { case BPF_JA: case BPF_JEQ: case BPF_JGT: case BPF_JGE: case BPF_JSET: case BPF_JNE: case BPF_JSGT: case BPF_JSGE: return true; default: return false; } } bool is_move(opcode c) { switch (c) { case BPF_ALU64 | BPF_MOV | BPF_X: case BPF_ALU64 | BPF_MOV | BPF_K: case BPF_ALU | BPF_MOV | BPF_K: case BPF_LD | BPF_IMM | BPF_DW: case BPF_LD_MAP: return true; default: return false; } } bool is_ldst(opcode c) { switch (BPF_CLASS (c)) { case BPF_LDX: case BPF_ST: case BPF_STX: return true; default: return false; } } bool is_binary(opcode code) { if (BPF_CLASS (code) != BPF_ALU64) return false; switch (BPF_OP (code)) { case BPF_ADD: case BPF_SUB: case BPF_AND: case BPF_OR: case BPF_LSH: case BPF_RSH: case BPF_XOR: case BPF_MUL: case BPF_ARSH: case BPF_DIV: case BPF_MOD: return true; default: return false; } } bool is_commutative(opcode code) { if (BPF_CLASS (code) != BPF_ALU64) return false; switch (BPF_OP (code)) { case BPF_ADD: case BPF_AND: case BPF_OR: case BPF_XOR: case BPF_MUL: return true; default: return false; } } /* Various functions for eBPF helper lookup: */ std::map bpf_func_name_map; std::map bpf_func_id_map; /* PR23829: On older kernels, bpf.h does not define __BPF_FUNC_MAPPER. As a fallback, use the *earliest* __BPF_FUNC_MAPPER, so stapbpf will not try helpers that only exist on subsequent kernels. TODO: This isn't perfect since even older kernels don't have some of these helpers. XXX: Note the build limitation in that SystemTap must be compiled against a recent kernel to be able to use the helpers from that kernel. That's also the case when building against recent bpf.h with __BPF_FUNC_MAPPER, so this workaround is not the source of the problem. */ #ifndef __BPF_FUNC_MAPPER #define __BPF_FUNC_MAPPER(FN) \ FN(unspec), \ FN(map_lookup_elem), \ FN(map_update_elem), \ FN(map_delete_elem), \ FN(probe_read), \ FN(ktime_get_ns), \ FN(trace_printk), \ FN(get_prandom_u32), \ FN(get_smp_processor_id), \ FN(skb_store_bytes), \ FN(l3_csum_replace), \ FN(l4_csum_replace), \ FN(tail_call), \ FN(clone_redirect), \ FN(get_current_pid_tgid), \ FN(get_current_uid_gid), \ FN(get_current_comm), \ FN(get_cgroup_classid), \ FN(skb_vlan_push), \ FN(skb_vlan_pop), \ FN(skb_get_tunnel_key), \ FN(skb_set_tunnel_key), \ FN(perf_event_read), \ FN(redirect), \ FN(get_route_realm), \ FN(perf_event_output), \ FN(skb_load_bytes), \ FN(get_stackid), \ FN(csum_diff), \ FN(skb_get_tunnel_opt), \ FN(skb_set_tunnel_opt), \ FN(skb_change_proto), \ FN(skb_change_type), \ FN(skb_under_cgroup), \ FN(get_hash_recalc), \ FN(get_current_task), \ FN(probe_write_user), \ FN(current_task_under_cgroup), \ FN(skb_change_tail), \ FN(skb_pull_data), \ FN(csum_update), \ FN(set_hash_invalid), \ #endif void init_bpf_helper_tables () { #define __BPF_SET_FUNC_NAME(x) bpf_func_name_map[BPF_FUNC_ ## x] = #x #define __BPF_SET_FUNC_ID(x) bpf_func_id_map[#x] = BPF_FUNC_ ## x __BPF_FUNC_MAPPER(__BPF_SET_FUNC_NAME) __STAPBPF_FUNC_MAPPER(__BPF_SET_FUNC_NAME) __BPF_FUNC_MAPPER(__BPF_SET_FUNC_ID) __STAPBPF_FUNC_MAPPER(__BPF_SET_FUNC_ID) (void)0; } const char * bpf_function_name (unsigned id) { if (bpf_func_name_map.count(id) != 0) return bpf_func_name_map[id]; return NULL; } bpf_func_id bpf_function_id (const std::string& name) { if (bpf_func_id_map.count(name) != 0) return bpf_func_id_map[name]; return __BPF_FUNC_MAX_ID; } unsigned bpf_function_nargs (unsigned id) { // ??? generalize to all bpf functions switch (id) { case BPF_FUNC_map_lookup_elem: return 2; case BPF_FUNC_map_update_elem: return 4; case BPF_FUNC_map_delete_elem: return 2; case BPF_FUNC_probe_read: return 3; case BPF_FUNC_ktime_get_ns: return 0; case BPF_FUNC_trace_printk: return 5; case BPF_FUNC_get_prandom_u32: return 0; case BPF_FUNC_get_smp_processor_id: return 0; case BPF_FUNC_get_current_pid_tgid: return 0; case BPF_FUNC_get_current_uid_gid: return 0; case BPF_FUNC_get_current_comm: return 2; case BPF_FUNC_perf_event_read: return 2; case BPF_FUNC_perf_event_output: return 5; default: return 5; } } void insn::mark_sets(bitset::set1_ref &s, bool v) const { if (is_call()) { // Return value and call-clobbered registers. for (unsigned i = BPF_REG_0; i <= BPF_REG_5; ++i) s.set(i, v); } else if (dest) s.set(dest->reg(), v); } void insn::mark_uses(bitset::set1_ref &s, bool v) const { if (is_call()) { unsigned n = off; for (unsigned i = 0; i < n; ++i) s.set(BPF_REG_1 + i, v); } else if (code == (BPF_JMP | BPF_EXIT)) s.set(BPF_REG_0, v); else { if (src0 && src0->is_reg()) s.set(src0->reg(), v); if (src1 && src1->is_reg()) s.set(src1->reg(), v); } } static const char * opcode_name(opcode op) { const char *opn; switch (op) { case BPF_LDX | BPF_MEM | BPF_B: opn = "ldxb"; break; case BPF_LDX | BPF_MEM | BPF_H: opn = "ldxh"; break; case BPF_LDX | BPF_MEM | BPF_W: opn = "ldxw"; break; case BPF_LDX | BPF_MEM | BPF_DW: opn = "ldx"; break; case BPF_STX | BPF_MEM | BPF_B: opn = "stxb"; break; case BPF_STX | BPF_MEM | BPF_H: opn = "stxh"; break; case BPF_STX | BPF_MEM | BPF_W: opn = "stxw"; break; case BPF_STX | BPF_MEM | BPF_DW: opn = "stx"; break; case BPF_ST | BPF_MEM | BPF_B: opn = "stkb"; break; case BPF_ST | BPF_MEM | BPF_H: opn = "stkh"; break; case BPF_ST | BPF_MEM | BPF_W: opn = "stkw"; break; case BPF_ST | BPF_MEM | BPF_DW: opn = "stk"; break; case BPF_ALU64 | BPF_ADD | BPF_X: opn = "addx"; break; case BPF_ALU64 | BPF_ADD | BPF_K: opn = "addk"; break; case BPF_ALU64 | BPF_SUB | BPF_X: opn = "subx"; break; case BPF_ALU64 | BPF_SUB | BPF_K: opn = "subk"; break; case BPF_ALU64 | BPF_AND | BPF_X: opn = "andx"; break; case BPF_ALU64 | BPF_AND | BPF_K: opn = "andk"; break; case BPF_ALU64 | BPF_OR | BPF_X: opn = "orx"; break; case BPF_ALU64 | BPF_OR | BPF_K: opn = "ork"; break; case BPF_ALU64 | BPF_LSH | BPF_X: opn = "lshx"; break; case BPF_ALU64 | BPF_LSH | BPF_K: opn = "lshk"; break; case BPF_ALU64 | BPF_RSH | BPF_X: opn = "rshx"; break; case BPF_ALU64 | BPF_RSH | BPF_K: opn = "rshk"; break; case BPF_ALU64 | BPF_XOR | BPF_X: opn = "xorx"; break; case BPF_ALU64 | BPF_XOR | BPF_K: opn = "xork"; break; case BPF_ALU64 | BPF_MUL | BPF_X: opn = "mulx"; break; case BPF_ALU64 | BPF_MUL | BPF_K: opn = "mulk"; break; case BPF_ALU64 | BPF_MOV | BPF_X: opn = "movx"; break; case BPF_ALU64 | BPF_MOV | BPF_K: opn = "movk"; break; case BPF_ALU64 | BPF_ARSH | BPF_X: opn = "arshx"; break; case BPF_ALU64 | BPF_ARSH | BPF_K: opn = "arshk"; break; case BPF_ALU64 | BPF_DIV | BPF_X: opn = "divx"; break; case BPF_ALU64 | BPF_DIV | BPF_K: opn = "divk"; break; case BPF_ALU64 | BPF_MOD | BPF_X: opn = "modx"; break; case BPF_ALU64 | BPF_MOD | BPF_K: opn = "modk"; break; case BPF_ALU64 | BPF_NEG: opn = "negx"; break; case BPF_ALU | BPF_MOV | BPF_X: opn = "movwx"; break; case BPF_ALU | BPF_MOV | BPF_K: opn = "movwk"; break; case BPF_LD | BPF_IMM | BPF_DW: opn = "movdk"; break; case BPF_LD_MAP: opn = "movmap"; break; case BPF_JMP | BPF_CALL: opn = "call"; break; case BPF_JMP | BPF_CALL | BPF_X: opn = "tcall"; break; case BPF_JMP | BPF_EXIT: opn = "exit"; break; case BPF_JMP | BPF_JA: opn = "jmp"; break; case BPF_JMP | BPF_JEQ | BPF_X: opn = "jeqx"; break; case BPF_JMP | BPF_JEQ | BPF_K: opn = "jeqk"; break; case BPF_JMP | BPF_JNE | BPF_X: opn = "jnex"; break; case BPF_JMP | BPF_JNE | BPF_K: opn = "jnek"; break; case BPF_JMP | BPF_JGT | BPF_X: opn = "jugtx"; break; case BPF_JMP | BPF_JGT | BPF_K: opn = "jugtk"; break; case BPF_JMP | BPF_JGE | BPF_X: opn = "jugex"; break; case BPF_JMP | BPF_JGE | BPF_K: opn = "jugek"; break; case BPF_JMP | BPF_JSGT | BPF_X: opn = "jsgtx"; break; case BPF_JMP | BPF_JSGT | BPF_K: opn = "jsgtk"; break; case BPF_JMP | BPF_JSGE | BPF_X: opn = "jsgex"; break; case BPF_JMP | BPF_JSGE | BPF_K: opn = "jsgek"; break; case BPF_JMP | BPF_JSET | BPF_X: opn = "jsetx"; break; case BPF_JMP | BPF_JSET | BPF_K: opn = "jsetk"; break; default: opn = ""; } return opn; } std::ostream & insn::print(std::ostream &o) const { #ifdef DEBUG_CODEGEN if (note != "") o << "{" << note << "} "; #endif const char *opn = opcode_name (code); switch (code) { case BPF_LDX | BPF_MEM | BPF_B: case BPF_LDX | BPF_MEM | BPF_H: case BPF_LDX | BPF_MEM | BPF_W: case BPF_LDX | BPF_MEM | BPF_DW: return o << opn << "\t" << *dest << ",[" << *src1 << showpos << off << noshowpos << "]"; case BPF_STX | BPF_MEM | BPF_B: case BPF_STX | BPF_MEM | BPF_H: case BPF_STX | BPF_MEM | BPF_W: case BPF_STX | BPF_MEM | BPF_DW: case BPF_ST | BPF_MEM | BPF_B: case BPF_ST | BPF_MEM | BPF_H: case BPF_ST | BPF_MEM | BPF_W: case BPF_ST | BPF_MEM | BPF_DW: return o << opn << "\t[" << *src0 << showpos << off << noshowpos << "]," << *src1; case BPF_ALU | BPF_MOV | BPF_X: case BPF_ALU | BPF_MOV | BPF_K: case BPF_ALU64 | BPF_MOV | BPF_X: case BPF_ALU64 | BPF_MOV | BPF_K: case BPF_LD | BPF_IMM | BPF_DW: case BPF_LD_MAP: return o << opn << "\t" << *dest << "," << *src1; case BPF_ALU64 | BPF_NEG: return o << opn << "\t" << *dest << "," << *src0; case BPF_ALU64 | BPF_ADD | BPF_X: case BPF_ALU64 | BPF_ADD | BPF_K: case BPF_ALU64 | BPF_SUB | BPF_X: case BPF_ALU64 | BPF_SUB | BPF_K: case BPF_ALU64 | BPF_AND | BPF_X: case BPF_ALU64 | BPF_AND | BPF_K: case BPF_ALU64 | BPF_OR | BPF_X: case BPF_ALU64 | BPF_OR | BPF_K: case BPF_ALU64 | BPF_LSH | BPF_X: case BPF_ALU64 | BPF_LSH | BPF_K: case BPF_ALU64 | BPF_RSH | BPF_X: case BPF_ALU64 | BPF_RSH | BPF_K: case BPF_ALU64 | BPF_XOR | BPF_X: case BPF_ALU64 | BPF_XOR | BPF_K: case BPF_ALU64 | BPF_MUL | BPF_X: case BPF_ALU64 | BPF_MUL | BPF_K: case BPF_ALU64 | BPF_ARSH | BPF_X: case BPF_ALU64 | BPF_ARSH | BPF_K: case BPF_ALU64 | BPF_DIV | BPF_X: case BPF_ALU64 | BPF_DIV | BPF_K: case BPF_ALU64 | BPF_MOD | BPF_K: case BPF_ALU64 | BPF_MOD | BPF_X: return o << opn << "\t" << *dest << "," << *src0 << "," << *src1; case BPF_JMP | BPF_CALL: case BPF_JMP | BPF_CALL | BPF_X: o << opn << "\t"; if (const char *name = bpf_function_name(src1->imm())) o << name; else o << *src1; return o << "," << off; case BPF_JMP | BPF_EXIT: case BPF_JMP | BPF_JA: return o << opn; case BPF_JMP | BPF_JEQ | BPF_X: case BPF_JMP | BPF_JEQ | BPF_K: case BPF_JMP | BPF_JNE | BPF_X: case BPF_JMP | BPF_JNE | BPF_K: case BPF_JMP | BPF_JGT | BPF_X: case BPF_JMP | BPF_JGT | BPF_K: case BPF_JMP | BPF_JGE | BPF_X: case BPF_JMP | BPF_JGE | BPF_K: case BPF_JMP | BPF_JSGT | BPF_X: case BPF_JMP | BPF_JSGT | BPF_K: case BPF_JMP | BPF_JSGE | BPF_X: case BPF_JMP | BPF_JSGE | BPF_K: case BPF_JMP | BPF_JSET | BPF_X: case BPF_JMP | BPF_JSET | BPF_K: return o << opn << "\t" << *src0 << "," << *src1; default: return o << ""; } } edge::edge(block *p, block *n) : prev(p), next(n) { n->prevs.insert (this); } edge::~edge() { next->prevs.erase (this); if (prev->taken == this) prev->taken = NULL; if (prev->fallthru == this) prev->fallthru = NULL; } void edge::redirect_next(block *n) { next->prevs.erase (this); next = n; n->prevs.insert (this); } block::block(int i) : first(NULL), last(NULL), taken(NULL), fallthru(NULL), id(i) { } block::~block() { for (insn *n, *i = first; i ; i = n) { n = i->next; delete i; } delete taken; delete fallthru; } block * block::is_forwarder() const { if (first == NULL) { if (fallthru) return fallthru->next; } else if (first == last && first->code == (BPF_JMP | BPF_JA)) return taken->next; return NULL; } void block::print(ostream &o) const { if (prevs.empty ()) o << "\t[prevs: entry]\n"; else { o << "\t[prevs:"; for (edge_set::const_iterator i = prevs.begin(); i != prevs.end(); ++i) o << ' ' << (*i)->prev->id; o << "]\n"; } o << id << ':' << endl; for (insn *i = first; i != NULL; i = i->next) o << '\t' << *i << endl; if (taken) o << "\t[taken: " << taken->next->id << "]" << endl; if (fallthru) o << "\t[fallthru: " << fallthru->next->id << "]" << endl; else if (!taken) o << "\t[end]" << endl; } insn * insn_inserter::new_insn() { insn *n = new insn; #ifdef DEBUG_CODEGEN if (!notes.empty()) n->note = notes.top(); else n->note = ""; #endif insert(n); return n; } void insn_before_inserter::insert(insn *n) { assert(i != NULL); insn *p = i->prev; i->prev = n; n->prev = p; n->next = i; if (p == NULL) b->first = n; else p->next = n; } void insn_after_inserter::insert(insn *p) { if (i == NULL) { assert(b->first == NULL && b->last == NULL); b->first = b->last = p; } else { insn *n = i->next; i->next = p; p->prev = i; p->next = n; if (n == NULL) b->last = p; else n->prev = p; } i = p; } program::program(enum bpf_target target) : target(target), hardreg_vals(MAX_BPF_REG), max_tmp_space(0), max_reg_space(0) { for (unsigned i = 0; i < MAX_BPF_REG; ++i) hardreg_vals[i] = value::mk_hardreg(i); } program::~program() { // XXX We need to suffer a memory leak here, as blocks / edges are // tightly interlinked structures, and their dtors like to invoke // functions on each other. This will need a rethink, as this is // the type of problem domain where a garbage collected runtime // shines, and most other languages don't. #if 0 for (auto i = blocks.begin (); i != blocks.end (); ++i) delete *i; for (auto i = reg_vals.begin (); i != reg_vals.end (); ++i) delete *i; for (auto i = imm_map.begin (); i != imm_map.end (); ++i) delete i->second; for (auto i = str_map.begin (); i != str_map.end (); ++i) delete i->second; #endif } block * program::new_block () { block *r = new block(blocks.size ()); blocks.push_back (r); return r; } value * program::lookup_reg(regno r) { if (r < MAX_BPF_REG) return &hardreg_vals[r]; else return reg_vals[r - MAX_BPF_REG]; } value * program::new_reg() { regno r = max_reg(); value *v = new value(value::mk_reg(r)); reg_vals.push_back(v); return v; } value * program::new_imm(int64_t i) { auto old = imm_map.find(i); if (old != imm_map.end()) return old->second; value *v = new value(value::mk_imm(i)); auto ok = imm_map.insert(std::pair(i, v)); assert(ok.second); return v; } value * program::new_str(std::string str, bool format_str) { std::unordered_map& m = str_map; if (format_str) m = format_map; auto old = m.find(str); if (old != m.end()) return old->second; value *v = new value(value::mk_str(str, format_str)); auto ok = m.insert(std::pair(str, v)); assert(ok.second); return v; } void program::mk_ld(insn_inserter &ins, int sz, value *dest, value *base, int off) { insn *i = ins.new_insn(); i->code = BPF_LDX | BPF_MEM | sz; i->off = off; i->dest = dest; i->src1 = base; } void program::mk_st(insn_inserter &ins, int sz, value *base, int off, value *src) { insn *i = ins.new_insn(); i->code = (src->is_imm() ? BPF_ST : BPF_STX) | BPF_MEM | sz; i->off = off; i->src0 = base; i->src1 = src; } void program::mk_binary(insn_inserter &ins, opcode op, value *dest, value *s0, value *s1) { if (op == BPF_SUB) { if (s0->is_imm() && s0->imm() == 0) { mk_unary(ins, BPF_NEG, dest, s1); return; } } else if (is_commutative(op) && ((s1->is_reg() && !s0->is_reg()) || dest == s1)) std::swap (s1, s0); insn *i = ins.new_insn(); i->code = BPF_ALU64 | op | (s1->is_imm() ? BPF_K : BPF_X); i->dest = dest; i->src0 = s0; i->src1 = s1; } void program::mk_unary(insn_inserter &ins, opcode op, value *dest, value *src) { assert (op == BPF_NEG); // XXX: BPF_NEG is the only unary operator so far. if (dest != src) // src is not used for BPF_NEG. BPF negates in-place. mk_mov(ins, dest, src); insn *i = ins.new_insn(); i->code = BPF_ALU64 | op; // BPF_X is not used for BPF_NEG. i->dest = dest; i->src0 = dest; // XXX: dest as an ersatz 'source'. } void program::mk_mov(insn_inserter &ins, value *dest, value *src) { if (dest == src) return; opcode code = BPF_ALU64 | BPF_MOV | BPF_X; if (src->is_imm()) { int64_t i = src->imm(); if (i == (int32_t)i) code = BPF_ALU64 | BPF_MOV | BPF_K; else if (i == (uint32_t)i) code = BPF_ALU | BPF_MOV | BPF_K; else code = BPF_LD | BPF_IMM | BPF_DW; } insn *i = ins.new_insn(); i->code = code; i->dest = dest; i->src1 = src; } void program::mk_jmp(insn_inserter &ins, block *dest) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_JA; block *b = ins.get_block(); b->taken = new edge(b, dest); } void program::mk_call(insn_inserter &ins, enum bpf_func_id id, unsigned nargs) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_CALL; i->src1 = new_imm((int)id); i->off = nargs; } void program::mk_exit(insn_inserter &ins) { insn *i = ins.new_insn(); i->code = BPF_JMP | BPF_EXIT; } void program::mk_jcond(insn_inserter &ins, condition c, value *s0, value *s1, block *t, block *f) { bool inv = false; opcode code; if (s1->is_reg() && !s0->is_reg()) { std::swap (s1, s0); switch (c) { case EQ: break; case NE: break; case TEST: break; case LT: c = GT; break; case LE: c = GE; break; case GT: c = LT; break; case GE: c = LE; break; case LTU: c = GTU; break; case LEU: c = GEU; break; case GTU: c = LTU; break; case GEU: c = LEU; break; default: abort(); } } switch (c) { case EQ: code = BPF_JEQ; break; case NE: code = BPF_JNE; break; case LE: inv = true; /* Fallthrough */ case GT: code = BPF_JSGT; break; case LT: inv = true; /* Fallthrough */ case GE: code = BPF_JSGE; break; case LEU: inv = true; /* Fallthrough */ case GTU: code = BPF_JGT; break; case LTU: inv = true; /* Fallthrough */ case GEU: code = BPF_JGE; break; case TEST: code = BPF_JSET; break; default: abort (); } if (inv) std::swap (t, f); block *b = ins.get_block(); b->taken = new edge(b, t); b->fallthru = new edge(b, f); insn *i = ins.new_insn(); i->code = BPF_JMP | code | (s1->is_imm() ? BPF_K : BPF_X); i->src0 = s0; i->src1 = s1; } void program::load_map(insn_inserter &ins, value *dest, int src) { assert (src >= 0); // PR23476: Ensure a stray stats reference doesn't slip through. insn *i = ins.new_insn(); i->code = BPF_LD_MAP; i->dest = dest; i->src1 = new_imm(src); } void program::print(ostream &o) const { for (unsigned n = blocks.size(), i = 0; i < n; ++i) { block *b = blocks[i]; if (b) o << *b << endl; } } } // namespace bpf systemtap-4.6/bpf-bitset.cxx000066400000000000000000000054361414446751200162170ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "bpf-bitset.h" namespace bpf { void throw_out_of_range(const char *where) { throw std::out_of_range(where); } namespace bitset { bool set1_const_ref::empty () const { for (size_t i = 0; i < words; ++i) if (data[i]) return false; return true; } bool set1_const_ref::operator== (const set1_const_ref &o) const { if (words != o.words) return false; for (size_t i = 0; i < words; ++i) if (data[i] != o.data[i]) return false; return true; } bool set1_const_ref::is_subset_of(const set1_const_ref &o) const { size_t n = std::min(words, o.words); for (size_t i = 0; i < n; ++i) if (data[i] & ~o.data[i]) return false; for (; n < words; ++n) if (data[n]) return false; return true; } size_t set1_const_ref::find_first() const { for (size_t i = 0; i < words; ++i) if (data[i]) return i * bits_per_word + __builtin_ctzl (data[i]); return npos; } size_t set1_const_ref::find_next(size_t last) const { size_t i = (last + 1) / bits_per_word; size_t o = (last + 1) % bits_per_word; if (__builtin_expect (i >= words, 0)) return npos; word_t w = data[i] & ((word_t)-1 << o); for (; w == 0; w = data[i]) if (++i >= words) return npos; return i * bits_per_word + __builtin_ctzl (w); } size_t set1_const_ref::find_next_zero(size_t last) const { size_t i = (last + 1) / bits_per_word; size_t o = (last + 1) % bits_per_word; if (__builtin_expect (i >= words, 0)) return npos; word_t w = ~data[i] & ((word_t)-1 << o); for (; w == 0; w = ~data[i]) if (++i >= words) return npos; return i * bits_per_word + __builtin_ctzl (w); } set1::set1(size_t bits) : set1_ref(new word_t[round_words(bits)], round_words(bits)) { memset(data, 0, words * sizeof(word_t)); } set1::set1(const set1_const_ref &o) : set1_ref(new word_t[o.words], o.words) { memcpy(data, o.data, words * sizeof(word_t)); } set1::~set1() { delete[] data; } set2::set2(size_t m1, size_t m2) : n1(m1), w2(round_words(m2)), data(new word_t[m1 * w2]) { memset(data, 0, n1 * w2 * sizeof(word_t)); } set2::set2(const set2 &o) : n1(o.n1), w2(o.w2), data(new word_t[o.n1 * o.w2]) { memcpy(data, o.data, n1 * w2 * sizeof(word_t)); } set2::~set2() { delete[] data; } std::ostream& operator<< (std::ostream &o, const set1_const_ref &s) { char sep = '{'; for (size_t n = s.size(), i = 0; i < n; ++i) if (s.test(i)) { o << sep << i; sep = ','; } if (sep == '{') o << sep; return o << '}'; } } // namespace bitset } // namespace bpf systemtap-4.6/bpf-bitset.h000066400000000000000000000131151414446751200156350ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. // This differs from std::bitset in being runtime sized, and from // boost::dynamic_bitset in being space efficient in multiple dimensions. // // ??? Could be templatized to n-dimensions. #ifndef BPF_BITSET_H #define BPF_BITSET_H #include #include #include #include #include namespace bpf { void throw_out_of_range(const char *) __attribute__((noreturn)); namespace bitset { typedef size_t word_t; static size_t const bits_per_word = sizeof(word_t) * CHAR_BIT; inline size_t round_words(size_t bits) { return (bits + bits_per_word - 1) / bits_per_word; } class bit_ref { private: word_t * const word; size_t const index; bit_ref(); // not present public: bit_ref(word_t *w, size_t i) : word(w), index(i) { } void reset() { *word &= ~((word_t)1 << index); } void set() { *word |= (word_t)1 << index; } void flip() { *word ^= (word_t)1 << index; } void set(bool v) { if (v) set(); else reset(); } bool test() const { return (*word >> index) & 1; } operator bool() const { return test(); } bool operator!() const { return !test(); } bool operator|= (bool o) { if (test()) return true; else if (o) { set(); return true; } return false; } bool operator&= (bool o) { if (test()) { if (o) return true; reset(); } return false; } bool operator-= (bool o) { if (test()) { if (!o) return true; reset(); } return false; } bool operator^= (bool o) { if (o) flip(); return test(); } }; class set1; class set1_ref; class set1_const_ref { friend class set1; friend class set1_ref; private: set1_const_ref(); // not present set1_const_ref& operator= (const set1_const_ref &); // not present protected: word_t *data; size_t words; public: static const size_t npos = -1; set1_const_ref(word_t *d, size_t w) : data(d), words(w) { } set1_const_ref(const set1_const_ref &o) : data(o.data), words(o.words) { } bool operator!= (const set1_const_ref &o) const { return !(*this == o); } size_t size() const { return words * bits_per_word; } bool test(size_t i) const { size_t w = i / bits_per_word; size_t o = i % bits_per_word; if (w >= words) throw_out_of_range("bpf::bitset::set1_ref::test"); return (data[w] >> o) & 1; } bool operator[] (size_t i) const { return test(i); } bool empty() const; bool operator== (const set1_const_ref &o) const; bool is_subset_of(const set1_const_ref &o) const; size_t find_first() const; size_t find_next(size_t i) const; size_t find_next_zero(size_t i) const; }; class set1_ref : public set1_const_ref { private: set1_ref(); // not present public: set1_ref(size_t *d, size_t w) : set1_const_ref(d, w) { } set1_ref(const set1_ref &o) : set1_const_ref(o.data, o.words) { } bit_ref operator[] (size_t i) { size_t w = i / bits_per_word; size_t o = i % bits_per_word; if (w >= words) throw_out_of_range("bpf::bitset::set1_ref::operator[]"); return bit_ref(data + w, o); } set1_ref& operator= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator="); memcpy(data, o.data, words * sizeof(*data)); return *this; } set1_ref& operator= (const set1_ref &o) { return operator=(static_cast(o)); } set1_ref& operator|= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator|="); for (size_t i = 0; i < words; ++i) data[i] |= o.data[i]; return *this; } set1_ref& operator&= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator&="); for (size_t i = 0; i < words; ++i) data[i] &= o.data[i]; return *this; } set1_ref& operator-= (const set1_const_ref &o) { if (words != o.words) throw_out_of_range("bpf::bitset::set1_ref::operator-="); for (size_t i = 0; i < words; ++i) data[i] &= ~o.data[i]; return *this; } void clear() { memset(data, 0, words * sizeof(*data)); } void reset(size_t i) { (*this)[i].reset(); } void set(size_t i) { (*this)[i].set(); } void set(size_t i, bool v) { (*this)[i].set(v); } }; class set1 : public set1_ref { private: set1(); // not present public: set1(size_t bits); set1(const set1_const_ref &o); ~set1(); }; class set2 { private: size_t n1; size_t w2; word_t *data; set2(); // not present public: set2(size_t m1, size_t m2); set2(const set2 &o); ~set2(); size_t size() const { return n1; } set2& operator= (const set2 &o) { if (n1 != o.n1 || w2 != o.w2) throw_out_of_range("bpf::bitset::set2::operator="); memcpy(data, o.data, n1 * w2 * sizeof(word_t)); return *this; } set1_ref operator[] (size_t i) { if (i >= n1) throw_out_of_range("set2::operator[]"); return set1_ref(data + w2 * i, w2); } set1_const_ref operator[] (size_t i) const { if (i >= n1) throw_out_of_range("set2::operator[]"); return set1_const_ref(data + w2 * i, w2); } void clear() { memset(data, 0, n1 * w2 * sizeof(*data)); } }; std::ostream& operator<< (std::ostream &o, const set1_const_ref &s); } // namespace bitset } // namespace bpf #endif // BPF_BITSET_H systemtap-4.6/bpf-internal.h000066400000000000000000000457741414446751200161770ustar00rootroot00000000000000// bpf internal classes // Copyright (C) 2016-2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_INTERNAL_H #define BPF_INTERNAL_H #include #include #include #include #include #include #include "bpf-bitset.h" #include "staptree.h" extern "C" { #include } /* PR23829: These eBPF opcodes were added in recent kernels, and the following 'ad hoc' defines are only used by the embedded-code assembler. The code generator will convert these opcodes to equivalent operations valid for earlier eBPF. */ #ifndef BPF_JLT #define BPF_JLT 0xa0 /* LT is unsigned, '<' */ #define BPF_JLE 0xb0 /* LE is unsigned, '<=' */ #define BPF_JSLT 0xc0 /* SLT is signed, '<' */ #define BPF_JSLE 0xd0 /* SLE is signed, '<=' */ #endif struct systemtap_session; struct derived_probe; struct vardecl; namespace bpf { // PR24528: Used to distinguish between different implementations of // the BPF virtual machine. Different implementations have different // capabilities, e.g. target_user_bpfinterp supports arbitrary loops // whereas target_kernel_bpf restricts loops. enum bpf_target { target_kernel_bpf, // in-kernel JIT interpreter, restricted target_user_bpfinterp, // userspace interpreter, relaxed }; // TODO: target_kernel_bpf may later be split into two targets, // one for older kernel versions (most restricted) // and one for newer kernel versions (with loop support & other features) // Constants for BPF code generation. // TODO: BPF_MAX{STRING,FORMAT}LEN,BPF_MAXMAPENTRIES,BPF_MAXSPRINTFLEN should be user-configurable. #define MAX_BPF_KERNEL_STACK 512 // PR24758: 64k ought to be enough for anyone #define MAX_BPF_USER_STACK 65536 #define MAX_BPF_STACK(target) (((target) == target_kernel_bpf) ? \ MAX_BPF_KERNEL_STACK : MAX_BPF_USER_STACK) #define BPF_REG_SIZE 8 #define BPF_MAXSTRINGLEN 64 #define BPF_MAXSTRINGLEN_PLUS 65 // #define BPF_MAXSTRINGLEN 128 // TODO: Longer strings require a smarter storage allocator. // #define BPF_MAXSTRINGLEN_PLUS 129 // For foreach sorting, composite map keys cannot exceed kernel stack size: #define BPF_MAXKEYLEN 512 #define BPF_MAXKEYLEN_PLUS 513 #define BPF_MAXFORMATLEN 256 #define BPF_MAXPRINTFARGS 32 // #define BPF_MAXPRINTFARGS 3 // Maximum for trace_printk() method. #define BPF_MAXSPRINTFARGS 3 // Maximum for sprintf() method. #define BPF_MAXMAPENTRIES 2048 // XXX: BPF_MAXMAPENTRIES may depend on kernel version. May need to experiment with rlimit in instantiate_maps(). // Constants for transport message layout. // TODO: Try to reduce the size (to __u32) while keeping proper alignment. #define BPF_TRANSPORT_VAL uint64_t #define BPF_TRANSPORT_ARG uint64_t // XXX: BPF_TRANSPORT_ARG is for small numerical arguments, not pe_long values. // DEPRECATED constants for foreach sorting. // Kept in the unlikely case we want to use new stapbpf to load old .bo's. // Use globals::foreach_info instead for generating new .bo's. // // XXX Helpers take at most 5 arguments from BPF code. Hence we // combine a couple arguments into one sort_flags for the // map_get_next_key pseudo-helper: #define SORT_FLAGS(sort_column, sort_direction) \ (((sort_column) << 4) | ((sort_direction) + 1)) #define GET_SORT_COLUMN(sort_flags) \ (((sort_flags) & ~0xf) >> 4) #define GET_SORT_DIRECTION(sort_flags) \ ((int64_t)((sort_flags) & 0xf) - 1) // int sort_direction; // -1: decreasing, 0: none, 1: increasing // unsigned sort_column; // 0: value, 1..N: index // Will print out bpf assembly before and after optimization: //#define DEBUG_CODEGEN // TODO: DEBUG_CODEGEN should be configured dynamically e.g. as -DDEBUG_BPF_CODEGEN typedef unsigned short regno; static const regno max_regno = BPF_MAXINSNS; static const regno noreg = -1; typedef unsigned short opcode; struct insn; // BPF itself does not provide a full set of comparison codes. // To make things easy for ourselves, emulate them. enum condition { EQ, NE, LT, LE, GT, GE, LTU, LEU, GTU, GEU, TEST }; struct value { enum value_type { UNINIT, IMM, STR, /* <- lowered to HARDREG by the optimizer */ HARDREG, TMPREG, /* <- lowered to HARDREG by the optimizer */ }; value_type type : 16; regno reg_val : 16; int64_t imm_val; std::string str_val; bool format_str; // marks format string exp_type format_type; // marks format arguments value(value_type t = UNINIT, regno r = noreg, int64_t c = 0, std::string s = "", bool format_str = false) : type(t), reg_val(r), imm_val(c), str_val(s), format_str(format_str), format_type(pe_unknown) { } static value mk_imm(int64_t i) { return value(IMM, noreg, i); } static value mk_str(std::string s, bool format_str = false) { return value(STR, noreg, 0, s, format_str); } static value mk_reg(regno r) { return value(TMPREG, r); } static value mk_hardreg(regno r) { return value(HARDREG, r); } bool is_reg() const { return type >= HARDREG; } bool is_imm() const { return type == IMM; } bool is_str() const { return type == STR; } bool is_format() const { assert(is_str()); return format_str; } regno reg() const { assert(is_reg()); return reg_val; } int64_t imm() const { assert(is_imm()); return imm_val; } std::string str() const { assert(is_str()); return str_val; } std::ostream& print(std::ostream &) const; }; inline std::ostream& operator<< (std::ostream &o, const value &v) { return v.print (o); } inline bool is_call(opcode c) { return c == (BPF_JMP | BPF_CALL); } bool is_jmp(opcode c); bool is_move(opcode c); bool is_ldst(opcode c); bool is_binary(opcode c); bool is_commutative(opcode c); void init_bpf_helper_tables(); const char *bpf_function_name (unsigned id); bpf_func_id bpf_function_id (const std::string &name); unsigned bpf_function_nargs (unsigned id); const opcode BPF_LD_MAP = BPF_LD | BPF_IMM | BPF_DW | (BPF_PSEUDO_MAP_FD << 8); // Not actual BPF helpers, but treating them as such simplifies some of the // interpreter logic. We give them IDs that shouldn't conflict with IDs of // real BPF helpers. #define __STAPBPF_FUNC_MAPPER(FN) \ FN(map_get_next_key), \ FN(sprintf), \ FN(stapbpf_stat_get), \ FN(gettimeofday_ns), \ FN(set_procfs_value), \ FN(append_procfs_value), \ FN(get_procfs_value), \ FN(str_concat), \ FN(text_str), \ FN(string_quoted), const bpf_func_id BPF_FUNC_map_get_next_key = (bpf_func_id) -1; const bpf_func_id BPF_FUNC_sprintf = (bpf_func_id) -2; const bpf_func_id BPF_FUNC_stapbpf_stat_get = (bpf_func_id) -3; const bpf_func_id BPF_FUNC_gettimeofday_ns = (bpf_func_id) -4; const bpf_func_id BPF_FUNC_get_target = (bpf_func_id) -5; const bpf_func_id BPF_FUNC_set_procfs_value = (bpf_func_id) -6; const bpf_func_id BPF_FUNC_append_procfs_value = (bpf_func_id) -7; const bpf_func_id BPF_FUNC_get_procfs_value = (bpf_func_id) -8; const bpf_func_id BPF_FUNC_str_concat = (bpf_func_id) -9; const bpf_func_id BPF_FUNC_text_str = (bpf_func_id) -10; const bpf_func_id BPF_FUNC_string_quoted = (bpf_func_id) -11; struct insn { opcode code : 16; // The usual bpf opcode unsigned id : 16; // Context-dependent unique identifier signed off : 16; // The memory offset operand value *dest; // The usual destination operand value *src0; // The destination input, pre-allocation value *src1; // The usual source register operand insn *prev, *next; // Linked list of insns in the block #ifdef DEBUG_CODEGEN std::string note; // For additional diagnostics. #endif insn(); bool is_jmp() const { return bpf::is_jmp(code); } bool is_call() const { return bpf::is_call(code); } bool is_move() const { return bpf::is_move(code); } bool is_ldst() const { return bpf::is_ldst(code); } bool is_binary() const { return bpf::is_binary(code); } bool is_commutative() const { return bpf::is_commutative(code); } void mark_sets(bitset::set1_ref &s, bool v) const; void mark_uses(bitset::set1_ref &s, bool v) const; std::ostream& print(std::ostream &o) const; }; inline std::ostream& operator<< (std::ostream &o, const insn &i) { return i.print (o); } struct block; struct edge { block *prev, *next; edge(block *p, block *n); ~edge(); void redirect_next(block *n); }; struct block { typedef std::unordered_set edge_set; edge_set prevs; // All incoming edges insn *first, *last; // Linked list of insns in the block edge *taken; // Taken (conditional or not) edge edge *fallthru; // Not taken conditional edge unsigned short id; // Index in cfg block(int); ~block(); block *is_forwarder() const; void print(std::ostream &o) const; }; inline std::ostream& operator<< (std::ostream &o, const block &b) { b.print (o); return o; } class insn_inserter { private: insn_inserter(); // not present public: block *b; insn *i; #ifdef DEBUG_CODEGEN std::stack notes; #endif insn_inserter(block *bb, insn *ii) : b(bb), i(ii) { } insn_inserter(block *bb, insn *ii, const std::string& note) : b(bb), i(ii) { #ifdef DEBUG_CODEGEN notes.push(note); #else (void)note; // unused #endif } virtual ~insn_inserter() { } virtual void insert(insn *i) = 0; insn *new_insn(); block *get_block() const { return b; } insn_inserter& operator++ () { if (i) i = i->next; return *this; } insn_inserter& operator-- () { if (i) i = i->prev; return *this; } operator bool () const { return i != NULL; } }; struct insn_before_inserter : public insn_inserter { insn_before_inserter() : insn_inserter(NULL, NULL) { } insn_before_inserter(block *b, insn *i) : insn_inserter(b,i) { } insn_before_inserter(block *b, insn *i, const std::string& note) : insn_inserter(b,i,note) { } virtual void insert(insn *i); }; struct insn_after_inserter : public insn_inserter { insn_after_inserter() : insn_inserter(NULL, NULL) { } insn_after_inserter(block *b, insn *i) : insn_inserter(b,i) { } insn_after_inserter(block *b, insn *i, const std::string& note) : insn_inserter(b,i,note) { } virtual void insert(insn *i); }; struct insn_append_inserter : public insn_after_inserter { insn_append_inserter() : insn_after_inserter(NULL, NULL) { } insn_append_inserter(block *b) : insn_after_inserter(b, NULL) { } insn_append_inserter(block *b, const std::string& note) : insn_after_inserter(b, NULL, note) { } }; struct program { enum bpf_target target; std::vector blocks; // All blocks in the program block *new_block(); std::vector hardreg_vals; std::vector reg_vals; // Store at most one of each IMM and STR value: std::unordered_map imm_map; std::unordered_map str_map; std::unordered_map format_map; regno max_reg() const { return reg_vals.size() + MAX_BPF_REG; } value *lookup_reg(regno r); value *new_reg(); value *new_imm(int64_t); value *new_str(std::string, bool format_str = false); // The BPF local stack is [0, -512] indexed off BPF_REG_10. // The translator has dibs on the low bytes, [0, -max_tmp_space], // for use with various function calls that pass data by reference. // The register allocator may use [-max_tmp_space, -512] for spills. unsigned max_tmp_space; void use_tmp_space(unsigned bytes) { if (max_tmp_space < bytes) max_tmp_space = bytes; assert(max_tmp_space <= MAX_BPF_STACK(target)); } // After register allocation, record the lowest offset actually // used for spills. Then [-max_reg_space, -512] will be // the unused portion of the stack. unsigned max_reg_space; void mk_ld(insn_inserter &ins, int sz, value *dest, value *base, int off); void mk_st(insn_inserter &ins, int sz, value *base, int off, value *src); void mk_unary(insn_inserter &ins, opcode op, value *dest, value *src); void mk_binary(insn_inserter &ins, opcode op, value *d, value *s0, value *s1); void mk_mov(insn_inserter &ins, value *dest, value *src); void mk_call(insn_inserter &ins, enum bpf_func_id id, unsigned nargs); void mk_exit(insn_inserter &ins); void mk_jmp(insn_inserter &ins, block *dest); void mk_jcond(insn_inserter &ins, condition c, value *s0, value *s1, block *t, block *f); void load_map(insn_inserter &ins, value *dest, int src); program(enum bpf_target target); ~program(); void generate(); void print(std::ostream &) const; }; // ??? Properly belongs to bpf_unparser but must be visible from bpf-opt.cxx: value *emit_simple_literal_str(program &this_prog, insn_inserter &this_ins, value *dest, int ofs, const std::string &src, bool zero_pad = false); inline std::ostream& operator<< (std::ostream &o, const program &c) { c.print (o); return o; } struct globals { // The list of BPF maps used to store global data: struct bpf_map_def { unsigned type; unsigned key_size; unsigned value_size; unsigned max_entries; unsigned map_flags; }; typedef std::vector map_vect; map_vect maps; // Used to identify a numbered bpf_map (within map_vect): using map_idx = int; // How to locate a value within the maps, based on vardecl vd: // // (1) lookup globals_map[vd] --> yields map_slot ms // (2) if ms.is_stat(), vd is an aggregate (scalar_stats, array_stats explained below) // - (s).count --> (scalar_stats['count'])[ms.this_idx][cpuid] if ms.is_scalar() // - (s[key]).count --> (array_stats[vd]['count'])[key][cpuid] otherwise // (3) otherwise, vd is a regular value // - v --> (ms.this_map)[ms.this_idx] if ms.is_scalar() // - v[key] --> (ms.this_map)[key] otherwise // // Above, v is a regular value, s is a statistical aggregate. // The indexing operations inside parens are performed at translation time, // the indexing operations outside parens are performed at runtime. // // TODOXXX PR24424: For histogram data, the indexing scheme will be: // - (s).histogram[n] --> (scalar_stats['histogram'])[ms.this_idx,n][cpuid] // Here, map[idx,n] is map[idx << shift | n] (rudimentary multi-key map). struct map_slot { map_idx map_id; // -- -1 indicates is_stat() int idx; // -- -1 indicates !is_scalar() bool is_scalar() { return idx >= 0; } bool is_stat() { return map_id < 0; } map_slot(map_idx map_id, int idx) : map_id(map_id), idx(idx) {} }; typedef std::unordered_map globals_map; globals_map globals; bool empty() { return this->globals.empty(); } // PR23476: Each statistical aggregate is represented by a percpu data structure // with fields such as count, sum, ... (see struct stat_data in runtime/stat.h). using stat_field = std::string; // XXX: could make an enum static std::vector stat_fields; // XXX: initialized in bpf-translate.cxx static stat_field stat_iter_field; // XXX: used to obtain keys for foreach, in, &c // scalar_stats, array_stats: For each stats field, create one map // for scalar aggregates, plus one map per one-dimensional array of // aggregates. typedef std::map stats_map; stats_map scalar_stats; std::unordered_map array_stats; // XXX: Used to store stats_map elements in a canonical order for serialization: typedef std::vector interned_stats_map; static interned_stats_map intern_stats_map(const stats_map &sm); static stats_map deintern_stats_map(const interned_stats_map &ism); // XXX: Used to identify stat_component_types within BPF code: static uint64_t intern_sc_type(stat_component_type sc_type) { return (uint64_t)sc_type; } static stat_component_type deintern_sc_type(uint64_t x) { return (stat_component_type)x; } // To pass stats_map information to the bpf userspace helper, // assign each stats_map a numerical 'agg_idx'. Index 0 is reserved // for scalar_stats, other stats_maps are given consecutive indices: using agg_idx = int; std::unordered_map aggregates; // The .bo ELF file will have a section (agg_idx -> interned_stats_map). // PR23478: To pass foreach iteration settings, assign each foreach loop // a numerical index into a table of these foreach_info structs. // Pass the index into the map_get_next_key userspace-only helper. struct foreach_info { // XXX replicate fields from struct foreach_loop in staptree.h int sort_direction; // -1: decreasing, 0: none, 1: increasing unsigned sort_column; // 0: value, 1..N: index // TODO PR24908: also encode s->sort_aggr // used to locate the sort column in a composite map key size_t keysize; size_t sort_column_size; // 0: sort_column is value int sort_column_ofs; // -1: key is scalar long or str }; std::vector foreach_loop_info; /// XXX Used to store loop_info structs for serialization: typedef std::vector interned_foreach_info; static const size_t n_foreach_info_fields = 5; static interned_foreach_info intern_foreach_info(const foreach_info &fi); static foreach_info deintern_foreach_info(const interned_foreach_info &ifi); using loop_idx = int; // XXX: Not actually used in any tables. // The .bo ELF file will have a section (loop_idx -> interned_loop_info). // Index into globals. This element represents the map of internal globals // used for sharing data between stapbpf and kernel-side bpf programs. static const map_idx internal_map_idx = 0; // Indicates whether exit() has been called from within a bpf program. struct vardecl internal_exit; struct vardecl internal_errors; // Indexes into the bpf map of internal globals. enum internal_global_idx { EXIT = 0, ERRORS, // Tracks the total number of errors. NUM_INTERNALS, // non-ABI }; // PR22330: Index into globals. This element represents the // perf_event_map used to send messages from kernel-side bpf // programs to stapbpf. static const map_idx perf_event_map_idx = 1; // XXX: The number of elements for the perf_event_map is not known // at translation time and must be determined by the stapbpf loader: static const int NUM_CPUS_PLACEHOLDER = 0; // Types of transport messages supported: enum perf_event_type { STP_EXIT = 0, STP_ERROR, STP_STORE_ERROR_MSG, STP_PRINT_ERROR_MSG, STP_PRINTF_START, STP_PRINTF_END, STP_PRINTF_FORMAT, STP_PRINTF_ARG_LONG, STP_PRINTF_ARG_STR, // TODO PR23476: Yet more messages to request things such as histogram printing. }; // Converts a string to an index usable in STP_PRINTF_FORMAT messages: int intern_string(std::string& str); // Interned strings by index: std::vector interned_strings; // The set of already interned strings: std::map interned_str_map; // XXX: Hacky, used to resolve function symbols in embedded code: systemtap_session *session; }; } // namespace bpf #endif // BPF_INTERNAL_H systemtap-4.6/bpf-opt.cxx000066400000000000000000000637101414446751200155260ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2020 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "staptree.h" #include "session.h" #include #include #include "bpf-internal.h" #include "bpf-bitset.h" namespace bpf { // Allocate space on the stack and store a string literal in that space: static value * alloc_literal_str(program &p, insn_inserter &ins, value *s) { std::string str = s->str(); size_t str_bytes = str.size() + 1; str_bytes += 4 - str_bytes % 4; // write aligned words to avoid garbage data int ofs; size_t tmp_space; if (s->is_format() && str_bytes <= BPF_MAXSTRINGLEN * 2) { // PR23068 workaround mitigation to reduce stack pressure: // // Store format strings in the top of the stack, since at most // one printf() operation is prepared at a time and other string // values will not be stored in that area now. ofs = -str_bytes; goto write_string; } // Append the string to existing temporary data. // // TODO: This could produce significant space limitations. // A better solution would be to integrate with the // register allocator and reclaim the space after // the string literal is no longer live. tmp_space = p.max_tmp_space; tmp_space += 4 - tmp_space % 4; // write aligned words to avoid verifier error p.use_tmp_space(tmp_space); if (tmp_space + str_bytes > MAX_BPF_STACK(p.target)) throw std::runtime_error("string allocation failed due to lack of room on stack"); tmp_space += str_bytes; #if 1 // The following aren't ideal because an unlucky ordering of // allocation requests will waste additional space. // XXX PR23860: Passing a short (non-padded) string constant can fail // the verifier, which is not smart enough to determine that accesses // past the end of the string will never occur. To fix this, make sure // the string offset is at least -BPF_MAXSTRINGLEN. //if (!s->is_format() && tmp_space < BPF_MAXSTRINGLEN) // tmp_space = BPF_MAXSTRINGLEN; // TODO PR23860: An even uglier workaround for emit_string_copy() // overlapping source and destination regions. Only do this for // non-format strings, as format strings are not manipulated by the // eBPF program. if (!s->is_format() && tmp_space < BPF_MAXSTRINGLEN * 2 + str_bytes) tmp_space = BPF_MAXSTRINGLEN * 2 + str_bytes; #endif p.use_tmp_space(tmp_space); ofs = -tmp_space; write_string: value *frame = p.lookup_reg(BPF_REG_10); value *out = emit_simple_literal_str(p, ins, frame, ofs, str, false /* don't zero pad */); return out; } static void lower_str_values(program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->first; j != NULL; j = j->next) { value *s0 = j->src0; if (s0 && s0->is_str()) { insn_before_inserter ins(b, j, "str"); std::string str0 = s0->str(); value *new_s0 = alloc_literal_str(p, ins, s0); j->src0 = new_s0; } value *s1 = j->src1; if (s1 && s1->is_str()) { insn_before_inserter ins(b, j, "str"); std::string str1 = s1->str(); value *new_s1 = alloc_literal_str(p, ins, s1); j->src1 = new_s1; } } } } static void fixup_operands(program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->first; j != NULL; j = j->next) { // Any plain move is already handled. if (j->is_move()) continue; // The second source cannot handle 64-bit integers. value *s1 = j->src1; if (s1 && s1->is_imm() && s1->imm() != (int32_t)s1->imm()) { value *n = p.new_reg(); insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s1); j->src1 = s1 = n; // Since the content is in the src register, we need // to use BPF_STX instead of BPF_ST j->code = BPF_STX | BPF_MEM | BPF_W; } if (value *s0 = j->src0) { if (value *d = j->dest) { // Binary operators must have dest == src0. if (d == s0) ; else if (d == s1) { if (j->is_commutative()) { j->src0 = s1; j->src1 = s0; } else { // Special care for x = y - x value *n = p.new_reg(); { insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s0); } j->src0 = n; j->dest = n; { insn_after_inserter ins(b, j, "opt"); p.mk_mov(ins, d, n); } } } else { // Transform { x = y - z } to { x = y; x -= z; } insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, d, s0); j->src0 = d; } } else if (s0->is_imm()) { // Comparisons can't have src0 constant. value *n = p.new_reg(); insn_before_inserter ins(b, j, "opt"); p.mk_mov(ins, n, s0); j->src0 = n; } } } } } static void thread_jumps(program &p) { const unsigned nblocks = p.blocks.size (); std::vector fwds(nblocks); // Identify blocks that do nothing except jump to another block. for (unsigned i = 0; i < nblocks; ++i) fwds[i] = p.blocks[i]->is_forwarder (); // Propagate chains of forwarder blocks. { bool changed; do { changed = false; for (unsigned i = 0; i < nblocks; ++i) if (block *fi = fwds[i]) { unsigned j = fi->id; if (block *fj = fwds[j]) { if (i != j) { fwds[i] = fj; changed = true; } } } } while (changed); } // Perform jump threading. for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; if (edge *e = b->taken) { if (block *n = fwds[e->next->id]) e->redirect_next (n); } if (edge *e = b->fallthru) { if (block *n = fwds[e->next->id]) e->redirect_next (n); } } } static void fold_jumps(program &p) { const unsigned nblocks = p.blocks.size (); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; if (b->taken && b->fallthru && b->taken->next == b->fallthru->next) { insn *l = b->last; assert (BPF_CLASS (l->code) == BPF_JMP); l->code = BPF_JMP | BPF_JA; delete b->fallthru; } } } static void reorder_blocks(program &p) { unsigned nblocks = p.blocks.size (); std::vector visited(nblocks); std::vector ordered; std::vector worklist; // Begin with the entry block. worklist.push_back(p.blocks[0]); // Iterate until all blocks placed. while (!worklist.empty()) { block *b = worklist.back (); worklist.pop_back (); // Don't place a block twice, we're not duplicating paths. if (visited[b->id]) continue; // Place this block now. ordered.push_back (b); visited[b->id] = true; edge *t = b->taken; edge *f = b->fallthru; // Look for an IF-THEN triangle where the IF condition might // do well to be reversed. We could find larger subgraphs with // postdominators, but since we can't reverse all jumps, it's // probably not worth it. Also look for cases where the taken // edge has not been placed, but the fallthru has. if (t && f && ((t->next->fallthru && t->next->fallthru->next == f->next) || (visited[f->next->id] && !visited[t->next->id]))) switch (b->last->code) { case BPF_JMP | BPF_JEQ | BPF_X: case BPF_JMP | BPF_JEQ | BPF_K: case BPF_JMP | BPF_JNE | BPF_X: case BPF_JMP | BPF_JNE | BPF_K: b->last->code ^= BPF_JEQ ^ BPF_JNE; std::swap (t, f); b->taken = t; b->fallthru = f; break; } // Plase the two subsequent blocks. // Note the LIFO nature of the worklist and place fallthru second. if (t) { block *o = t->next; if (!visited[o->id]) worklist.push_back (o); } if (f) { block *o = f->next; if (visited[o->id]) { // The fallthru has been placed. This means that we // require an extra jump, and possibly a new block in // which to hold it. if (t) { block *n = p.new_block (); insn_append_inserter ins(n, "opt"); p.mk_jmp (ins, o); ordered.push_back (n); f->redirect_next (n); } else { delete f; insn_after_inserter ins(b, b->last, "opt"); p.mk_jmp (ins, o); } } else worklist.push_back (o); } } // Remove any unreachable blocks. for (unsigned i = 0; i < nblocks; ++i) if (!visited[i]) { // XXX: Before any of the unreachable blocks are deleted, // any edges between other blocks that lead to the current // block are set as nullptr. This eliminates access to the // deleted blocks. for (edge *e: p.blocks[i]->prevs) { if (e == e->prev->fallthru) e->prev->fallthru = nullptr; else if (e == e->prev->taken) e->prev->taken = nullptr; } delete p.blocks[i]; p.blocks[i] = nullptr; } // Renumber the blocks for the new ordering. nblocks = ordered.size (); for (unsigned i = 0; i < nblocks; ++i) { block *b = ordered[i]; b->id = i; } p.blocks = ordered; } struct interference_graph { // ??? Quadratic size for a sparsely populated set. However, for small // sizes (less than hundreds of registers) this is probably more time // and space efficient than std::set>. bitset::set2 data; interference_graph(size_t n) : data(n, n) { } bool test(unsigned a, unsigned b) const { return data[a].test(b); } void add(unsigned a, unsigned b) { data[a].set(b); data[b].set(a); } void merge(unsigned a, unsigned b) { data[a] |= data[b]; data[b] = data[a]; } }; struct copy_graph { struct entry { unsigned short count; regno i, j; entry(regno ii, regno jj) : count(0), i(ii), j(jj) { } bool operator< (const entry &o) const { return (count < o.count || (count == o.count && (i < o.i || (i == o.i && j < o.j)))); } }; std::vector data; std::unordered_map map; void add(regno i, regno j); void sort(); }; void copy_graph::add(regno i, regno j) { if (i == j) return; if (i > j) std::swap(i, j); uint32_t ij = (uint32_t)i << 16 | j; uint32_t k; auto iter = map.find(ij); if (iter == map.end()) { k = data.size(); data.push_back(entry(i, j)); auto ok = map.insert(std::pair(ij, k)); assert(ok.second); } else k = iter->second; data[k].count += 1; } void copy_graph::sort() { map.clear(); std::sort(data.begin(), data.end()); } struct life_data { bitset::set2 live_in; bitset::set2 live_out; bitset::set2 used; bitset::set2 killed; bitset::set1 cross_call; std::vector uses; unsigned short npartitions; life_data(size_t nblocks, size_t nregs); }; life_data::life_data(size_t nblocks, size_t nregs) : live_in(nblocks, nregs), live_out(nblocks, nregs), used(nblocks, nregs), killed(nblocks, nregs), cross_call(nregs), uses(nregs) { } static void find_lifetimes (life_data &d, program &p) { const unsigned nblocks = p.blocks.size(); const unsigned nregs = p.max_reg(); // Collect initial lifetime d from the blocks. for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; bitset::set1_ref killed = d.killed[i]; bitset::set1_ref used = d.used[i]; for (insn *j = b->last; j != NULL; j = j->prev) { // Every regno that is set in a block is part of killed. j->mark_sets(killed, 1); // Remove sets from used before adding the uses. j->mark_sets(used, 0); j->mark_uses(used, 1); } d.live_in[i] = used; } // Propagate lifetime d around blocks. We could reduce iteration // by processing the blocks in post-dominator order. But the program // sizes we must have (because of bpf restrictions) are is too small // to worry about more than simple reverse order. bool changed; bitset::set1 tmp(nregs); do { changed = false; for (unsigned i = nblocks; i-- > 0; ) { block *b = p.blocks[i]; if (b->taken) { tmp = d.live_in[b->taken->next->id]; if (b->fallthru) tmp |= d.live_in[b->fallthru->next->id]; } else if (b->fallthru) tmp = d.live_in[b->fallthru->next->id]; else tmp.clear(); d.live_out[i] = tmp; tmp -= d.killed[i]; tmp |= d.used[i]; // Note that in order to ensure termination we must accumulate // into live_in rather than assigning to it. if (!tmp.is_subset_of (d.live_in[i])) { changed = true; d.live_in[i] |= tmp; } } } while (changed); } static void find_block_cgraph (copy_graph &cgraph, block *b) { for (insn *j = b->last; j != NULL; j = j->prev) { if (j->is_move() && j->src1->is_reg()) cgraph.add(j->dest->reg(), j->src1->reg()); else if (j->is_binary() && j->src0->is_reg()) cgraph.add(j->dest->reg(), j->src0->reg()); } } static void find_cgraph (copy_graph &cgraph, const program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) find_block_cgraph (cgraph, p.blocks[i]); } static void find_block_uses (std::vector &uses, block *b) { for (insn *j = b->last; j != NULL; j = j->prev) { if (j->src0 && j->src0->is_reg()) ++uses[j->src0->reg()]; if (j->src1 && j->src1->is_reg()) ++uses[j->src1->reg()]; } } static void find_uses (std::vector &uses, const program &p) { const unsigned nblocks = p.blocks.size(); for (unsigned i = 0; i < nblocks; ++i) find_block_uses (uses, p.blocks[i]); } static void find_block_igraph (interference_graph &igraph, bitset::set1_ref &cross_call, block *b, bitset::set1_ref &live) { for (insn *j = b->last; j != NULL; j = j->prev) { // Remove sets from used before adding the uses. j->mark_sets(live, 0); if (j->is_call()) cross_call |= live; j->mark_uses(live, 1); // We use another bitset to include the variables that are // defined at this instruction in the interference. bitset::set1 interference = live; if (!j->is_call()) j->mark_sets(interference, 1); // Record interference between two simultaneously live registers. for (size_t r1 = interference.find_first(); r1 != bitset::set1_ref::npos; r1 = interference.find_next (r1)) for (size_t r2 = interference.find_next(r1); r2 != bitset::set1_ref::npos; r2 = interference.find_next (r2)) igraph.add(r1, r2); } } static void find_igraph (interference_graph &igraph, life_data &d, program &p) { const unsigned nblocks = p.blocks.size(); const unsigned nregs = p.max_reg(); bitset::set1 tmp(nregs); for (unsigned i = 0; i < nblocks; ++i) { tmp = d.live_out[i]; find_block_igraph (igraph, d.cross_call, p.blocks[i], tmp); } } struct pref_sort_reg { const life_data &d; pref_sort_reg(const life_data &dd) : d(dd) { } bool cmp(regno a, regno b) const; bool operator()(const regno &a, const regno &b) const { return cmp(a, b); } }; bool pref_sort_reg::cmp(regno a, regno b) const { // Prefer registers that cross calls first. int diff = d.cross_call.test(a) - d.cross_call.test(b); if (diff != 0) return diff > 0; // Prefer registers with more uses. diff = d.uses[a] - d.uses[b]; if (diff != 0) return diff > 0; // Finally, make the sort stable by comparing regnos. return a < b; } static void merge_copies(std::vector &partition, life_data &life, interference_graph &igraph, program &p) { copy_graph cgraph; find_cgraph(cgraph, p); cgraph.sort(); unsigned ncopies = cgraph.data.size(); for (unsigned i = 0; i < ncopies; ++i) { const copy_graph::entry &c = cgraph.data[i]; unsigned r1 = partition[c.i]; unsigned r2 = c.j; if (r2 >= MAX_BPF_REG && partition[r2] == r2 && !igraph.test(r1, r2) && (r1 >= BPF_REG_6 || !life.cross_call.test(r2))) { partition[r2] = r1; igraph.merge(r1, r2); life.cross_call[r1] |= life.cross_call[r2]; } } } static void merge(std::vector &partition, std::vector &ordered, life_data &life, interference_graph &igraph, program &p) { unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { unsigned r1 = ordered[i - MAX_BPF_REG]; if (partition[r1] != r1) continue; for (unsigned j = i + 1; j < nregs; ++j) { unsigned r2 = ordered[j - MAX_BPF_REG]; if (partition[r2] == r2) { bool interferes = false; // check for interference between r1, r2 and any // registers already merged with either r1 or r2. for (unsigned k = MAX_BPF_REG; k < nregs; ++k) { unsigned r3 = ordered[k - MAX_BPF_REG]; if ((partition[r3] == r1 && igraph.test(r2, r3)) || (partition[r3] == r2 && igraph.test(r1, r3))) { interferes = true; break; } } if (!interferes) { partition[r2] = r1; igraph.merge(r1, r2); life.cross_call[r1] |= life.cross_call[r2]; } } } } } static unsigned allocate(std::vector &partition, std::vector &ordered, life_data &life, interference_graph &igraph, program &p) { // return 0 if allocation succeeds, otherwise return the first // temporary that cannot be allocated. unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { unsigned r2 = ordered[i - MAX_BPF_REG]; // Propagate partition info from previous allocations. if (partition[r2] != r2) continue; unsigned first; if (life.cross_call.test(r2)) first = BPF_REG_6; else first = BPF_REG_0; for (unsigned r1 = first; r1 < BPF_REG_10; ++r1) { bool interferes = false; // check for interference between r1, r2 and any // registers already merged with either r1 or r2. for (unsigned k = MAX_BPF_REG; k < nregs; ++k) { unsigned r3 = ordered[k - MAX_BPF_REG]; if ((partition[r3] == r1 && igraph.test(r2, r3)) || (partition[r3] == r2 && igraph.test(r1, r3))) { interferes = true; break; } } if (!interferes) { partition[r2] = r1; igraph.merge(r1, r2); goto done; } } // We didn't find a color for r2. return r2; done: ; } return 0; } static unsigned choose_spill_reg(unsigned tmpreg, std::vector &ordered, std::vector spilled) { unsigned ret = 0; // Choose the lowest priority reg that has been allocated but not spilled. // tmpreg is the first element in ordered that hasn't been allocated. for (unsigned i = 0; i < ordered.size() && ordered[i] != tmpreg; ++i) { unsigned reg = ordered[i]; if (!spilled[reg]) ret = reg; } if (!ret) throw std::runtime_error(_("unable to register allocate")); spilled[ret] = true; return ret; } static void spill(unsigned reg, unsigned num_spills, program &p) { unsigned nblocks = p.blocks.size(); value *frame = p.lookup_reg(BPF_REG_10); // Reserve reg's stack offset. int off = BPF_REG_SIZE * (num_spills + 1) + p.max_tmp_space; if (off > (int)p.max_reg_space) p.max_reg_space = (unsigned)off; // Ensure double word alignment. if (off % BPF_REG_SIZE) off += BPF_REG_SIZE - off % BPF_REG_SIZE; if (off > MAX_BPF_STACK(p.target)) throw std::runtime_error( _("register allocation failed due to insufficent BPF stack size")); for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *j = b->last; j != NULL; j = j->prev) { value *src0 = j->src0; value *src1 = j->src1; value *dest = j->dest; value *new_tmp = NULL; // If reg is a source, insert a load before j if ((src0 && src0->reg_val == reg) || (src1 && src1->reg_val == reg)) { insn_before_inserter ins(b, j, "regalloc"); new_tmp = p.new_reg(); p.mk_ld (ins, BPF_DW, new_tmp, frame, -off); // Replace reg with new_tmp if (src0 && src0->reg_val == reg) j->src0 = new_tmp; if (src1 && src1->reg_val == reg) j->src1 = new_tmp; } // If reg is the destination, insert a store after j if (dest && dest->reg_val == reg) { insn_after_inserter ins(b, j, "regalloc"); new_tmp = new_tmp ?: p.new_reg(); p.mk_st (ins, BPF_DW, frame, -off, new_tmp); j->dest = new_tmp; } } } return; } static void finalize_allocation(std::vector &partition, program &p) { unsigned nregs = p.max_reg(); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) { value *v = p.lookup_reg(i); // Hard registers are partition[i] == i, // and while other partition members should require // no more than three dereferences to yield a hard reg, // we allow for up to ten dereferences. unsigned r = partition[i]; for (int j = 0; r >= MAX_BPF_REG && j < 10; j++) r = partition[r]; assert(r < MAX_BPF_REG); v->reg_val = r; } } static void reg_alloc(program &p) { bool done = false; const unsigned nblocks = p.blocks.size(); std::vector spilled(p.max_reg()); for (unsigned num_spills = 0; !done; ++num_spills) { const unsigned nregs = p.max_reg(); life_data life(nblocks, nregs); find_lifetimes(life, p); find_uses(life.uses, p); std::vector partition(nregs); // Initially, all registers are in their own partition. for (unsigned i = 0; i < nregs; ++i) partition[i] = i; // Compute the interference of all registers. interference_graph igraph(nregs); find_igraph (igraph, life, p); // Merge non-conflicting partitions between copies first. merge_copies(partition, life, igraph, p); // Merge all other non-conflicting registers next. std::vector ordered(nregs - MAX_BPF_REG); for (unsigned i = MAX_BPF_REG; i < nregs; ++i) ordered[i - MAX_BPF_REG] = i; merge(partition, ordered, life, igraph, p); // XXX: Consider using C++14 lambda. pref_sort_reg sort_obj(life); std::sort(ordered.begin(), ordered.end(), sort_obj); // Perform a simplistic register allocation by merging TMPREG // partitions with HARDREG "partitions". unsigned reg = allocate(partition, ordered, life, igraph, p); if (reg) { // reg could not be allocated. Spill the lowest priority // temporary that has already been allocated. reg = choose_spill_reg(reg, ordered, spilled); spill(reg, num_spills, p); // Add new temporaries to spilled. for (unsigned i = nregs; i < p.max_reg(); ++i) spilled.push_back(true); spilled[reg] = true; } else { // Write partition data to the TMPREG value structures. finalize_allocation(partition, p); done = true; } } } static void post_alloc_cleanup (program &p) { const unsigned nblocks = p.blocks.size(); unsigned id = 0; for (unsigned i = 0; i < nblocks; ++i) { block *b = p.blocks[i]; for (insn *n, *j = b->first; j != NULL; j = n) { n = j->next; if (j->is_move() && j->src1->is_reg() && j->dest->reg() == j->src1->reg()) { // Delete no-op moves created by partition merging. insn *p = j->prev; if (p) p->next = n; else b->first = n; if (n) n->prev = p; else b->last = p; } else { j->id = id; // 64-bit immediates take two op slots. id += ((j->code & 0xff) == (BPF_LD | BPF_IMM | BPF_DW) ? 2 : 1); } } } } // XXX PR23860: Passing a short (non-padded) string constant can fail // the verifier, which is not smart enough to determine that accesses // past the end of the string will never occur. To fix this, start the // program with some code to zero out the temporary stack space. void zero_stack(program &p) { block *entry_block = p.blocks[0]; insn_before_inserter ins(entry_block, entry_block->first, "zero_stack"); value *frame = p.lookup_reg(BPF_REG_10); for (int32_t ofs = -(int32_t)p.max_tmp_space; ofs < 0; ofs += 4) p.mk_st(ins, BPF_W, frame, (int32_t)ofs, p.new_imm(0)); } // XXX: Also zero the spilled registers that are loaded but not saved. // This is a degenerate case but it happens on some programs with the // current register allocator: void zero_spilled(program &p) { block *entry_block = p.blocks[0]; insn_before_inserter ins(entry_block, entry_block->first, "zero_spilled"); value *frame = p.lookup_reg(BPF_REG_10); for (int32_t ofs = -(int32_t)p.max_reg_space; ofs < -(int32_t)p.max_tmp_space; ofs += 4) p.mk_st(ins, BPF_W, frame, (int32_t)ofs, p.new_imm(0)); } void program::generate() { #ifdef DEBUG_CODEGEN std::cerr << "DEBUG BEFORE OPT " << *this << std::endl; #endif lower_str_values(*this); zero_stack(*this); fixup_operands(*this); thread_jumps(*this); fold_jumps(*this); reorder_blocks(*this); reg_alloc(*this); zero_spilled(*this); post_alloc_cleanup(*this); #ifdef DEBUG_CODEGEN std::cerr << "DEBUG AFTER OPT " << *this << std::endl; #endif } } // namespace bpf systemtap-4.6/bpf-shared-globals.h000066400000000000000000000045361414446751200172410ustar00rootroot00000000000000// bpf globals functionality shared between translator and stapbpf // Copyright (C) 2016-2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_SHARED_GLOBALS_H #define BPF_SHARED_GLOBALS_H namespace bpf { // PR23476 List of percpu stat fields (see struct stat_data in runtime/stat.h). std::vector globals::stat_fields { "count", "sum", // for @count(), @sum(), @avg() // TODO: also "shift" // TODO: "min", "max", // for @min(), @max() // TODO: "avg_s", "_M2", "variance", "variance_s", // for @variance() // TODO: "histogram", // PR24424 for @hist_linear(), @hist_log() }; // XXX Use the map for this field when iterating keys or testing inclusion: std::string globals::stat_iter_field = "count"; globals::interned_stats_map globals::intern_stats_map(const globals::stats_map &sm) { globals::interned_stats_map ism; for (globals::stat_field sf : globals::stat_fields) { auto it = sm.find(sf); assert (it != sm.end()); ism.push_back(it->second); } return ism; } globals::stats_map globals::deintern_stats_map(const globals::interned_stats_map &ism) { globals::stats_map sm; for (unsigned i = 0; i < std::min(ism.size(), globals::stat_fields.size()); i++) { globals::stat_field sf = globals::stat_fields[i]; globals::map_idx map_id = ism[i]; sm[sf] = map_id; } return sm; } globals::interned_foreach_info globals::intern_foreach_info(const globals::foreach_info &fi) { globals::interned_foreach_info ifi{ (uint64_t)fi.sort_direction, (uint64_t)fi.sort_column, (uint64_t)fi.keysize, (uint64_t)fi.sort_column_size, (uint64_t)fi.sort_column_ofs, }; return ifi; } globals::foreach_info globals::deintern_foreach_info(const globals::interned_foreach_info &ifi) { assert(ifi.size() == globals::n_foreach_info_fields); // XXX could handle older versions depending on ifi.size() // eventually we'll need a magic string for .bo versioning globals::foreach_info fi; fi.sort_direction = (int)ifi[0]; fi.sort_column = (unsigned)ifi[1]; fi.keysize = (size_t)ifi[2]; fi.sort_column_size = (size_t)ifi[3]; fi.sort_column_ofs = (int)ifi[4]; return fi; } }; #endif systemtap-4.6/bpf-translate.cxx000066400000000000000000005111131414446751200167140ustar00rootroot00000000000000// bpf translation pass // Copyright (C) 2016-2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "bpf-internal.h" #include "parse.h" #include "staptree.h" #include "elaborate.h" #include "session.h" #include "translator-output.h" #include "tapsets.h" #include #include #include #include #include extern "C" { #include /* Unfortunately strtab manipulation functions were only officially added to elfutils libdw in 0.167. Before that there were internal unsupported ebl variants. While libebl.h isn't supported we'll try to use it anyway if the elfutils we build against is too old. */ #include #if _ELFUTILS_PREREQ (0, 167) #include typedef Dwelf_Strent Stap_Strent; typedef Dwelf_Strtab Stap_Strtab; #define stap_strtab_init dwelf_strtab_init #define stap_strtab_add(X,Y) dwelf_strtab_add(X,Y) #define stap_strtab_free dwelf_strtab_free #define stap_strtab_finalize dwelf_strtab_finalize #define stap_strent_offset dwelf_strent_off #else #include typedef Ebl_Strent Stap_Strent; typedef Ebl_Strtab Stap_Strtab; #define stap_strtab_init ebl_strtabinit #define stap_strtab_add(X,Y) ebl_strtabadd(X,Y,0) #define stap_strtab_free ebl_strtabfree #define stap_strtab_finalize ebl_strtabfinalize #define stap_strent_offset ebl_strtaboffset #endif #include #include } // XXX: Required static data and methods from bpf::globals, shared with stapbpf. #include "bpf-shared-globals.h" #ifndef EM_BPF #define EM_BPF 0xeb9f #endif #ifndef R_BPF_MAP_FD #define R_BPF_MAP_FD 1 #endif std::string module_name; namespace bpf { struct side_effects_visitor : public expression_visitor { bool side_effects; side_effects_visitor() : side_effects(false) { } void visit_expression(expression *) { } void visit_pre_crement(pre_crement *) { side_effects = true; } void visit_post_crement(post_crement *) { side_effects = true; } void visit_assignment (assignment *) { side_effects = true; } void visit_functioncall (functioncall *) { side_effects = true; } void visit_print_format (print_format *) { side_effects = true; } void visit_stat_op (stat_op *) { side_effects = true; } void visit_hist_op (hist_op *) { side_effects = true; } }; struct init_block : public ::block { // This block contains statements that initialize global variables // with default values. It should be visited first among any // begin probe bodies. Note that initialization of internal globals // (ex. the exit status) is handled by the stapbpf runtime. init_block(globals &glob); ~init_block(); bool empty() { return this->statements.empty(); } }; init_block::init_block(globals &glob) { for (auto i = glob.globals.begin(); i != glob.globals.end(); ++i) { struct vardecl *v = i->first; if (v->init && v->type == pe_long) { struct literal_number *num = static_cast(v->init); struct symbol *sym = new symbol; struct assignment *asgn = new assignment; struct expr_statement *stmt = new expr_statement; sym->referent = v; asgn->type = pe_long; asgn->op = "="; asgn->left = sym; asgn->right = num; stmt->value = asgn; this->statements.push_back(stmt); } } } init_block::~init_block() { for (auto i = this->statements.begin(); i != this->statements.end(); ++i) { struct expr_statement *stmt = static_cast(*i); struct assignment *asgn = static_cast(stmt->value); struct symbol *sym = static_cast(asgn->left); // referent and right are not owned by this. sym->referent = NULL; asgn->right = NULL; delete sym; delete asgn; delete stmt; } } static bool has_side_effects (expression *e) { side_effects_visitor t; e->visit (&t); return t.side_effects; } /* forward declarations */ struct asm_stmt; struct bpf_unparser : public throwing_visitor { // The visitor class isn't as helpful as it might be. As a consequence, // the RESULT member is set after visiting any expression type. Use the // emit_expr helper to return the result properly. value *result; // The program into which we are emitting code. program &this_prog; globals &glob; value *this_in_arg0 = NULL; // The "current" block into which we are currently emitting code. insn_append_inserter this_ins; void set_block(block *b) { this_ins.b = b; this_ins.i = b->last; } void clear_block() { this_ins.b = NULL; this_ins.i = NULL; } bool in_block() const { return this_ins.b != NULL; } // Destinations for "break", "continue", and "return" respectively. std::vector loop_break; std::vector loop_cont; std::vector func_return; std::vector func_return_val; std::vector func_calls; // Used to track errors. value *error_status; // Used to switch execution of program to catch blocks. std::vector catch_jump; std::vector catch_msg; // Contains the mapping for resource constraints set by -D. std::map constraints; // Local variable declarations. typedef std::unordered_map locals_map; locals_map *this_locals; // Return 0. block *ret0_block; block *exit_block; block *get_ret0_block(); block *get_exit_block(); // TODO General triage of bpf-possible functionality: virtual void visit_embeddedcode (embeddedcode *s); virtual void visit_try_block (try_block* s); virtual void visit_block (::block *s); virtual void visit_null_statement (null_statement *s); virtual void visit_expr_statement (expr_statement *s); virtual void visit_if_statement (if_statement* s); virtual void visit_for_loop (for_loop* s); virtual void visit_foreach_loop (foreach_loop* s); virtual void visit_return_statement (return_statement* s); virtual void visit_delete_statement (delete_statement* s); virtual void visit_next_statement (next_statement* s); virtual void visit_break_statement (break_statement* s); virtual void visit_continue_statement (continue_statement* s); virtual void visit_literal_string (literal_string *e); virtual void visit_literal_number (literal_number* e); // TODO visit_embedded_expr -> UNHANDLED, could treat as embedded_code virtual void visit_binary_expression (binary_expression* e); virtual void visit_unary_expression (unary_expression* e); virtual void visit_pre_crement (pre_crement* e); virtual void visit_post_crement (post_crement* e); virtual void visit_logical_or_expr (logical_or_expr* e); virtual void visit_logical_and_expr (logical_and_expr* e); virtual void visit_array_in (array_in* e); // ??? visit_regex_query -> UNHANDLED, requires new kernel functionality virtual void visit_compound_expression (compound_expression *e); virtual void visit_comparison (comparison* e); // TODO visit_concatenation for kernel probes -> (2) pseudo-LOOP: copy the // strings while concatenating virtual void visit_concatenation (concatenation* e); virtual void visit_ternary_expression (ternary_expression* e); virtual void visit_assignment (assignment* e); virtual void visit_symbol (symbol* e); virtual void visit_target_register (target_register* e); virtual void visit_target_deref (target_deref* e); // visit_target_bitfield -> ?? should already be handled in earlier pass? // visit_target_symbol -> ?? should already be handled in earlier pass virtual void visit_arrayindex (arrayindex *e); virtual void visit_functioncall (functioncall* e); virtual void visit_print_format (print_format* e); virtual void visit_stat_op (stat_op* e); virtual void visit_hist_op (hist_op* e); // visit_atvar_op -> ?? should already be handled in earlier pass // visit_cast_op -> ?? should already be handled in earlier pass // visit_autocast_op -> ?? should already be handled in earlier pass // visit_defined_op -> ?? should already be handled in earlier pass // visit_entry_op -> ?? should already be handled in earlier pass // visit_perf_op -> ?? should already be handled in earlier pass // TODO: Other bpf functionality to take advantage of in tapsets, or as alternate implementations: // - backtrace.stp :: BPF_MAP_TYPE_STACKTRACE + bpf_getstackid // - BPF_MAP_TYPE_LRU_HASH :: for size-limited maps // - BPF_MAP_GET_NEXT_KEY :: for user-space iteration through maps // see https://ferrisellis.com/posts/ebpf_syscall_and_maps/#ebpf-map-types void emit_stmt(statement *s); void emit_mov(value *d, value *s); void emit_jmp(block *b); void emit_cond(expression *e, block *t, block *f); void emit_statmap_lookup(value *dest, globals::map_idx map_id, value *idx); void emit_statmap_update(globals::map_idx map_id, value *idx, int idx_ofs, value *val); void emit_aggregation(vardecl *var, globals::map_slot& g, value *val, value *idx = NULL, int idx_ofs = 0); void emit_store(expression *dest, value *src); value *emit_expr(expression *e); value *emit_bool(expression *e); value *emit_context_var(bpf_context_vardecl *v); void emit_transport_msg(globals::perf_event_type msg, value *arg = NULL, exp_type format_type = pe_unknown); value *emit_functioncall(functiondecl *f, const std::vector &args); value *emit_print_format(const std::string &format, const std::vector &actual, bool print_to_stream = true, const token *tok = NULL); // Used for the embedded-code assembler: int64_t parse_imm (const asm_stmt &stmt, const std::string &str); size_t parse_asm_stmt (embeddedcode *s, size_t start, /*OUT*/asm_stmt &stmt); value *emit_asm_arg(const asm_stmt &stmt, const std::string &arg, bool allow_imm = true, bool allow_emit = true); value *emit_asm_reg(const asm_stmt &stmt, const std::string ®); value *get_asm_reg(const asm_stmt &stmt, const std::string ®); void emit_asm_opcode(const asm_stmt &stmt, std::map label_map); // Used for the embedded-code assembler's diagnostics: source_loc adjusted_loc; size_t adjust_pos; std::vector adjusted_toks; // track for delayed deallocation // Used for string data: value *emit_literal_string(const std::string &str, const token *tok); value *emit_string_copy(value *dest, int ofs, value *src, bool zero_pad = false); // Used for passing long and string arguments on the stack where an address is expected: void emit_long_arg(value *arg, int ofs, value *val); void emit_str_arg(value *arg, int ofs, value *str); void add_prologue(); void add_epilogue(); locals_map *new_locals(const std::vector &); bpf_unparser (program &c, globals &g); virtual ~bpf_unparser (); }; bpf_unparser::bpf_unparser(program &p, globals &g) : throwing_visitor ("unhandled statement or expression type"), result(NULL), this_prog(p), glob(g), this_locals(NULL), ret0_block(NULL), exit_block(NULL) { // If there are any resource constraints set with -D, we populate // them into a map (as we cannot use macros in stapbpf). for (std::string macro: glob.session->c_macros) { // Example: MAXERRORS=3 size_t delim = macro.find('='); std::string option = macro.substr(0, delim); int limit = std::stoi(macro.substr(delim + 1)); // Negative limits become 0. if (limit < 0) limit = 0; constraints[option] = limit; } } bpf_unparser::~bpf_unparser() { // TODO: Need to delay this deallocation even further for error reporting. //for (std::vector::iterator it = adjusted_toks.begin(); // it != adjusted_toks.end(); it++) // delete *it; delete this_locals; } bpf_unparser::locals_map * bpf_unparser::new_locals(const std::vector &vars) { locals_map *m = new locals_map; for (std::vector::const_iterator i = vars.begin (); i != vars.end (); ++i) { const locals_map::value_type v (*i, this_prog.new_reg()); auto ok = m->insert (v); assert (ok.second); } return m; } block * bpf_unparser::get_exit_block() { if (exit_block) return exit_block; block* cont = this_ins.get_block(); block* exit = this_prog.new_block(); set_block(exit); add_epilogue(); this_prog.mk_exit(this_ins); set_block(cont); exit_block = exit; return exit; } block * bpf_unparser::get_ret0_block() { if (ret0_block) return ret0_block; block *b = this_prog.new_block(); insn_append_inserter ins(b, "ret0_block"); this_prog.mk_mov(ins, this_prog.lookup_reg(BPF_REG_0), this_prog.new_imm(0)); b->fallthru = new edge(b, get_exit_block()); ret0_block = b; return b; } void bpf_unparser::emit_stmt(statement *s) { if (s) s->visit (this); } value * bpf_unparser::emit_expr(expression *e) { e->visit (this); value *v = result; result = NULL; return v; } void bpf_unparser::emit_mov(value *d, value *s) { this_prog.mk_mov(this_ins, d, s); } void bpf_unparser::emit_jmp(block *b) { // Begin by hoping that we can simply place the destination as fallthru. // If this assumption doesn't hold, it'll be fixed by reorder_blocks. assert(in_block()); block *this_block = this_ins.get_block (); this_block->fallthru = new edge(this_block, b); clear_block (); } void bpf_unparser::emit_cond(expression *e, block *t_dest, block *f_dest) { condition cond; value *s0, *s1; // Look for and handle logical operators first. if (logical_or_expr *l = dynamic_cast(e)) { block *cont_block = this_prog.new_block (); emit_cond (l->left, t_dest, cont_block); set_block (cont_block); emit_cond (l->right, t_dest, f_dest); return; } if (logical_and_expr *l = dynamic_cast(e)) { block *cont_block = this_prog.new_block (); emit_cond (l->left, cont_block, f_dest); set_block (cont_block); emit_cond (l->right, t_dest, f_dest); return; } if (unary_expression *u = dynamic_cast(e)) if (u->op == "!") { emit_cond (u->operand, f_dest, t_dest); return; } // What is left must generate a comparison + conditional branch. if (comparison *c = dynamic_cast(e)) { s0 = emit_expr (c->left); s1 = emit_expr (c->right); if (c->op == "==") cond = EQ; else if (c->op == "!=") cond = NE; else if (c->op == "<") cond = LT; else if (c->op == "<=") cond = LE; else if (c->op == ">") cond = GT; else if (c->op == ">=") cond = GE; else throw SEMANTIC_ERROR (_("unhandled comparison operator"), e->tok); } else { binary_expression *bin = dynamic_cast(e); if (bin && bin->op == "&") { s0 = emit_expr (bin->left); s1 = emit_expr (bin->right); cond = TEST; } else { // Fall back to E != 0. s0 = emit_expr (e); s1 = this_prog.new_imm(0); cond = NE; } } this_prog.mk_jcond (this_ins, cond, s0, s1, t_dest, f_dest); clear_block (); } value * bpf_unparser::emit_bool (expression *e) { block *else_block = this_prog.new_block (); block *join_block = this_prog.new_block (); value *r = this_prog.new_reg(); emit_mov (r, this_prog.new_imm(1)); emit_cond (e, join_block, else_block); set_block (else_block); emit_mov (r, this_prog.new_imm(0)); emit_jmp (join_block); set_block(join_block); return r; } /* PR23476: Helpers for loading/storing long values in a stat field map. Several of these map operations are issued for each stats operation, so we avoid code duplication by taking an index already on the stack. ??? These helpers could be used in other contexts than just stats. */ void bpf_unparser::emit_statmap_lookup(value *dest, globals::map_idx map_id, value *idx) { this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); emit_mov(this_prog.lookup_reg(BPF_REG_2), idx); // XXX idx stored by caller this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); // Check for null pointer: value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *cont_block = this_prog.new_block(); block *join_block = this_prog.new_block(); emit_mov(dest, i0); // default to a result of 0 this_prog.mk_jcond(this_ins, EQ, r0, i0, join_block, cont_block); set_block(cont_block); this_prog.mk_ld(this_ins, BPF_DW, dest, r0, 0); emit_jmp(join_block); set_block(join_block); } void bpf_unparser::emit_statmap_update(globals::map_idx map_id, value *idx, int idx_ofs, value *val) { int val_ofs = idx_ofs - 8; if ((-val_ofs) % 8 != 0) // align to double-word val_ofs -= 8 - (-val_ofs) % 8; this_prog.use_tmp_space(-val_ofs); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); emit_mov(this_prog.lookup_reg(BPF_REG_2), idx); // XXX idx stored by caller emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); // TODO this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); } // XXX Based on __stap_stat_add in runtime/stat-common.c. // There might be a clever way to avoid code duplication later, // but right now the code format is too different. Just reimplement. void bpf_unparser::emit_aggregation(vardecl *var, globals::map_slot& ms, value *val, value *idx, int idx_ofs) { #ifdef DEBUG_CODEGEN this_ins.notes.push("agg"); #endif // Obtain the correct stats_map and index: assert (ms.is_stat()); globals::stats_map sd; if (var->arity == 0) { assert (ms.is_scalar() && idx == NULL); sd = glob.scalar_stats; // idx is an offset into scalar stat field maps, store on the stack value *frame = this_prog.lookup_reg(BPF_REG_10); idx_ofs = -4; // BPF_W this_prog.mk_st(this_ins, BPF_W, frame, idx_ofs, this_prog.new_imm(ms.idx)); this_prog.use_tmp_space(-idx_ofs); idx = this_prog.new_reg(); this_prog.mk_binary(this_ins, BPF_ADD, idx, frame, this_prog.new_imm(idx_ofs)); } else // var->arity > 0 { assert (!ms.is_scalar()); assert (var->arity > 0 && idx != NULL); auto it = glob.array_stats.find(var); assert (it != glob.array_stats.end()); // XXX: should check earlier sd = it->second; // idx is a value stored on the stack } for (auto f : globals::stat_fields) assert(sd.find(f) != sd.end()); // TODO PR23476: Emit simplified code for now. // // ??? lock stat // if (idx not in sd[stat_iter_field] || sd->count == 0) { // sd->count = 1; // sd->sum = val; // } else { // if(stat_op_count) sd->count++; // if(stat_op_sum) sd->sum += val; // } // ??? unlock stat block *then_block = this_prog.new_block (); block *else_block = this_prog.new_block (); block *join_block = this_prog.new_block (); value *tmp = this_prog.new_reg(); emit_statmap_lookup(tmp, sd["count"], idx); this_prog.mk_jcond (this_ins, EQ, tmp, this_prog.new_imm(0), then_block, else_block); set_block (then_block); emit_statmap_update(sd["count"], idx, idx_ofs, this_prog.new_imm(1)); emit_statmap_update(sd["sum"], idx, idx_ofs, val); emit_jmp (join_block); set_block (else_block); if (1) // TODO: if (stat_op_count) { emit_statmap_lookup(tmp, sd["count"], idx); this_prog.mk_binary(this_ins, BPF_ADD, tmp, tmp, this_prog.new_imm(1)); emit_statmap_update(sd["count"], idx, idx_ofs, tmp); } if (1) // TODO: if (stat_op_sum) { emit_statmap_lookup(tmp, sd["sum"], idx); this_prog.mk_binary(this_ins, BPF_ADD, tmp, tmp, val); emit_statmap_update(sd["sum"], idx, idx_ofs, tmp); } emit_jmp (join_block); set_block(join_block); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); #endif } void bpf_unparser::emit_store(expression *e, value *val) { if (symbol *s = dynamic_cast(e)) // scalar lvalue { vardecl *var = s->referent; assert (var->arity == 0); auto g = glob.globals.find (var); if (g != glob.globals.end()) { value *frame = this_prog.lookup_reg(BPF_REG_10); int key_ofs, val_ofs; // BPF_FUNC_map_update_elem will dereference the address // passed in BPF_REG_3: switch (var->type) { case pe_long: // Store the long on the stack and pass its address: val_ofs = -8; emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: val_ofs = -BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); this_prog.use_tmp_space(BPF_MAXSTRINGLEN); break; case pe_stats: // Emit separate code to update stat fields: emit_aggregation(var, g->second, val); return; default: goto err; } key_ofs = val_ofs - 4; this_prog.mk_st(this_ins, BPF_W, frame, key_ofs, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(-key_ofs); // XXX g->second.is_stat() handled above this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(key_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } auto i = this_locals->find (var); if (i != this_locals->end ()) { emit_mov (i->second, val); return; } } else if (arrayindex *a = dynamic_cast(e)) // array lvalue { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; int key_ofs = 0, val_ofs; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); switch (v->type) { case pe_long: // Store the long on the stack and pass its address: val_ofs = key_ofs - 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: val_ofs = key_ofs - BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_3), val_ofs, val); this_prog.use_tmp_space(BPF_MAXSTRINGLEN); break; case pe_stats: // Emit separate code to update stat fields: { value *idx = this_prog.new_reg(); value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_binary(this_ins, BPF_ADD, idx, frame, this_prog.new_imm(key_ofs)); this_prog.use_tmp_space(-key_ofs); emit_aggregation(v, g->second, val, idx, key_ofs); } return; default: throw SEMANTIC_ERROR(_("unhandled array type"), v->tok); } this_prog.use_tmp_space(-val_ofs); // XXX g->second.is_stat() handled above this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } } err: throw SEMANTIC_ERROR (_("unknown lvalue"), e->tok); } /* WORK IN PROGRESS: A simple eBPF assembler. In order to effectively write eBPF tapset functions, we want to use embedded-code assembly rather than compile from SystemTap code. At the same time, we want to hook into stapbpf functionality to reserve stack memory, allocate virtual registers or signal errors. The assembler syntax will probably take a couple of attempts to get just right. This attempt keeps things as close as possible to the first embedded-code assembler, with a few more features and a disgustingly lenient parser that allows things like $ this is all one "**identifier**" believe-it!-or-not Ahh for the days of 1960s FORTRAN. ??? It might make more sense to implement an assembler based on the syntax used in official eBPF subsystem docs. */ /* Supported assembly statement types include: ::= label, ; ::= alloc, , [, align|noalign]; ::= call, , , , ...; ::= jump_to_catch, ; ::= register_error, ; ::= terminate; ::= , , , , ; Supported argument types include: ::= | ::= | - ::= | r | $ctx $ | $ | $$ | ::= | BPF_MAXSTRINGLEN | BPF_F_CURRENT_CPU | - ::= | */ // #define BPF_ASM_DEBUG struct asm_stmt { std::string kind; unsigned code; std::string dest, src1; int64_t off, imm; // metadata for jmp instructions // ??? The logic around these flags could be pruned a bit. bool has_jmp_target = false; bool has_fallthrough = false; std::string jmp_target, fallthrough; // metadata for call, error instructions std::vector params; // metadata for alloc instructions bool align_alloc; token *tok; }; std::ostream& operator << (std::ostream& o, const asm_stmt& stmt) { if (stmt.kind == "label") o << "label, " << stmt.dest << ";"; else if (stmt.kind == "opcode") { o << std::hex << stmt.code << ", " << stmt.dest << ", " << stmt.src1 << ", "; if (stmt.off != 0 || stmt.jmp_target == "") o << stmt.off; else if (stmt.off != 0) // && stmt.jmp_target != "" o << stmt.off << "/"; if (stmt.jmp_target != "") o << "label:" << stmt.jmp_target; o << ", " << stmt.imm << ";" << (stmt.has_fallthrough ? " +FALLTHROUGH " + stmt.fallthrough : ""); } else if (stmt.kind == "alloc") { o << "alloc, " << stmt.dest << ", " << stmt.imm << ";"; } else if (stmt.kind == "call") { o << "call, " << stmt.dest << ", "; for (unsigned k = 0; k < stmt.params.size(); k++) { o << stmt.params[k]; o << (k >= stmt.params.size() - 1 ? ";" : ", "); } } else o << ""; return o; } bool is_numeric (const std::string &str) { size_t pos = 0; try { stol(str, &pos, 0); } catch (const std::invalid_argument &e) { return false; } catch (const std::out_of_range &e) { /* XXX: probably numeric but not valid; give up */ return false; } catch (...) { /* XXX: handle other errors the same way */ std::cerr << "BUG: bpf assembler -- is_numeric() saw unexpected exception" << std::endl; return false; } return (pos == str.size()); } int64_t bpf_unparser::parse_imm (const asm_stmt &stmt, const std::string &str) { int64_t val; if (str == "BPF_MAXSTRINGLEN") val = BPF_MAXSTRINGLEN; else if (str == "BPF_F_CURRENT_CPU") val = BPF_F_CURRENT_CPU; else if (str == "-") val = 0; else try { val = stol(str, 0, 0); } catch (std::exception &e) { // XXX: invalid_argument, out_of_range throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode operand '%s'", str.c_str()), stmt.tok); } return val; } /* Parse an assembly statement starting from position start in code, then write the output in stmt. Returns a position immediately after the parsed statement. */ size_t bpf_unparser::parse_asm_stmt (embeddedcode *s, size_t start, /*OUT*/asm_stmt &stmt) { const interned_string &code = s->code; retry: std::vector args; unsigned n = code.size(); size_t pos; bool in_comment = false; bool in_string = false; // ??? As before, parser is extremely non-rigorous and could do // with some tightening in terms of the inputs it accepts. std::string arg = ""; size_t save_start = start; // -- position for diagnostics for (pos = start; pos < n; pos++) { char c = code[pos]; char c2 = pos + 1 < n ? code [pos + 1] : 0; if (isspace(c) && !in_string) continue; // skip else if (in_comment) { if (c == '*' && c2 == '/') ++pos, in_comment = false; // else skip } else if (in_string) { // resulting string will be processed by translate_escapes() if (c == '"') arg.push_back(c), in_string = false; // include quote else if (c == '\\' && c2 == '"') ++pos, arg.push_back(c), arg.push_back(c2); else // accept any char, including whitespace arg.push_back(c); } else if (c == '/' && c2 == '*') ++pos, in_comment = true; else if (c == '"') // found a literal string { if (arg.empty() && args.empty()) save_start = pos; // start of first argument // XXX: This allows '"' inside an arg and will treat the // string as a sequence of weird identifier characters. A // more rigorous parser would error on mixing strings and // regular chars. arg.push_back(c); // include quote in_string = true; } else if (c == ',') // reached end of argument { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; } else if (c == ';') // reached end of statement { // XXX: This strips out empty args. A more rigorous parser would error. if (arg != "") args.push_back(arg); arg = ""; pos++; break; } else // found (we assume) a regular char { if (arg.empty() && args.empty()) save_start = pos; // start of first argument // XXX: As before, this strips whitespace within args // (so '$ab', '$ a b' and '$a b' are equivalent). // // A more rigorous parser would track in_arg // and after_arg states and error on whitespace within args. arg.push_back(c); } } // final ';' is optional, so we watch for a trailing arg: if (arg != "") args.push_back(arg); // handle the case with no args if (args.empty() && pos >= n) return std::string::npos; // finished parsing else if (args.empty()) { // XXX: This skips an empty statement. // A more rigorous parser would error. start = pos; goto retry; } // compute token with adjusted source location for diagnostics // TODO: needs some attention to how multiline tokens are printed in error reporting -- with this code, caret aligns incorrectly for (/* use saved adjust_pos */; adjust_pos < save_start && adjust_pos < n; adjust_pos++) { char c = code[adjust_pos]; if (c == '\n') { adjusted_loc.line++; adjusted_loc.column = 1; } else adjusted_loc.column++; } // Now populate the statement data. stmt = asm_stmt(); // clear pre-existing data // set token with adjusted source location stmt.tok = s->tok->adjust_location(adjusted_loc); adjusted_toks.push_back(stmt.tok); #ifdef BPF_ASM_DEBUG std::cerr << "bpf_asm parse_asm_stmt: tokenizer got "; for (unsigned k = 0; k < args.size(); k++) std::cerr << args[k] << ", "; std::cerr << std::endl; #endif if (args[0] == "label") { if (args.size() != 2) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (label expects 1 arg, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; } else if (args[0] == "alloc") { if (args.size() != 3 && args.size() != 4) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (alloc expects 2 or 3 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; stmt.imm = parse_imm(stmt, args[2]); // handle align, noalign options if (args.size() == 4 && args[3] == "align") { stmt.align_alloc = true; } else if (args.size() == 4 && args[3] == "noalign") { stmt.align_alloc = false; } else if (args.size() == 4) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (alloc expects 'align' or 'noalign' as 3rd arg, found '%s'", args[3].c_str()), stmt.tok); else { stmt.align_alloc = false; } } else if (args[0] == "jump_to_catch") { if (args.size() != 2) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (jump_to_catch expects 1 arg, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.params.push_back(args[1]); // Error message } else if (args[0] == "register_error") { if (args.size() != 2) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (register_error expects 1 arg, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.params.push_back(args[1]); // Error message } else if (args[0] == "terminate") { if (args.size() != 1) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (terminate does not take any args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; } else if (args[0] == "call") { if (args.size() < 3) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (call expects at least 2 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = args[0]; stmt.dest = args[1]; assert(stmt.params.empty()); for (unsigned k = 2; k < args.size(); k++) stmt.params.push_back(args[k]); } else if (is_numeric(args[0])) { if (args.size() != 5) throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode syntax (opcode expects 4 args, found %llu)", (long long) args.size()-1), stmt.tok); stmt.kind = "opcode"; try { stmt.code = stoul(args[0], 0, 0); } catch (std::exception &e) { // XXX: invalid_argument, out_of_range throw SEMANTIC_ERROR (_F("invalid bpf embeddedcode opcode '%s'", args[0].c_str()), stmt.tok); } stmt.dest = args[1]; stmt.src1 = args[2]; stmt.has_jmp_target = BPF_CLASS(stmt.code) == BPF_JMP && BPF_OP(stmt.code) != BPF_EXIT && BPF_OP(stmt.code) != BPF_CALL; stmt.has_fallthrough = // only for jcond stmt.has_jmp_target && BPF_OP(stmt.code) != BPF_JA; // XXX: stmt.fallthrough is computed by visit_embeddedcode if (stmt.has_jmp_target) { stmt.off = 0; stmt.jmp_target = args[3]; } else stmt.off = parse_imm(stmt, args[3]); stmt.imm = parse_imm(stmt, args[4]); } else throw SEMANTIC_ERROR (_F("unknown bpf embeddedcode operator '%s'", args[0].c_str()), stmt.tok); // we returned one statement, there may be more parsing to be done return pos; } /* forward declaration */ std::string translate_escapes (const interned_string &str, const token* tok); /* Convert a or operand to a value. May emit code to store a string constant on the stack. */ value * bpf_unparser::emit_asm_arg (const asm_stmt &stmt, const std::string &arg, bool allow_imm, bool allow_emit) { if (arg == "$$") { /* arg is a return value */ if (func_return.empty()) throw SEMANTIC_ERROR (_("no return value outside function"), stmt.tok); return func_return_val.back(); } else if (arg == "$ctx") { /* provide the context where available */ return this_in_arg0 ? this_in_arg0 : this_prog.new_imm(0x0); } else if (arg[0] == '$') { /* assume arg is a variable */ std::string var = arg.substr(1); for (auto i = this_locals->begin(); i != this_locals->end(); ++i) { vardecl *v = i->first; if (var == v->unmangled_name) return i->second; } /* if it's an unknown variable, allocate a temporary */ struct vardecl *vd = new vardecl; vd->name = "__bpfasm__local_" + var; vd->unmangled_name = var; vd->type = pe_long; vd->arity = 0; value *reg = this_prog.new_reg(); const locals_map::value_type v (vd, reg); auto ok = this_locals->insert (v); assert (ok.second); return reg; } else if (is_numeric(arg) && allow_imm) { /* arg is an immediate constant */ int64_t imm = stol(arg, 0, 0); return this_prog.new_imm(imm); } else if (is_numeric(arg) || arg[0] == 'r') { /* arg is a register number */ std::string reg = arg[0] == 'r' ? arg.substr(1) : arg; unsigned long num; bool parsed = false; try { num = stoul(reg, 0, 0); parsed = true; } catch (std::exception &e) {} // XXX: invalid_argument, out_of_range if (!parsed || num > 10) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); return this_prog.lookup_reg(num); } else if (arg[0] == '"') { if (!allow_emit) throw SEMANTIC_ERROR (_F("invalid bpf argument %s " "(string literal not allowed here)", arg.c_str()), stmt.tok); /* arg is a string constant */ if (arg[arg.size() - 1] != '"') throw SEMANTIC_ERROR (_F("BUG: improper string %s", arg.c_str()), stmt.tok); std::string escaped_str = arg.substr(1,arg.size()-2); /* strip quotes */ std::string str = translate_escapes(escaped_str, stmt.tok); return emit_literal_string(str, stmt.tok); } else if (arg == "BPF_MAXSTRINGLEN" || arg == "BPF_F_CURRENT_CPU") { /* arg is a system constant */ if (!allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); if (arg == "BPF_MAXSTRINGLEN") return this_prog.new_imm(BPF_MAXSTRINGLEN); else // arg == "BPF_F_CURRENT_CPU" return this_prog.new_imm(BPF_F_CURRENT_CPU); } else if (arg == "-") { /* arg is null a.k.a '0' */ if (!allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); return this_prog.new_imm(0); } else if (allow_imm) throw SEMANTIC_ERROR (_F("invalid bpf argument '%s'", arg.c_str()), stmt.tok); else throw SEMANTIC_ERROR (_F("invalid bpf register '%s'", arg.c_str()), stmt.tok); } /* As above, but don't accept immediate values. Do accept string constants (since they're stored in a register). */ value * bpf_unparser::emit_asm_reg (const asm_stmt &stmt, const std::string ®) { return emit_asm_arg(stmt, reg, /*allow_imm=*/false); } /* As above, but don't allow string constants or anything that emits code. Useful if the context requires an lvalue. */ value * bpf_unparser::get_asm_reg (const asm_stmt &stmt, const std::string ®) { return emit_asm_arg(stmt, reg, /*allow_imm=*/false, /*allow_emit=*/false); } void bpf_unparser::emit_asm_opcode (const asm_stmt &stmt, std::map label_map) { if (stmt.code > 0xff && stmt.code != BPF_LD_MAP) throw SEMANTIC_ERROR (_("invalid bpf code"), stmt.tok); bool r_dest = false, r_src0 = false, r_src1 = false, i_src1 = false; bool op_jmp = false, op_jcond = false; condition c = EQ; // <- quiet a compiler warning about uninitialized c switch (BPF_CLASS (stmt.code)) { case BPF_LDX: r_dest = r_src1 = true; break; case BPF_STX: r_src0 = r_src1 = true; break; case BPF_ST: r_src0 = i_src1 = true; break; case BPF_ALU: case BPF_ALU64: r_dest = true; if (stmt.code & BPF_X) r_src1 = true; else i_src1 = true; switch (BPF_OP (stmt.code)) { case BPF_NEG: case BPF_MOV: break; case BPF_END: /* X/K bit repurposed as LE/BE. */ i_src1 = false, r_src1 = true; break; default: r_src0 = true; } break; case BPF_JMP: switch (BPF_OP (stmt.code)) { case BPF_EXIT: // no special treatment needed break; case BPF_CALL: i_src1 = true; break; case BPF_JA: op_jmp = true; break; default: // XXX: assume this is a jcond op op_jcond = true; r_src0 = true; if (stmt.code & BPF_X) r_src1 = true; else i_src1 = true; } // compute jump condition c switch (BPF_OP (stmt.code)) { case BPF_JEQ: c = EQ; break; case BPF_JNE: c = NE; break; case BPF_JGT: c = GTU; break; case BPF_JGE: c = GEU; break; case BPF_JLT: c = LTU; break; case BPF_JLE: c = LEU; break; case BPF_JSGT: c = GT; break; case BPF_JSGE: c = GE; break; case BPF_JSLT: c = LT; break; case BPF_JSLE: c = LE; break; case BPF_JSET: c = TEST; break; default: if (op_jcond) throw SEMANTIC_ERROR (_("invalid branch in bpf code"), stmt.tok); } break; default: if (stmt.code == BPF_LD_MAP) r_dest = true, i_src1 = true; else throw SEMANTIC_ERROR (_F("unknown opcode '%d' in bpf code", stmt.code), stmt.tok); } value *v_dest = NULL; if (r_dest || r_src0) v_dest = get_asm_reg(stmt, stmt.dest); else if (stmt.dest != "0" && stmt.dest != "-") throw SEMANTIC_ERROR (_F("invalid register field '%s' in bpf code", stmt.dest.c_str()), stmt.tok); value *v_src1 = NULL; if (r_src1) v_src1 = emit_asm_reg(stmt, stmt.src1); else { if (stmt.src1 != "0" && stmt.src1 != "-") throw SEMANTIC_ERROR (_F("invalid register field '%s' in bpf code", stmt.src1.c_str()), stmt.tok); if (i_src1) v_src1 = this_prog.new_imm(stmt.imm); else if (stmt.imm != 0) throw SEMANTIC_ERROR (_("invalid immediate field in bpf code"), stmt.tok); } if (stmt.off != (int16_t)stmt.off) throw SEMANTIC_ERROR (_F("offset field '%lld' out of range in bpf code", (long long) stmt.off), stmt.tok); if (op_jmp) { block *target = label_map[stmt.jmp_target]; this_prog.mk_jmp(this_ins, target); } else if (op_jcond) { if (label_map.count(stmt.jmp_target) == 0) throw SEMANTIC_ERROR(_F("undefined jump target '%s' in bpf code", stmt.jmp_target.c_str()), stmt.tok); if (label_map.count(stmt.fallthrough) == 0) throw SEMANTIC_ERROR(_F("BUG: undefined fallthrough target '%s'", stmt.fallthrough.c_str()), stmt.tok); block *target = label_map[stmt.jmp_target]; block *fallthrough = label_map[stmt.fallthrough]; this_prog.mk_jcond(this_ins, c, v_dest, v_src1, target, fallthrough); } else // regular opcode { insn *i = this_ins.new_insn(); i->code = stmt.code; i->dest = (r_dest ? v_dest : NULL); i->src0 = (r_src0 ? v_dest : NULL); i->src1 = v_src1; i->off = stmt.off; } } void bpf_unparser::visit_embeddedcode (embeddedcode *s) { #ifdef DEBUG_CODEGEN this_ins.notes.push("asm"); // XXX verbose; for more precise diagnostics: //std::stringstream os; os << s->tok->location; //this_ins.notes.push("asm@" + os.str()); #endif // XXX allocate asm_stmts off the stack to avoid deallocating tok on throw std::vector *statements_p = new std::vector; std::vector &statements = *statements_p; asm_stmt stmt; // PR24528: The /* userspace */ annotation is used to mark // userspace-only BPF embeddedcode tapset functions. if (s->tagged_p("/* userspace */") && this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("embeddedcode marked /* userspace */ in kernel bpf probe"), s->tok); // track adjusted source location for each stmt adjusted_loc = s->tok->location; adjust_pos = 0; size_t pos = 0; while ((pos = parse_asm_stmt(s, pos, stmt)) != std::string::npos) { statements.push_back(stmt); } // XXX past this point, adjusted_loc/adjust_pos no longer used, // therefore safe to overwrite in a recursive visit_embeddedcode call // build basic block table std::map label_map; block *entry_block = this_ins.b; label_map[";;entry"] = entry_block; bool after_label = true; asm_stmt *after_jump = NULL; unsigned fallthrough_count = 0; for (std::vector::iterator it = statements.begin(); it != statements.end(); it++) { stmt = *it; if (after_jump != NULL && stmt.kind == "label") { after_jump->has_fallthrough = true; after_jump->fallthrough = stmt.dest; } else if (after_jump != NULL) { block *b = this_prog.new_block(); // generate unique label for fallthrough edge std::ostringstream oss; oss << "fallthrough;;" << fallthrough_count++; std::string fallthrough_label = oss.str(); // XXX: semicolons prevent collision with programmer-defined labels label_map[fallthrough_label] = b; set_block(b); after_jump->has_fallthrough = true; after_jump->fallthrough = fallthrough_label; } if (stmt.kind == "label" && after_label) { // avoid creating multiple blocks for consecutive labels label_map[stmt.dest] = this_ins.b; after_jump = NULL; } else if (stmt.kind == "label") { block *b = this_prog.new_block(); label_map[stmt.dest] = b; set_block(b); after_label = true; after_jump = NULL; } else if (stmt.has_fallthrough) { after_label = false; after_jump = &*it; // be sure to refer to original, not copied stmt } else if (stmt.kind == "opcode" && BPF_CLASS(stmt.code) == BPF_JMP && BPF_OP(stmt.code) != BPF_CALL /* CALL stays in the same block */) { after_label = false; after_jump = &*it; // be sure to refer to original, not copied stmt } else { after_label = false; after_jump = NULL; } } if (after_jump != NULL) // ??? should just fall through to exit throw SEMANTIC_ERROR (_("BUG: bpf embeddedcode doesn't support " "fallthrough on final asm_stmt"), stmt.tok); // emit statements bool jumped_already = false; set_block(entry_block); for (std::vector::iterator it = statements.begin(); it != statements.end(); it++) { stmt = *it; #ifdef BPF_ASM_DEBUG std::cerr << "bpf_asm visit_embeddedcode: " << stmt << std::endl; #endif if (stmt.kind == "label") { if (!jumped_already) emit_jmp (label_map[stmt.dest]); set_block(label_map[stmt.dest]); } else if (stmt.kind == "alloc") { /* Reserve stack space and store its address in dest. */ int ofs = -this_prog.max_tmp_space - stmt.imm; if (stmt.align_alloc && (-ofs) % 8 != 0) // align to double-word ofs -= 8 - (-ofs) % 8; this_prog.use_tmp_space(-ofs); // ??? Consider using a storage allocator and this_prog.new_obj(). value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_binary(this_ins, BPF_ADD, dest, this_prog.lookup_reg(BPF_REG_10) /*frame*/, this_prog.new_imm(ofs)); } else if (stmt.kind == "jump_to_catch") { /** * jump_to_catch allows the program to switch the execution to * a catch block in the case that an error is called during the * corresponding try block. Pointers to catch blocks are set up * before the code for the try block is emitted and are stored * in catch_jump. */ // Store the error message for the catch block. value *msg = emit_asm_arg(stmt, stmt.params[0]); catch_msg.push_back(msg); // error_block contains the code for the error procedure in the // case that error is called outside a try-catch statement. block* error_block = this_prog.new_block(); // Since it is known at compile time as to whether the error is // called inside a try-catch block or not, a jump to the correct // procedure can be emitted. if (!catch_jump.empty()) emit_jmp(catch_jump.back()); else emit_jmp(error_block); set_block(error_block); } else if (stmt.kind == "register_error") { // Set the error status. value *status = this_prog.new_imm(1); emit_mov(error_status, status); // NB: The error message has to be stored for future printing. The current // mechanism uses a perf_event to pass the string into userspace. This has // to be done because storing the string on the BPF stack consumes too much // space, and this space is only freed during the epilogue where the error // message is printed. If future versions of BPF introduce more stack space, // the mechanism could be altered to use the stack instead. value *error_msg = emit_asm_arg(stmt, stmt.params[0]); emit_transport_msg(globals::STP_STORE_ERROR_MSG, error_msg, pe_string); } else if (stmt.kind == "terminate") { /* Short-circuit the program to its completition. */ block* join_block = this_prog.new_block(); block* exit_block = get_exit_block(); emit_jmp(exit_block); set_block(join_block); } else if (stmt.kind == "call") { assert (!stmt.params.empty()); std::string func_name = stmt.params[0]; bpf_func_id hid = bpf_function_id(func_name); if (hid != __BPF_FUNC_MAX_ID) { // ??? For diagnostics: check if the number of arguments is correct. regno r = BPF_REG_1; unsigned nargs = 0; for (unsigned k = 1; k < stmt.params.size(); k++) { // ??? Could make params optional to avoid the MOVs, // ??? since the calling convention is well-known. value *from_reg = emit_asm_arg(stmt, stmt.params[k]); value *to_reg = this_prog.lookup_reg(r); this_prog.mk_mov(this_ins, to_reg, from_reg); nargs++; r++; } this_prog.mk_call(this_ins, hid, nargs); if (stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, this_prog.lookup_reg(BPF_REG_0) /* returnval */); } // ??? For diagnostics: check other cases with stmt.dest. } else if (func_name == "printf" || func_name == "sprintf") { if (stmt.params.size() < 2) throw SEMANTIC_ERROR (_F("bpf embeddedcode '%s' expects format string, " "none provided", func_name.c_str()), stmt.tok); std::string format = stmt.params[1]; if (format.size() < 2 || format[0] != '"' || format[format.size()-1] != '"') throw SEMANTIC_ERROR (_F("bpf embeddedcode '%s' expects format string, " "but first parameter is not a string literal", func_name.c_str()), stmt.tok); format = format.substr(1,format.size()-2); /* strip quotes */ format = translate_escapes(format, stmt.tok); size_t format_bytes = format.size() + 1; if (format_bytes > BPF_MAXFORMATLEN) throw SEMANTIC_ERROR(_("Format string for print too long"), stmt.tok); std::vector args; for (unsigned k = 2; k < stmt.params.size(); k++) args.push_back(emit_asm_arg(stmt, stmt.params[k])); if (args.size() > BPF_MAXPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to print", "too many arguments to print (%zu)", args.size(), args.size()), stmt.tok); bool print_to_stream = (func_name == "printf"); value *retval = emit_print_format(format, args, print_to_stream, stmt.tok); if (retval != NULL && stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, retval); } // ??? For diagnostics: check other cases with retval and stmt.dest. } else { // TODO: Experimental code for supporting basic functioncalls. // Needs improvement and simplification to work with full generality. // But thus far, it is sufficient for calling exit(). #if 1 if (func_name != "exit") throw SEMANTIC_ERROR(_("BUG: bpf embeddedcode non-helper 'call' operation only supports printf(),sprintf(),exit() for now"), stmt.tok); #elif 1 throw SEMANTIC_ERROR(_("BUG: bpf embeddedcode non-helper 'call' operation only supports printf(),sprintf() for now"), stmt.tok); #endif #if 1 // ???: Passing systemtap_session through all the way to here // seems intrusive, but less intrusive than moving // embedded-code assembly to the translate_globals() pass. symresolution_info sym (*glob.session); functioncall *call = new functioncall; call->tok = stmt.tok; unsigned nargs = stmt.params.size() - 1; std::vector fds = sym.find_functions (call, func_name, nargs, stmt.tok); delete call; if (fds.empty()) // ??? Could call levenshtein_suggest() as in // symresolution_info::visit_functioncall(). throw SEMANTIC_ERROR(_("bpf embeddedcode unresolved function call"), stmt.tok); if (fds.size() > 1) throw SEMANTIC_ERROR(_("bpf embeddedcode unhandled function overloading"), stmt.tok); functiondecl *f = fds[0]; // TODO: Imitation of semantic_pass_symbols, does not // cover full generality of the lookup process. update_visitor_loop (*glob.session, glob.session->code_filters, f->body); sym.current_function = f; sym.current_probe = 0; f->body->visit (&sym); // ??? For now, always inline the function call. for (auto i = func_calls.begin(); i != func_calls.end(); ++i) if (f == *i) throw SEMANTIC_ERROR (_("unhandled function recursion"), stmt.tok); // Collect the function arguments. std::vector args; for (unsigned k = 1; k < stmt.params.size(); k++) args.push_back(emit_asm_arg(stmt, stmt.params[k])); if (args.size () != f->formal_args.size()) throw SEMANTIC_ERROR(_F("bpf embeddedcode call to function '%s' " "expected %zu arguments, got %zu", func_name.c_str(), f->formal_args.size(), args.size()), stmt.tok); value *retval = emit_functioncall(f, args); if (stmt.dest != "-") { value *dest = get_asm_reg(stmt, stmt.dest); this_prog.mk_mov(this_ins, dest, retval); } // ??? For diagnostics: check other cases with retval and stmt.dest. #endif } } else if (stmt.kind == "opcode") { emit_asm_opcode (stmt, label_map); } else throw SEMANTIC_ERROR (_F("BUG: bpf embeddedcode contains unexpected " "asm_stmt kind '%s'", stmt.kind.c_str()), stmt.tok); if (stmt.has_fallthrough) { jumped_already = true; set_block(label_map[stmt.fallthrough]); } else jumped_already = false; } delete statements_p; #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // asm #endif } void bpf_unparser::visit_try_block (try_block* s) { block* catch_block = this_prog.new_block(); block* join_block = this_prog.new_block(); // Prepare the catch block in case an error is called. The // catch block code is emitted after the try block because // error messages are propagated during the error statements // which are expected to occur in the try blocks. catch_jump.push_back(catch_block); // Emit code for statements inside try block. If one of these // statements is a call to error(...), then the execution will // switch over to the catch block set up above. emit_stmt(s->try_block); // Remove the catch block as the try block has been emitted // (this is useful when dealing with nested try-catch blocks). catch_jump.pop_back(); if (in_block ()) emit_jmp(join_block); set_block(catch_block); // Set up connection to the error message. if (s->catch_error_var) { vardecl* catch_var_decl = s->catch_error_var->referent; auto j = this_locals->find(catch_var_decl); if (j == this_locals->end()) throw SEMANTIC_ERROR(_("unknown value"), catch_var_decl->tok); value* catch_var = j->second; // This message is stored during jump_to_catch. value* error_var = catch_msg.back(); catch_msg.pop_back(); this_prog.mk_mov(this_ins, catch_var, error_var); } // After setting up the message, the catch block can run. emit_stmt(s->catch_block); if (in_block ()) emit_jmp(join_block); set_block(join_block); } void bpf_unparser::visit_block (::block *s) { unsigned n = s->statements.size(); for (unsigned i = 0; i < n; ++i) emit_stmt (s->statements[i]); } void bpf_unparser::visit_null_statement (null_statement *) { } void bpf_unparser::visit_expr_statement (expr_statement *s) { (void) emit_expr (s->value); } void bpf_unparser::visit_if_statement (if_statement* s) { block *then_block = this_prog.new_block (); block *join_block = this_prog.new_block (); if (s->elseblock) { block *else_block = this_prog.new_block (); emit_cond (s->condition, then_block, else_block); set_block (then_block); emit_stmt (s->thenblock); if (in_block ()) emit_jmp (join_block); set_block (else_block); emit_stmt (s->elseblock); if (in_block ()) emit_jmp (join_block); } else { emit_cond (s->condition, then_block, join_block); set_block (then_block); emit_stmt (s->thenblock); if (in_block ()) emit_jmp (join_block); } set_block (join_block); } void bpf_unparser::visit_for_loop (for_loop* s) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported loop in bpf kernel probe"), s->tok); // TODO: Future versions of BPF will include limited looping capability. block *body_block = this_prog.new_block (); block *iter_block = this_prog.new_block (); block *test_block = this_prog.new_block (); block *join_block = this_prog.new_block (); emit_stmt (s->init); if (!in_block ()) return; emit_jmp (test_block); loop_break.push_back (join_block); loop_cont.push_back (iter_block); set_block (body_block); emit_stmt (s->block); if (in_block ()) emit_jmp (iter_block); loop_cont.pop_back (); loop_break.pop_back (); set_block (iter_block); emit_stmt (s->incr); if (in_block ()) emit_jmp (test_block); set_block (test_block); emit_cond (s->cond, body_block, join_block); set_block (join_block); } void bpf_unparser::visit_foreach_loop(foreach_loop* s) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported loop in bpf kernel probe"), s->tok); // TODO: Future versions of BPF will include limited looping capability. // TODO: Handle array_slice in foreach iteration. if (!s->array_slice.empty()) throw SEMANTIC_ERROR(_("unsupported array slice in bpf foreach loop"), s->tok); bool composite_key = s->indexes.size() != 1; std::vector key_decls; std::vector keys; // key_decls[i] refers to keys[i] std::vector key_offsets; // key_decls[i] is at keys_offset[i] // Populate key_decls for (unsigned k = 0; k < s->indexes.size(); k++) { vardecl *keydecl = s->indexes[k]->referent; key_decls.push_back(keydecl); auto i = this_locals->find(keydecl); if (i == this_locals->end()) throw SEMANTIC_ERROR(_("unknown index"), keydecl->tok); keys.push_back(i->second); } // Get arraydecl symbol *a; if (! (a = dynamic_cast(s->base))) throw SEMANTIC_ERROR(_("unknown type"), s->base->tok); vardecl *arraydecl = a->referent; // Populate key_offsets, foreach_info globals::foreach_info info; info.sort_direction = s->sort_direction; info.sort_column = s->sort_column; // XXX: s->sort_column may be uninitialized if s->sort_direction == 0 //if (s->sort_direction == 0) info.sort_column = 1; info.keysize = 0; info.sort_column_size = 0; info.sort_column_ofs = 0; for (unsigned k = 0; k < arraydecl->index_types.size(); k++) { auto type = arraydecl->index_types[k]; if (type != pe_long && type != pe_string) throw SEMANTIC_ERROR(_("unhandled foreach index type"), s->tok); int this_column_size; // PR23875: foreach should handle string keys if (type == pe_long) { this_column_size = 8; } else if (type == pe_string) { this_column_size = BPF_MAXSTRINGLEN; } if (info.sort_column == k + 1) // record sort column { info.sort_column_size = this_column_size; info.sort_column_ofs = info.keysize; } key_offsets.push_back(info.keysize); info.keysize += this_column_size; } if (arraydecl->index_types.size() == 1) { // Signals map_get_next_key to treat the key as a single value: info.sort_column_ofs = -1; } // Save foreach_info to foreach_loop_info_table globals::loop_idx foreach_id = glob.foreach_loop_info.size(); glob.foreach_loop_info.push_back(info); // Get map_slot for arraydecl auto g = glob.globals.find(arraydecl); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array"), arraydecl->tok); int map_id = g->second.map_id; bool is_stat_array = g->second.is_stat(); // PR23476: Handle foreach iteration for stats arrays. assert(!g->second.is_scalar()); // XXX scalar map slot was used for arraydecl if (is_stat_array) { // Get stats_map for arraydecl auto all_fields = glob.array_stats.find(arraydecl); if (all_fields == glob.array_stats.end()) throw SEMANTIC_ERROR(_("unknown stats array"), arraydecl->tok); // Get the correct map for aggregates: auto one_field = all_fields->second.find(globals::stat_iter_field); assert (one_field != all_fields->second.end()); map_id = one_field->second; // XXX: Since foreach only handles/returns keys, for the basic // case it's sufficient to simply iterate one of the stat field // maps. // // TODO PR24528: But if sorting on aggregate is required // (when info.sort_column==0, s->sort_aggr is set), // then map_get_next_key will need to perform aggregation // calculations, and these will require access to more than one map. // // TODO PR24528: Need to pass s->sort_aggr, agg_idx via foreach_info. // TODO PR24528: Verify with foreach_sort_stat.exp testcase. if (info.sort_column == 0) throw SEMANTIC_ERROR(_("unsupported sorted iteration on stat aggregate"), arraydecl->tok); } // Initialize constants, values, blocks int keyref_size = 8; // the BPF stack holds a pointer to the key value *limit; if (s->limit) limit = this_prog.new_reg(); else limit = this_prog.new_imm(-1); value *keyref; if (composite_key) keyref = this_prog.new_reg(); else keyref = keys[0]; value *i0 = this_prog.new_imm(0); value *id = this_prog.new_imm(foreach_id); value *frame = this_prog.lookup_reg(BPF_REG_10); block *body_block = this_prog.new_block (); block *load_block_1 = this_prog.new_block (); block *iter_block = this_prog.new_block (); block *join_block = this_prog.new_block (); // Reserve stack space; XXX may be cleared by the loop body value *key_ofs = this_prog.new_imm(-keyref_size); value *newkey_ofs = this_prog.new_imm(-keyref_size-keyref_size); this_prog.use_tmp_space(2*keyref_size); // Setup iteration limit if (s->limit) this_prog.mk_mov(this_ins, limit, emit_expr(s->limit)); // Get the first key this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), i0); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, newkey_ofs); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_4), id); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_5), limit); this_prog.mk_call (this_ins, BPF_FUNC_map_get_next_key, 5); this_prog.mk_jcond (this_ins, NE, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_1); // Enter loop body set_block(body_block); loop_break.push_back (join_block); loop_cont.push_back (iter_block); emit_stmt(s->block); // XXX may clobber key, newkey at top of stack loop_cont.pop_back (); loop_break.pop_back(); if (in_block ()) emit_jmp(iter_block); // Get the next key, exit loop if map_get_next_key doesn't return 0 set_block(iter_block); this_prog.mk_st (this_ins, BPF_DW, frame, -keyref_size /*key_ofs*/, keyref); this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, key_ofs); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, newkey_ofs); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_4), id); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_5), limit); this_prog.mk_call (this_ins, BPF_FUNC_map_get_next_key, 5); this_prog.mk_jcond (this_ins, NE, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_1); // Load from newkey_ofs to keyref set_block(load_block_1); this_prog.mk_ld (this_ins, BPF_DW, keyref, frame, -keyref_size-keyref_size /*newkey_ofs*/); // XXX For single-key arrays, keyref already contains the value: // - either the integer value (for a pe_long key) // - or a pointer to the string value (for a pe_string key) // PR23478: Unpack keyref into individual indices if (composite_key) { for (unsigned k = 0; k < s->indexes.size(); k++) { switch (key_decls[k]->type) { case pe_long: // XXX load the long value this_prog.mk_ld (this_ins, BPF_DW, keys[k], keyref, key_offsets[k]); break; case pe_string: // XXX pass a pointer to the string value this_prog.mk_binary (this_ins, BPF_ADD, keys[k], keyref, this_prog.new_imm(key_offsets[k])); break; default: throw SEMANTIC_ERROR (_("unhandled foreach key type"), key_decls[k]->tok); } } } // If the foreach loop requests a value, retrieve the value if (s->value) { vardecl *valdecl = s->value->referent; // TODO PR23476: is s->value ever set for a statistic array iteration? if (is_stat_array) throw SEMANTIC_ERROR(_("unsupported value iteration on stat aggregate"), arraydecl->tok); auto i = this_locals->find(valdecl); if (i == this_locals->end()) throw SEMANTIC_ERROR(_("unknown value"), valdecl->tok); value *val = i->second; block *load_block_2 = this_prog.new_block (); this_prog.load_map (this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); // To lookup value, we pass a pointer to the key. // If the key is a single integer, we need to pass the integer value's // location in the stack. Otherwise, keyref already holds the pointer. if (!composite_key && key_decls[0]->type == pe_long) { // XXX reuse not-yet-clobbered newkey value from map_get_next_key this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, newkey_ofs); } else { this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), keyref); } this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); this_prog.mk_jcond (this_ins, EQ, this_prog.lookup_reg(BPF_REG_0), i0, join_block, load_block_2); // Load the corresponding value if key was valid set_block(load_block_2); switch (valdecl->type) { case pe_long: // If the value is an integer, we must dereference the pointer: this_prog.mk_ld(this_ins, BPF_DW, val, this_prog.lookup_reg(BPF_REG_0), 0); break; case pe_string: this_prog.mk_mov(this_ins, val, this_prog.lookup_reg(BPF_REG_0)); break; default: throw SEMANTIC_ERROR (_("unhandled foreach value type"), valdecl->tok); } } // Decrement the iteration limit if (s->limit) this_prog.mk_binary (this_ins, BPF_ADD, limit, limit, this_prog.new_imm(-1)); emit_jmp(body_block); set_block(join_block); } void bpf_unparser::visit_break_statement (break_statement* s) { if (loop_break.empty ()) throw SEMANTIC_ERROR (_("cannot 'break' outside loop"), s->tok); emit_jmp (loop_break.back ()); } void bpf_unparser:: visit_continue_statement (continue_statement* s) { if (loop_cont.empty ()) throw SEMANTIC_ERROR (_("cannot 'continue' outside loop"), s->tok); emit_jmp (loop_cont.back ()); } void bpf_unparser::visit_return_statement (return_statement* s) { if (func_return.empty ()) throw SEMANTIC_ERROR (_("cannot 'return' outside function"), s->tok); assert (!func_return_val.empty ()); if (s->value) emit_mov (func_return_val.back (), emit_expr (s->value)); emit_jmp (func_return.back ()); } void bpf_unparser::visit_next_statement (next_statement* s) { if (!func_return.empty ()) throw SEMANTIC_ERROR(_("bpf unhandled next statement in function"), s->tok); emit_jmp(exit_block); } void bpf_unparser::visit_delete_statement (delete_statement *s) { expression *e = s->value; if (symbol *s = dynamic_cast(e)) { vardecl *var = s->referent; if (var->arity != 0) throw SEMANTIC_ERROR (_("unimplemented delete of array"), s->tok); auto g = glob.globals.find (var); if (g != glob.globals.end()) { value *frame = this_prog.lookup_reg(BPF_REG_10); int key_ofs, val_ofs; switch (var->type) { case pe_long: val_ofs = -8; this_prog.mk_st(this_ins, BPF_DW, frame, val_ofs, this_prog.new_imm(0)); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, this_prog.new_imm(val_ofs)); break; // ??? pe_string -> (2) TODO delete ref (but leave the storage for later cleanup of the entire containing struct?) // ??? pe_stats -> TODOXXX default: goto err; } key_ofs = val_ofs - 4; this_prog.mk_st(this_ins, BPF_W, frame, key_ofs, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats, or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported delete operation on statistics aggregate"), s->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(key_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); return; } auto i = this_locals->find (var); if (i != this_locals->end ()) { emit_mov (i->second, this_prog.new_imm(0)); return; } } else if (arrayindex *a = dynamic_cast(e)) { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; int key_ofs = 0; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported delete operation on statistics aggregate"), a->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_call(this_ins, BPF_FUNC_map_delete_elem, 2); return; } } err: throw SEMANTIC_ERROR (_("unknown lvalue"), e->tok); } // Translate string escape characters. // Accepts strings produced by parse.cxx lexer::scan and // by the eBPF embedded-code assembler. // // PR23559: This is currently an eBPF-only version of the function // that does not translate octal escapes. std::string translate_escapes (const interned_string &str, const token* tok) { std::string result; bool saw_esc = false; for (interned_string::const_iterator j = str.begin(); j != str.end(); ++j) { if (saw_esc) { saw_esc = false; switch (*j) { case 'f': result += '\f'; break; case 'n': result += '\n'; break; case 'r': result += '\r'; break; case 't': result += '\t'; break; case 'v': result += '\v'; break; // Translate octal and hex escapes: case '0' ... '7': { unsigned int c = 0; // An octal escape sequence is at most 3 characters. for (unsigned k = 0; k < 3; ++k) { c = c * 8 + (*j - '0'); ++j; if (j == str.end() || *j < '0' || *j > '7') { --j; // avoid swallowing extra char break; } } // TODO: this check should be performed by the parser if (c > 255 /* \377 */) throw SEMANTIC_ERROR (_("octal escape sequence out of range"), tok); if (c != 0) // XXX skip '\0' as it can break a transport tag result += (char) c; } break; case 'x': { unsigned int c = 0; ++j; // A hex escape sequence is arbitrarily long. // XXX: Behaviour is 'undefined' when overflowing char. for (; j != str.end(); ++j) { if (*j >= '0' && *j <= '9') c = c * 16 + (*j - '0'); else if (*j >= 'a' && *j <= 'f') c = c * 16 + (*j - 'a' + 10); else if (*j >= 'A' && *j <= 'F') c = c * 16 + (*j - 'A' + 10); else { --j; // avoid swallowing extra char break; } } // TODO: this check should be performed by the parser if (c > 0xff) throw SEMANTIC_ERROR (_("hex escape sequence out of range"), tok); if (c != 0) // XXX skip '\0' as it can break a transport tag result += (char) c; // If we've hit the end of the string , then return the result. if (j == str.end()) return result; } break; default: result += *j; break; } } else if (*j == '\\') saw_esc = true; else result += *j; } return result; } value * bpf_unparser::emit_literal_string (const std::string &str, const token *tok) { size_t str_bytes = str.size() + 1; if (str_bytes > BPF_MAXSTRINGLEN) throw SEMANTIC_ERROR(_("string literal too long"), tok); return this_prog.new_str(str); // will be lowered to a pointer by bpf-opt.cxx } void bpf_unparser::visit_literal_string (literal_string* e) { interned_string v = e->value; std::string str = translate_escapes(v, e->tok); result = emit_literal_string(str, e->tok); } void bpf_unparser::visit_literal_number (literal_number* e) { result = this_prog.new_imm(e->value); } void bpf_unparser::visit_binary_expression (binary_expression* e) { int code; if (e->op == "+") code = BPF_ADD; else if (e->op == "-") code = BPF_SUB; else if (e->op == "*") code = BPF_MUL; else if (e->op == "&") code = BPF_AND; else if (e->op == "|") code = BPF_OR; else if (e->op == "^") code = BPF_XOR; else if (e->op == "<<") code = BPF_LSH; else if (e->op == ">>") code = BPF_ARSH; else if (e->op == ">>>") code = BPF_RSH; else if (e->op == "/") code = BPF_DIV; else if (e->op == "%") code = BPF_MOD; else throw SEMANTIC_ERROR (_("unhandled binary operator"), e->tok); value *s0 = this_prog.new_reg(); // copy e->left into a seperate reg in case evaluating e->right // causes e->left to mutate (ex. x + x++). this_prog.mk_mov(this_ins, s0, emit_expr (e->left)); value *s1 = emit_expr (e->right); value *d = this_prog.new_reg (); this_prog.mk_binary (this_ins, code, d, s0, s1); result = d; } void bpf_unparser::visit_unary_expression (unary_expression* e) { if (e->op == "-") { // Note that negative literals appear in the script langauge as // unary negations over positive literals. if (literal_number *lit = dynamic_cast(e)) result = this_prog.new_imm(-(uint64_t)lit->value); else { value *s = emit_expr (e->operand); value *d = this_prog.new_reg(); this_prog.mk_unary (this_ins, BPF_NEG, d, s); result = d; } } else if (e->op == "~") { value *s1 = this_prog.new_imm(-1); value *s0 = emit_expr (e->operand); value *d = this_prog.new_reg (); this_prog.mk_binary (this_ins, BPF_XOR, d, s0, s1); result = d; } else if (e->op == "!") result = emit_bool (e); else if (e->op == "+") result = emit_expr (e->operand); else throw SEMANTIC_ERROR (_("unhandled unary operator"), e->tok); } void bpf_unparser::visit_pre_crement (pre_crement* e) { int dir; if (e->op == "++") dir = 1; else if (e->op == "--") dir = -1; else throw SEMANTIC_ERROR (_("unhandled crement operator"), e->tok); value *c = this_prog.new_imm(dir); value *v = emit_expr (e->operand); this_prog.mk_binary (this_ins, BPF_ADD, v, v, c); emit_store (e->operand, v); result = v; } void bpf_unparser::visit_post_crement (post_crement* e) { int dir; if (e->op == "++") dir = 1; else if (e->op == "--") dir = -1; else throw SEMANTIC_ERROR (_("unhandled crement operator"), e->tok); value *c = this_prog.new_imm(dir); value *r = this_prog.new_reg (); value *v = emit_expr (e->operand); emit_mov (r, v); this_prog.mk_binary (this_ins, BPF_ADD, v, v, c); emit_store (e->operand, v); result = r; } void bpf_unparser::visit_logical_or_expr (logical_or_expr* e) { result = emit_bool (e); } void bpf_unparser::visit_logical_and_expr (logical_and_expr* e) { result = emit_bool (e); } // ??? This matches the code in translate.cxx, but it looks like the // functionality has been disabled in the SystemTap parser. void bpf_unparser::visit_compound_expression (compound_expression* e) { e->left->visit(this); e->right->visit(this); // overwrite result of first expression } void bpf_unparser::visit_comparison (comparison* e) { result = emit_bool (e); } void bpf_unparser::visit_concatenation (concatenation* e) { if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported in bpf kernel probe"), e->tok); // We make use of many temporary registers because intermediate strings // can arise from function calls which may clobber registers that hold data. value *l = emit_expr (e->left); value* placeholder_l = this_prog.new_reg(); this_prog.mk_mov(this_ins, placeholder_l, l); value *r = emit_expr (e->right); value* placeholder_r = this_prog.new_reg(); this_prog.mk_mov(this_ins, placeholder_r, r); this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_1), placeholder_l); this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_2), placeholder_r); // Call function to concatenate. this_prog.mk_call(this_ins, BPF_FUNC_str_concat, 2); value* str = this_prog.new_reg(); this_prog.mk_mov(this_ins, str, this_prog.lookup_reg(BPF_REG_0)); result = str; } void bpf_unparser::visit_ternary_expression (ternary_expression* e) { block *join_block = this_prog.new_block (); value *r = this_prog.new_reg (); if (!has_side_effects (e->truevalue)) { block *else_block = this_prog.new_block (); emit_mov (r, emit_expr (e->truevalue)); emit_cond (e->cond, join_block, else_block); set_block (else_block); emit_mov (r, emit_expr (e->falsevalue)); emit_jmp (join_block); } else if (!has_side_effects (e->falsevalue)) { block *then_block = this_prog.new_block (); emit_mov (r, emit_expr (e->falsevalue)); emit_cond (e->cond, join_block, then_block); set_block (then_block); emit_mov (r, emit_expr (e->truevalue)); emit_jmp (join_block); } else { block *then_block = this_prog.new_block (); block *else_block = this_prog.new_block (); emit_cond (e->cond, then_block, else_block); set_block (then_block); emit_mov (r, emit_expr (e->truevalue)); emit_jmp (join_block); set_block (else_block); emit_mov (r, emit_expr (e->falsevalue)); emit_jmp (join_block); } set_block (join_block); result = r; } void bpf_unparser::visit_assignment (assignment* e) { value *r = emit_expr (e->right); if (e->op == "<<<") ; // XXX: handled by emit_store(), which checks for statistics lvalue else if (e->op != "=") { int code; if (e->op == "+=") code = BPF_ADD; else if (e->op == "-=") code = BPF_SUB; else if (e->op == "*=") code = BPF_MUL; else if (e->op == "/=") code = BPF_DIV; else if (e->op == "%=") code = BPF_MOD; else if (e->op == "<<=") code = BPF_LSH; else if (e->op == ">>=") code = BPF_ARSH; else if (e->op == "&=") code = BPF_AND; else if (e->op == "^=") code = BPF_XOR; else if (e->op == "|=") code = BPF_OR; else throw SEMANTIC_ERROR (_("unhandled assignment operator"), e->tok); value *l = emit_expr (e->left); this_prog.mk_binary (this_ins, code, l, l, r); r = l; } emit_store (e->left, r); result = r; } value * bpf_unparser::emit_context_var(bpf_context_vardecl *v) { // similar to visit_target_deref but the size/offset info // is given in v->size/v->offset instead of an expression. value *d = this_prog.new_reg(); if (v->size > 8) { // Compute a pointer but do not dereference. Needed // for array context variables. this_prog.mk_binary (this_ins, BPF_ADD, d, this_in_arg0, this_prog.new_imm(v->offset)); return d; } value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), this_in_arg0, this_prog.new_imm(v->offset)); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm(v->size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm(-v->size)); this_prog.use_tmp_space (v->size); this_prog.mk_call (this_ins, BPF_FUNC_probe_read, 3); int opc; switch (v->size) { case 1: opc = BPF_B; break; case 2: opc = BPF_H; break; case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: assert(0); } this_prog.mk_ld (this_ins, opc, d, frame, -v->size); if (v->is_signed && v->size < 8) { value *sh = this_prog.new_imm ((8 - v->size) * 8); this_prog.mk_binary (this_ins, BPF_LSH, d, d, sh); this_prog.mk_binary (this_ins, BPF_ARSH, d, d, sh); } return d; } void bpf_unparser::visit_symbol(symbol *s) { vardecl *v = s->referent; assert (v->arity < 1); if (bpf_context_vardecl *c = dynamic_cast(v)) { result = emit_context_var(c); return; } auto g = glob.globals.find (v); if (g != glob.globals.end()) { if (g->second.is_stat()) throw SEMANTIC_ERROR (_("unhandled statistics variable"), s->tok); // TODOXXX PR23476 value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_st(this_ins, BPF_W, frame, -4, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(4); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-4)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *cont_block = this_prog.new_block(); block *exit_block = get_exit_block(); // Note that the kernel bpf verifier requires that we check that // the pointer is non-null. this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, cont_block); set_block(cont_block); result = this_prog.new_reg(); switch (v->type) { case pe_long: this_prog.mk_ld(this_ins, BPF_DW, result, r0, 0); break; case pe_string: // Just return the address of the string within the map: emit_mov(result, r0); break; default: throw SEMANTIC_ERROR (_("unhandled global variable type"), s->tok); } return; } // ??? Maybe use result = this_locals.at (v); // to throw std::out_of_range on lookup failure. auto l = this_locals->find (v); if (l != this_locals->end()) { result = (*l).second; return; } throw SEMANTIC_ERROR (_("unknown variable"), s->tok); } void bpf_unparser::visit_arrayindex(arrayindex *e) { if (symbol *sym = dynamic_cast(e->base)) { vardecl *v = sym->referent; auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); if (g->second.is_stat()) throw SEMANTIC_ERROR (_("unhandled statistics variable"), v->tok); // TODOXXX PR23476 unsigned element = v->arity; int key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(e->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); block *t_block = this_prog.new_block(); block *f_block = this_prog.new_block(); block *join_block = this_prog.new_block(); result = this_prog.new_reg(); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); this_prog.mk_jcond(this_ins, EQ, r0, i0, t_block, f_block); // Key is not in the array. Evaluate to 0. set_block(t_block); emit_mov(result, i0); emit_jmp(join_block); // Key is in the array. Get value from stack. set_block(f_block); if (v->type == pe_long) this_prog.mk_ld(this_ins, BPF_DW, result, r0, 0); else emit_mov(result, r0); emit_jmp(join_block); set_block(join_block); } else throw SEMANTIC_ERROR(_("unhandled arrayindex expression"), e->tok); } void bpf_unparser::visit_array_in(array_in* e) { arrayindex *a = e->operand; if (symbol *s = dynamic_cast(a->base)) { vardecl *v = s->referent; auto g = glob.globals.find (v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown variable"), v->tok); unsigned element = v->arity; int key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch(v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), e->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); // TODO: Handle map_id < 0 for pe_stats or assert otherwise. if (g->second.map_id < 0) throw SEMANTIC_ERROR (_("unsupported array-in operation on statistics aggregate"), s->tok); // TODOXXX PR23476 this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), g->second.map_id); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); value *r0 = this_prog.lookup_reg(BPF_REG_0); value *i0 = this_prog.new_imm(0); value *i1 = this_prog.new_imm(1); value *d = this_prog.new_reg(); block *b0 = this_prog.new_block(); block *b1 = this_prog.new_block(); block *cont_block = this_prog.new_block(); this_prog.mk_jcond(this_ins, EQ, r0, i0, b0, b1); // d = 0 set_block(b0); this_prog.mk_mov(this_ins, d, i0); b0->fallthru = new edge(b0, cont_block); // d = 1 set_block(b1); this_prog.mk_mov(this_ins, d, i1); b1->fallthru = new edge(b1, cont_block); set_block(cont_block); result = d; return; } /// ??? hist_op throw SEMANTIC_ERROR(_("unhandled operand type"), a->base->tok); } void bpf_unparser::visit_target_deref (target_deref* e) { // ??? For some hosts, including x86_64, it works to read userspace // and kernelspace with the same function. For others, like s390x, // this only works to read kernelspace. value *src = emit_expr (e->addr); value *frame = this_prog.lookup_reg (BPF_REG_10); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_3), src); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm (e->size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm (-(int64_t)e->size)); this_prog.use_tmp_space(e->size); this_prog.mk_call(this_ins, BPF_FUNC_probe_read, 3); value *d = this_prog.new_reg (); int opc; switch (e->size) { case 1: opc = BPF_B; break; case 2: opc = BPF_H; break; case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: throw SEMANTIC_ERROR(_("unhandled deref size"), e->tok); } this_prog.mk_ld (this_ins, opc, d, frame, -e->size); if (e->signed_p && e->size < 8) { value *sh = this_prog.new_imm ((8 - e->size) * 8); this_prog.mk_binary (this_ins, BPF_LSH, d, d, sh); this_prog.mk_binary (this_ins, BPF_ARSH, d, d, sh); } result = d; } void bpf_unparser::visit_target_register (target_register* e) { // ??? Should not hard-code register size. int size = sizeof(void *); // ??? Should not hard-code register offsets in pr_regs. int ofs = 0; switch (e->regno) { #if defined(__i386__) case 0: ofs = offsetof(pt_regs, eax); break; case 1: ofs = offsetof(pt_regs, ecx); break; case 2: ofs = offsetof(pt_regs, edx); break; case 3: ofs = offsetof(pt_regs, ebx); break; case 4: ofs = offsetof(pt_regs, esp); break; case 5: ofs = offsetof(pt_regs, ebp); break; case 6: ofs = offsetof(pt_regs, esi); break; case 7: ofs = offsetof(pt_regs, edi); break; case 8: ofs = offsetof(pt_regs, eip); break; #elif defined(__x86_64__) case 0: ofs = offsetof(pt_regs, rax); break; case 1: ofs = offsetof(pt_regs, rdx); break; case 2: ofs = offsetof(pt_regs, rcx); break; case 3: ofs = offsetof(pt_regs, rbx); break; case 4: ofs = offsetof(pt_regs, rsi); break; case 5: ofs = offsetof(pt_regs, rdi); break; case 6: ofs = offsetof(pt_regs, rbp); break; case 7: ofs = offsetof(pt_regs, rsp); break; case 8: ofs = offsetof(pt_regs, r8); break; case 9: ofs = offsetof(pt_regs, r9); break; case 10: ofs = offsetof(pt_regs, r10); break; case 11: ofs = offsetof(pt_regs, r11); break; case 12: ofs = offsetof(pt_regs, r12); break; case 13: ofs = offsetof(pt_regs, r13); break; case 14: ofs = offsetof(pt_regs, r14); break; case 15: ofs = offsetof(pt_regs, r15); break; case 16: ofs = offsetof(pt_regs, rip); break; #elif defined(__arm__) case 0: ofs = offsetof(pt_regs, uregs[0]); break; case 1: ofs = offsetof(pt_regs, uregs[1]); break; case 2: ofs = offsetof(pt_regs, uregs[2]); break; case 3: ofs = offsetof(pt_regs, uregs[3]); break; case 4: ofs = offsetof(pt_regs, uregs[4]); break; case 5: ofs = offsetof(pt_regs, uregs[5]); break; case 6: ofs = offsetof(pt_regs, uregs[6]); break; case 7: ofs = offsetof(pt_regs, uregs[7]); break; case 8: ofs = offsetof(pt_regs, uregs[8]); break; case 9: ofs = offsetof(pt_regs, uregs[9]); break; case 10: ofs = offsetof(pt_regs, uregs[10]); break; case 11: ofs = offsetof(pt_regs, uregs[11]); break; case 12: ofs = offsetof(pt_regs, uregs[12]); break; case 13: ofs = offsetof(pt_regs, uregs[13]); break; case 14: ofs = offsetof(pt_regs, uregs[14]); break; case 15: ofs = offsetof(pt_regs, uregs[15]); break; #elif defined(__aarch64__) case 0: ofs = offsetof(user_pt_regs, regs[0]); break; case 1: ofs = offsetof(user_pt_regs, regs[1]); break; case 2: ofs = offsetof(user_pt_regs, regs[2]); break; case 3: ofs = offsetof(user_pt_regs, regs[3]); break; case 4: ofs = offsetof(user_pt_regs, regs[4]); break; case 5: ofs = offsetof(user_pt_regs, regs[5]); break; case 6: ofs = offsetof(user_pt_regs, regs[6]); break; case 7: ofs = offsetof(user_pt_regs, regs[7]); break; case 8: ofs = offsetof(user_pt_regs, regs[8]); break; case 9: ofs = offsetof(user_pt_regs, regs[9]); break; case 10: ofs = offsetof(user_pt_regs, regs[10]); break; case 11: ofs = offsetof(user_pt_regs, regs[11]); break; case 12: ofs = offsetof(user_pt_regs, regs[12]); break; case 13: ofs = offsetof(user_pt_regs, regs[13]); break; case 14: ofs = offsetof(user_pt_regs, regs[14]); break; case 15: ofs = offsetof(user_pt_regs, regs[15]); break; case 16: ofs = offsetof(user_pt_regs, regs[16]); break; case 17: ofs = offsetof(user_pt_regs, regs[17]); break; case 18: ofs = offsetof(user_pt_regs, regs[18]); break; case 19: ofs = offsetof(user_pt_regs, regs[19]); break; case 20: ofs = offsetof(user_pt_regs, regs[20]); break; case 21: ofs = offsetof(user_pt_regs, regs[21]); break; case 22: ofs = offsetof(user_pt_regs, regs[22]); break; case 23: ofs = offsetof(user_pt_regs, regs[23]); break; case 24: ofs = offsetof(user_pt_regs, regs[24]); break; case 25: ofs = offsetof(user_pt_regs, regs[25]); break; case 26: ofs = offsetof(user_pt_regs, regs[26]); break; case 27: ofs = offsetof(user_pt_regs, regs[27]); break; case 28: ofs = offsetof(user_pt_regs, regs[28]); break; case 29: ofs = offsetof(user_pt_regs, regs[29]); break; case 30: ofs = offsetof(user_pt_regs, regs[30]); break; case 31: ofs = offsetof(user_pt_regs, sp); break; #elif defined(__powerpc__) case 0: ofs = offsetof(pt_regs, gpr[0]); break; case 1: ofs = offsetof(pt_regs, gpr[1]); break; case 2: ofs = offsetof(pt_regs, gpr[2]); break; case 3: ofs = offsetof(pt_regs, gpr[3]); break; case 4: ofs = offsetof(pt_regs, gpr[4]); break; case 5: ofs = offsetof(pt_regs, gpr[5]); break; case 6: ofs = offsetof(pt_regs, gpr[6]); break; case 7: ofs = offsetof(pt_regs, gpr[7]); break; case 8: ofs = offsetof(pt_regs, gpr[8]); break; case 9: ofs = offsetof(pt_regs, gpr[9]); break; case 10: ofs = offsetof(pt_regs, gpr[10]); break; case 11: ofs = offsetof(pt_regs, gpr[11]); break; case 12: ofs = offsetof(pt_regs, gpr[12]); break; case 13: ofs = offsetof(pt_regs, gpr[13]); break; case 14: ofs = offsetof(pt_regs, gpr[14]); break; case 15: ofs = offsetof(pt_regs, gpr[15]); break; case 16: ofs = offsetof(pt_regs, gpr[16]); break; case 17: ofs = offsetof(pt_regs, gpr[17]); break; case 18: ofs = offsetof(pt_regs, gpr[18]); break; case 19: ofs = offsetof(pt_regs, gpr[19]); break; case 20: ofs = offsetof(pt_regs, gpr[20]); break; case 21: ofs = offsetof(pt_regs, gpr[21]); break; case 22: ofs = offsetof(pt_regs, gpr[22]); break; case 23: ofs = offsetof(pt_regs, gpr[23]); break; case 24: ofs = offsetof(pt_regs, gpr[24]); break; case 25: ofs = offsetof(pt_regs, gpr[25]); break; case 26: ofs = offsetof(pt_regs, gpr[26]); break; case 27: ofs = offsetof(pt_regs, gpr[27]); break; case 28: ofs = offsetof(pt_regs, gpr[28]); break; case 29: ofs = offsetof(pt_regs, gpr[29]); break; case 30: ofs = offsetof(pt_regs, gpr[30]); break; case 31: ofs = offsetof(pt_regs, gpr[31]); break; case 64: ofs = offsetof(pt_regs, ccr); break; case 66: ofs = offsetof(pt_regs, msr); break; case 101: ofs = offsetof(pt_regs, xer); break; case 108: ofs = offsetof(pt_regs, link); break; case 109: ofs = offsetof(pt_regs, ctr); break; case 118: ofs = offsetof(pt_regs, dsisr); break; case 119: ofs = offsetof(pt_regs, dar); break; # if !defined(__powerpc64__) case 100: ofs = offsetof(pt_regs, mq); break; # endif // ??? NIP is not assigned to a dwarf register number at all. #elif defined(__s390__) case 0: ofs = offsetof(user_regs_struct, gprs[0]); break; case 1: ofs = offsetof(user_regs_struct, gprs[1]); break; case 2: ofs = offsetof(user_regs_struct, gprs[2]); break; case 3: ofs = offsetof(user_regs_struct, gprs[3]); break; case 4: ofs = offsetof(user_regs_struct, gprs[4]); break; case 5: ofs = offsetof(user_regs_struct, gprs[5]); break; case 6: ofs = offsetof(user_regs_struct, gprs[6]); break; case 7: ofs = offsetof(user_regs_struct, gprs[7]); break; case 8: ofs = offsetof(user_regs_struct, gprs[8]); break; case 9: ofs = offsetof(user_regs_struct, gprs[9]); break; case 10: ofs = offsetof(user_regs_struct, gprs[10]); break; case 11: ofs = offsetof(user_regs_struct, gprs[11]); break; case 12: ofs = offsetof(user_regs_struct, gprs[12]); break; case 13: ofs = offsetof(user_regs_struct, gprs[13]); break; case 14: ofs = offsetof(user_regs_struct, gprs[14]); break; case 15: ofs = offsetof(user_regs_struct, gprs[15]); break; // Note that the FPRs are not numbered sequentially case 16: ofs = offsetof(user_regs_struct, fp_regs.fprs[0]); break; case 17: ofs = offsetof(user_regs_struct, fp_regs.fprs[2]); break; case 18: ofs = offsetof(user_regs_struct, fp_regs.fprs[4]); break; case 19: ofs = offsetof(user_regs_struct, fp_regs.fprs[6]); break; case 20: ofs = offsetof(user_regs_struct, fp_regs.fprs[1]); break; case 21: ofs = offsetof(user_regs_struct, fp_regs.fprs[3]); break; case 22: ofs = offsetof(user_regs_struct, fp_regs.fprs[5]); break; case 23: ofs = offsetof(user_regs_struct, fp_regs.fprs[7]); break; case 24: ofs = offsetof(user_regs_struct, fp_regs.fprs[8]); break; case 25: ofs = offsetof(user_regs_struct, fp_regs.fprs[10]); break; case 26: ofs = offsetof(user_regs_struct, fp_regs.fprs[12]); break; case 27: ofs = offsetof(user_regs_struct, fp_regs.fprs[14]); break; case 28: ofs = offsetof(user_regs_struct, fp_regs.fprs[9]); break; case 29: ofs = offsetof(user_regs_struct, fp_regs.fprs[11]); break; case 30: ofs = offsetof(user_regs_struct, fp_regs.fprs[13]); break; case 31: ofs = offsetof(user_regs_struct, fp_regs.fprs[15]); break; // ??? Omitting CTRs (not in user_regs_struct) // ??? Omitting ACRs (lazy, and unlikely to appear in unwind) case 64: ofs = offsetof(user_regs_struct, psw.mask); break; case 65: ofs = offsetof(user_regs_struct, psw.addr); break; #endif default: throw SEMANTIC_ERROR(_("unhandled register number"), e->tok); } value *frame = this_prog.lookup_reg (BPF_REG_10); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), this_in_arg0, this_prog.new_imm (ofs)); this_prog.mk_mov (this_ins, this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm (size)); this_prog.mk_binary (this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_1), frame, this_prog.new_imm (-size)); this_prog.use_tmp_space(size); this_prog.mk_call(this_ins, BPF_FUNC_probe_read, 3); value *d = this_prog.new_reg (); int opc; switch (size) { case 4: opc = BPF_W; break; case 8: opc = BPF_DW; break; default: throw SEMANTIC_ERROR(_("unhandled register size"), e->tok); } this_prog.mk_ld (this_ins, opc, d, frame, -size); result = d; } // Emit unrolled-loop code to write string literal from src to // dest[+ofs] in 4-byte chunks, with optional zero-padding up to // BPF_MAXSTRINGLEN. // // ??? Could use 8-byte chunks if we're starved for instruction count. // ??? Endianness of the target comes into play here. value * emit_simple_literal_str(program &this_prog, insn_inserter &this_ins, value *dest, int ofs, const std::string &src, bool zero_pad) { #ifdef DEBUG_CODEGEN this_ins.notes.push("str"); #endif size_t str_bytes = src.size() + 1; size_t str_words = (str_bytes + 3) / 4; for (unsigned i = 0; i < str_words; ++i) { uint32_t word = 0; for (unsigned j = 0; j < 4; ++j) if (i * 4 + j < str_bytes - 1) { // ??? assuming little-endian target // // Must cast each signed char in src to unsigned char first // in order to avoid the implicit sign extension resulting // from the uint32_t cast. word |= ((uint32_t)(unsigned char)src[i * 4 + j]) << (j * 8); } this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(word)); } // XXX: bpf_map_update_elem and bpf_map_lookup_elem will always copy // exactly BPF_MAXSTRINGLEN bytes, which can cause problems with // garbage data beyond the end of the string, particularly for map // keys. The silliest way to solve this is by padding every string // constant to BPF_MAXSTRINGLEN bytes, but the stack isn't really // big enough for this to work with practical programs. // // So instead we have this optional code to pad the string, and // enable the option only when copying a string to a map key. if (zero_pad) { for (unsigned i = str_words; i < BPF_MAXSTRINGLEN / 4; i++) { this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(0)); } } value *out = this_prog.new_reg(); this_prog.mk_binary(this_ins, BPF_ADD, out, dest, this_prog.new_imm(ofs)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // str #endif return out; } // Emit unrolled-loop code to write string value from src to // dest[+ofs] in 4-byte chunks, with optional zero-padding up to // BPF_MAXSTRINGLEN. // // TODO (PR23860): This code does not work when the source and target // regions overlap. // // ??? Could use 8-byte chunks if we're starved for instruction count. // ??? Endianness of the target may come into play here. value * bpf_unparser::emit_string_copy(value *dest, int ofs, value *src, bool zero_pad) { if (src->is_str()) { /* If src is a string literal, its exact length is known and we can emit simpler, unconditional string copying code. */ std::string str = src->str(); return emit_simple_literal_str(this_prog, this_ins, dest, ofs, str, zero_pad); } #ifdef DEBUG_CODEGEN this_ins.notes.push(zero_pad ? "strcpy_zero_pad" : "strcpy"); #endif size_t str_bytes = BPF_MAXSTRINGLEN; size_t str_words = (str_bytes + 3) / 4; value *out = this_prog.new_reg(); // -- where to store the final string addr block *return_block = this_prog.new_block(); // XXX: It is sometimes possible to receive src == NULL. // trace_printk() did not care about being passed such values, but // applying strcpy() to NULL will (understandably) fail the // verifier. Therefore, we need to check for this possibility first: block *null_copy_block = this_prog.new_block(); block *normal_block = this_prog.new_block(); this_prog.mk_jcond(this_ins, EQ, src, this_prog.new_imm(0), null_copy_block, normal_block); // Only call emit_simple_literal_str() if we can't reuse the zero-pad code: if (!zero_pad) { set_block(null_copy_block); value *empty_str = emit_simple_literal_str (this_prog, this_ins, dest, ofs, "", false); emit_mov(out, empty_str); emit_jmp(return_block); } set_block(normal_block); /* block_A[i] copies src[4*i] to dest[4*i+ofs]; block_B[i] copies 0 to dest[4*i+ofs], produced only if zero_pad is true. */ std::vector block_A, block_B; block_A.push_back(this_ins.get_block()); if (zero_pad) block_B.push_back(null_copy_block); for (unsigned i = 0; i < str_words; ++i) { block *next_block; if (i < str_words - 1) { /* Create block_A[i+1], block_B[i+1]: */ block_A.push_back(this_prog.new_block()); if (zero_pad) block_B.push_back(this_prog.new_block()); next_block = block_A[i+1]; } else { next_block = return_block; } set_block(block_A[i]); value *word = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_W, word, src, (int32_t)i * 4); this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, word); /* Finish unconditionally after copying BPF_MAXSTRINGLEN bytes: */ if (i == str_words - 1) { emit_jmp(next_block); continue; } // Determining whether a word contains a NUL byte is a neat bit-fiddling puzzle. // Kudos go to Valgrind and Memcheck for showing the way, along the lines of: // // b1 := word & 0xff; nz1 := (-b1)|b1; all_nz = nz1 // b2 := (word >> 8) & 0xff; nz2 := (-b2)|b2; all_nz = all_nz & nz2 // b3 := (word >> 16) & 0xff; nz3 := (-b3)|b3; all_nz = all_nz & nz3 // b4 := (word >> 24) & 0xff; nz4 := (-b4)|b4; all_nz = all_nz & nz4 // all_nz := nz1 & nz2 & nz3 & nz4 // // Here, nzX is 0 iff bX is NUL, all_nz is 0 iff word contains a NUL byte. value *all_nz = this_prog.new_reg(); value *bN = this_prog.new_reg(); value *nZ = this_prog.new_reg(); for (unsigned j = 0; j < 4; j++) { unsigned shift = 8*j; if (shift != 0) { this_prog.mk_binary(this_ins, BPF_RSH, bN, word, this_prog.new_imm(shift)); } else { emit_mov(bN, word); } this_prog.mk_binary(this_ins, BPF_AND, bN, bN, this_prog.new_imm(0xff)); this_prog.mk_unary(this_ins, BPF_NEG, nZ, bN); this_prog.mk_binary(this_ins, BPF_OR, nZ, nZ, bN); if (j == 0) { emit_mov(all_nz, nZ); } else { this_prog.mk_binary(this_ins, BPF_AND, all_nz, all_nz, nZ); } } this_prog.mk_jcond(this_ins, EQ, all_nz, this_prog.new_imm(0), zero_pad ? block_B[i+1] : return_block, next_block); } // XXX: Zero-padding is only used under specific circumstances; // see the corresponding comment in emit_simple_literal_str(). if (zero_pad) { for (unsigned i = 0; i < str_words; ++i) { set_block(block_B[i]); this_prog.mk_st(this_ins, BPF_W, dest, (int32_t)i * 4 + ofs, this_prog.new_imm(0)); emit_jmp(i < str_words - 1 ? block_B[i+1] : return_block); } } set_block(return_block); this_prog.mk_binary(this_ins, BPF_ADD, out, dest, this_prog.new_imm(ofs)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); // strcpy #endif return out; } // Used for passing long arguments on the stack where an address is // expected. Store val in a stack slot at offset ofs and store the // stack address of val in arg. void bpf_unparser::emit_long_arg(value *arg, int ofs, value *val) { value *frame = this_prog.lookup_reg(BPF_REG_10); this_prog.mk_st(this_ins, BPF_DW, frame, ofs, val); this_prog.mk_binary(this_ins, BPF_ADD, arg, frame, this_prog.new_imm(ofs)); } // Used for passing string arguments on the stack where an address is // expected. Zero-pad and copy str to the stack at offset ofs and // store the stack address of str in arg. Zero-padding is required // since functions such as map_update_elem will expect a fixed-length // value of BPF_MAXSTRINGLEN for string map keys. void bpf_unparser::emit_str_arg(value *arg, int ofs, value *str) { value *frame = this_prog.lookup_reg(BPF_REG_10); value *out = emit_string_copy(frame, ofs, str, true /* zero pad */); emit_mov(arg, out); } value * bpf_unparser::emit_functioncall (functiondecl *f, const std::vector& args) { // Create a new map for the function's local variables. locals_map *locals = new_locals(f->locals); // Install locals in the map. unsigned n = args.size(); for (unsigned i = 0; i < n; ++i) { const locals_map::value_type v (f->formal_args[i], args[i]); auto ok = locals->insert (v); assert (ok.second); } locals_map *old_locals = this_locals; this_locals = locals; block *join_block = this_prog.new_block (); value *retval = this_prog.new_reg (); func_calls.push_back (f); func_return.push_back (join_block); func_return_val.push_back (retval); emit_stmt (f->body); func_return_val.pop_back (); func_return.pop_back (); func_calls.pop_back (); if (in_block ()) emit_jmp (join_block); set_block (join_block); this_locals = old_locals; delete locals; return retval; } void bpf_unparser::visit_functioncall (functioncall *e) { // ??? Function overloading isn't handled. if (e->referents.size () != 1) throw SEMANTIC_ERROR (_("unhandled function overloading"), e->tok); functiondecl *f = e->referents[0]; // ??? For now, always inline the function call. for (auto i = func_calls.begin(); i != func_calls.end(); ++i) if (f == *i) throw SEMANTIC_ERROR (_("unhandled function recursion"), e->tok); // XXX: Should have been checked in earlier pass. assert (e->args.size () == f->formal_args.size ()); // Evaluate and collect the function arguments. std::vector args; for (unsigned n = e->args.size (), i = 0; i < n; ++i) { value *r = this_prog.new_reg (); emit_mov (r, emit_expr (e->args[i])); args.push_back(r); } result = emit_functioncall(f, args); } int globals::intern_string (std::string& str) { if (interned_str_map.count(str) > 0) return interned_str_map[str]; int this_idx = interned_strings.size(); interned_strings.push_back(str); interned_str_map[str] = this_idx; return this_idx; } // Generates perf_event_output transport message glue code. // // XXX: Based on the interface of perf_event_output, this_in_arg0 must // be a pt_regs * struct. In fact, the BPF program apparently has to // pass the context given to the program as arg 0, regardless of the // type. For the sake of user-space helpers (e.g. begin/end) we just // pass NULL when this_in_arg0 is not available. Should not happen // in-kernel where BPF programs apparently always have a context, but // it's worth noting the assumptions here. // // TODO: We need to specify the transport message format more // compactly. Thus far, everything is written as double-words to avoid // getting 'misaligned stack access' errors from the verifier. // // TODO: We could extend this interface to allow passing multiple // values in one transport message, e.g. a sequence of pe_long. void bpf_unparser::emit_transport_msg (globals::perf_event_type msg, value *arg, exp_type format_type) { // Harmonize the information in arg, format_type, and msg: if (arg != NULL) { if (format_type == pe_unknown) format_type = arg->format_type; assert(format_type == arg->format_type || arg->format_type == pe_unknown); if (arg->is_str() && arg->is_format() && format_type == pe_unknown) format_type = pe_string; // XXX: Finally, pick format_type based on msg (inferred from format string): if (msg == globals::STP_PRINTF_ARG_LONG && format_type == pe_unknown) format_type = pe_long; else if (msg == globals::STP_PRINTF_ARG_STR && format_type == pe_unknown) format_type = pe_string; } unsigned arg_size = 0; if (arg != NULL) switch (format_type) { case pe_long: arg_size = 8; break; case pe_string: if (arg->is_str() && arg->is_format()) arg_size = sizeof(BPF_TRANSPORT_ARG); // pass index of interned str else { arg_size = BPF_MAXSTRINGLEN; // XXX hack for PR25169: Unfortunately, we may conflict with prior // stack allocations in embedded assembly code which were done // before seeing this transport message. So we need to allocate // below max_tmp_space. Could switch to a preallocation scheme that // scans the code for string operations. arg_size += this_prog.max_tmp_space; } break; default: assert(false); // XXX: Should be caught earlier. } // XXX: The following force-aligns all elements to double word boundary. // Could probably switch to single-word alignment with more careful design. if (arg_size % 8 != 0) arg_size += 8 - arg_size % 8; int arg_ofs = -arg_size; int msg_ofs = arg_ofs-sizeof(BPF_TRANSPORT_VAL); if (msg_ofs % 8 != 0) msg_ofs -= (8 - (-msg_ofs) % 8); this_prog.use_tmp_space(-msg_ofs); value *frame = this_prog.lookup_reg(BPF_REG_10); // store arg if (arg != NULL) switch (format_type) { case pe_long: this_prog.mk_st(this_ins, BPF_DW, frame, arg_ofs, arg); break; case pe_string: if (arg->is_str() && arg->is_format()) { int idx = glob.intern_string(arg->str_val); this_prog.mk_st(this_ins, BPF_DW, frame, arg_ofs, this_prog.new_imm(idx)); } else emit_string_copy(frame, arg_ofs, arg, false /* no zero pad */); break; default: assert(false); // XXX: Should be caught earlier. } // double word -- XXX verifier forces aligned access this_prog.mk_st(this_ins, BPF_DW, frame, msg_ofs, this_prog.new_imm(msg)); value *ctx = this_in_arg0 == NULL ? this_prog.new_imm(0) : this_in_arg0; emit_mov(this_prog.lookup_reg(BPF_REG_1), ctx); // ctx this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_2), globals::perf_event_map_idx); emit_mov(this_prog.lookup_reg(BPF_REG_3), this_prog.new_imm(BPF_F_CURRENT_CPU)); // flags this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_4), frame, this_prog.new_imm(msg_ofs)); emit_mov(this_prog.lookup_reg(BPF_REG_5), this_prog.new_imm(-msg_ofs)); this_prog.mk_call(this_ins, BPF_FUNC_perf_event_output, 5); } globals::perf_event_type printf_arg_type (value *arg, const print_format::format_component &c) { switch (arg->format_type) { case pe_long: return globals::STP_PRINTF_ARG_LONG; case pe_string: return globals::STP_PRINTF_ARG_STR; case pe_unknown: // XXX: Could be a lot stricter and force // arg->format_type and c.type to match. switch (c.type) { case print_format::conv_pointer: case print_format::conv_number: case print_format::conv_char: case print_format::conv_memory: case print_format::conv_memory_hex: case print_format::conv_binary: return globals::STP_PRINTF_ARG_LONG; case print_format::conv_string: return globals::STP_PRINTF_ARG_STR; default: assert(false); // XXX } default: assert(false); // XXX: Should be caught earlier. } } value * bpf_unparser::emit_print_format (const std::string& format, const std::vector& actual, bool print_to_stream, const token *tok) { size_t nargs = actual.size(); if (!print_to_stream) { // PR24528: Userspace-only feature. if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported sprintf in bpf kernel probe"), tok); // TODO: sprintf() has an additional constraint on arguments due // to passing them in a very small number of registers. if (actual.size() > BPF_MAXSPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to sprintf", "too many arguments to sprintf (%zu)", actual.size(), actual.size()), tok); // Emit an ordinary function call to sprintf. size_t format_bytes = format.size() + 1; this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_1), this_prog.new_str(format, true /*format_str*/)); emit_mov(this_prog.lookup_reg(BPF_REG_2), this_prog.new_imm(format_bytes)); for (size_t i = 0; i < nargs; ++i) emit_mov(this_prog.lookup_reg(BPF_REG_3 + i), actual[i]); this_prog.mk_call(this_ins, BPF_FUNC_sprintf, nargs + 2); return this_prog.lookup_reg(BPF_REG_0); } // Filter components to include only non-literal printf arguments: std::vector all_components = print_format::string_to_components(format); // XXX: Could pass print_format * to avoid extra parse, except for embedded-code. std::vector components; for (auto &c : all_components) { if (c.type != print_format::conv_literal) components.push_back(c); } if (components.size() != nargs) { if (tok != NULL) throw SEMANTIC_ERROR(_F("format string expected %zu args, got %zu", components.size(), nargs), tok); else assert(false); // XXX: Should be caught earlier. } emit_transport_msg(globals::STP_PRINTF_START, this_prog.new_imm(nargs), pe_long); emit_transport_msg(globals::STP_PRINTF_FORMAT, this_prog.new_str(format, true /*format_str*/)); for (size_t i = 0; i < nargs; ++i) emit_transport_msg(printf_arg_type(actual[i], components[i]), actual[i]); emit_transport_msg(globals::STP_PRINTF_END); return NULL; } void bpf_unparser::visit_print_format (print_format *e) { if (e->hist) throw SEMANTIC_ERROR (_("unhandled histogram print"), e->tok); size_t nargs = e->args.size(); size_t i; if (nargs > BPF_MAXPRINTFARGS) throw SEMANTIC_ERROR(_NF("additional argument to print", "too many arguments to print (%zu)", e->args.size(), e->args.size()), e->tok); std::vector actual; for (i = 0; i < nargs; ++i) { value *arg = emit_expr(e->args[i]); arg->format_type = e->args[i]->type; actual.push_back(arg); } for (size_t i = 0; i < nargs; ++i) if (actual[i]->format_type == pe_stats) throw SEMANTIC_ERROR (_("cannot print a raw stats object"), e->args[i]->tok); else if (actual[i]->format_type != pe_long && actual[i]->format_type != pe_string) throw SEMANTIC_ERROR (_("cannot print unknown expression type"), e->args[i]->tok); std::string format; if (e->print_with_format) { // If this is a long string with no actual arguments, it will be // interned in the format string table as usual. interned_string fstr = e->raw_components; format += translate_escapes(fstr, e->tok); } else { // Synthesize a print-format string if the user didn't // provide one; the synthetic string simply contains one // directive for each argument. std::string delim; if (e->print_with_delim) { interned_string dstr = e->delimiter; for (interned_string::const_iterator j = dstr.begin(); j != dstr.end(); ++j) { if (*j == '%') delim += '%'; delim += *j; } } for (i = 0; i < nargs; ++i) { if (i > 0 && e->print_with_delim) format += delim; switch (e->args[i]->type) { default: case pe_unknown: throw SEMANTIC_ERROR(_("cannot print unknown expression type"), e->args[i]->tok); case pe_stats: throw SEMANTIC_ERROR(_("cannot print a raw stats object"), e->args[i]->tok); case pe_long: format += "%ld"; break; case pe_string: format += "%s"; break; } } if (e->print_with_newline) format += '\n'; } size_t format_bytes = format.size() + 1; if (format_bytes > BPF_MAXFORMATLEN) throw SEMANTIC_ERROR(_("Format string for print too long"), e->tok); value *retval = emit_print_format(format, actual, e->print_to_stream, e->tok); if (retval != NULL) result = retval; } void bpf_unparser::visit_stat_op (stat_op* e) { #ifdef DEBUG_CODEGEN this_ins.notes.push("stat_get"); #endif // XXX PR24528: This code is userspace-only. Unfortunately, BPF does // not allow accessing percpu map elements from other cpus in // kernel-space, so for now we will just issue a fake helper call // and let the userspace sort this out. // // "I don't see a case where accessing other cpu per-cpu element // wouldn't be a bug in the program." // https://lore.kernel.org/patchwork/patch/634595/ if (this_prog.target == target_kernel_bpf) throw SEMANTIC_ERROR(_("unsupported extraction function in bpf kernel probe"), e->tok); switch (e->ctype) { case sc_average: case sc_count: case sc_sum: break; // ok to pass to the helper case sc_none: assert (0); // should not happen, as sc_none is only used in foreach slots // TODO PR23476: Not yet implemented. case sc_min: case sc_max: case sc_variance: default: throw SEMANTIC_ERROR (_("unhandled stat op"), e->tok); } // identify the aggregate for the userspace interpreter globals::agg_idx agg = 0; if (symbol *s = dynamic_cast(e->stat)) // scalar stat value { vardecl *v = s->referent; assert (v->arity == 0); agg = 0; // id for scalar stat value if (v->type != pe_stats) throw SEMANTIC_ERROR (_("unexpected aggregate of non-statistic"), v->tok); auto g = glob.globals.find (v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown statistics variable"), v->tok); if (!g->second.is_stat()) throw SEMANTIC_ERROR(_("not a statistics variable"), v->tok); // Store the long on the stack and pass its address: emit_long_arg(this_prog.lookup_reg(BPF_REG_2), -8, this_prog.new_imm(g->second.idx)); this_prog.use_tmp_space(8); } else if (arrayindex *a = dynamic_cast(e->stat)) // array stat value { if (symbol *a_sym = dynamic_cast(a->base)) { vardecl *v = a_sym->referent; agg = glob.aggregates[v]; // id for array stat value auto g = glob.globals.find(v); if (g == glob.globals.end()) throw SEMANTIC_ERROR(_("unknown array variable"), v->tok); unsigned element = v->arity; unsigned key_ofs = 0; // iterate over the elements do { --element; value *idx = emit_expr(a->indexes[element]); switch (v->index_types[element]) { case pe_long: // Store the long on the stack and pass its address: key_ofs -= 8; emit_long_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; case pe_string: // Zero-pad and copy the string to the stack and pass its address: key_ofs -= BPF_MAXSTRINGLEN; emit_str_arg(this_prog.lookup_reg(BPF_REG_2), key_ofs, idx); break; default: throw SEMANTIC_ERROR(_("unhandled index type"), v->tok); } } while (element); this_prog.use_tmp_space(-key_ofs); } else throw SEMANTIC_ERROR(_("unknown statistics value"), e->stat->tok); } emit_mov(this_prog.lookup_reg(BPF_REG_1), this_prog.new_imm(agg)); // agg_idx uint64_t sc_type = globals::intern_sc_type(e->ctype); emit_mov(this_prog.lookup_reg(BPF_REG_3), this_prog.new_imm(sc_type)); this_prog.mk_call (this_ins, BPF_FUNC_stapbpf_stat_get, 3); result = this_prog.new_reg(); emit_mov(result, this_prog.lookup_reg(BPF_REG_0)); #ifdef DEBUG_CODEGEN this_ins.notes.pop(); #endif } void bpf_unparser::visit_hist_op (hist_op *e) { // TODO PR24424: Implement as a perf-request or as a userspace-only helper. throw SEMANTIC_ERROR (_("unhandled hist op"), e->tok); } // } // anon namespace void build_internal_globals(globals& glob) { struct vardecl exit; exit.name = "__global___STAPBPF_exit"; exit.unmangled_name = "__STAPBPF_exit"; exit.type = pe_long; exit.arity = 0; glob.internal_exit = exit; struct vardecl errors; errors.name = "__global___STAPBPF_errors"; errors.unmangled_name = "__STAPBPF_errors"; errors.type = pe_long; errors.arity = 0; glob.internal_errors = errors; glob.globals.insert(std::pair (&glob.internal_exit, globals::map_slot(0, globals::EXIT))); glob.globals.insert(std::pair (&glob.internal_errors, globals::map_slot(0, globals::ERRORS))); glob.maps.push_back ({ BPF_MAP_TYPE_HASH, 4, /* NB: value_size */ 8, globals::NUM_INTERNALS, 0 }); // PR22330: Use a PERF_EVENT_ARRAY map for message transport: glob.maps.push_back ({ BPF_MAP_TYPE_PERF_EVENT_ARRAY, 4, 4, globals::NUM_CPUS_PLACEHOLDER, 0 }); // XXX: NUM_CPUS_PLACEHOLDER will be replaced at loading time. } static void translate_globals (globals &glob, systemtap_session& s) { int long_map = -1; // -- for scalar long variables int str_map = -1; // -- for scalar string variables build_internal_globals(glob); for (auto i = s.globals.begin(); i != s.globals.end(); ++i) { vardecl *v = *i; int this_map, this_idx; switch (v->arity) { case 0: // scalars switch (v->type) { case pe_long: if (long_map < 0) { globals::bpf_map_def m = { BPF_MAP_TYPE_ARRAY, 4, 8, 0, 0 }; long_map = glob.maps.size(); glob.maps.push_back(m); } this_map = long_map; this_idx = glob.maps[long_map].max_entries++; break; case pe_string: if (str_map < 0) { globals::bpf_map_def m = { BPF_MAP_TYPE_ARRAY, 4, BPF_MAXSTRINGLEN, 0, 0 }; str_map = glob.maps.size(); glob.maps.push_back(m); } this_map = str_map; this_idx = glob.maps[str_map].max_entries++; break; case pe_stats: if (glob.scalar_stats.empty()) { for (globals::stat_field f : globals::stat_fields) { globals::bpf_map_def m = { BPF_MAP_TYPE_PERCPU_ARRAY, 4, 8, 0, 0 }; globals::map_idx map_id = glob.maps.size(); glob.maps.push_back(m); glob.scalar_stats[f] = map_id; } // ??? TODO: skip/drop any stat fields unused by all aggregates // TODO PR24424: special case for 'histogram' field } this_map = -1; // Mark as statistical aggregate. // Add one element to each stat field's array: this_idx = -1; for (globals::stat_field f : globals::stat_fields) { // XXX: Not all aggregates use the same stat // fields. Some slots may therefore be unused, but // it simplifies things a lot to use the same index // for all fields of an aggregate. int map_id = glob.scalar_stats[f]; int check_idx = glob.maps[map_id].max_entries++; if (this_idx == -1) this_idx = check_idx; else assert(check_idx == this_idx); // XXX: All arrays same length. } assert(this_idx >= 0); break; default: throw SEMANTIC_ERROR (_("unhandled scalar type"), v->tok); } break; default: // arrays (one or more dimension) { unsigned key_size = 0; unsigned max_entries; unsigned element = v->arity; do { --element; switch (v->index_types[element]) { case pe_long: key_size += 8; break; case pe_string: key_size += BPF_MAXSTRINGLEN; break; default: throw SEMANTIC_ERROR (_("unhandled index type"), v->tok); } } while (element); max_entries = v->maxsize > 0 ? v->maxsize : BPF_MAXMAPENTRIES; if (v->type == pe_stats) { glob.array_stats[v] = globals::stats_map(); for (globals::stat_field f : globals::stat_fields) { globals::bpf_map_def m = { BPF_MAP_TYPE_PERCPU_HASH, 0, 0, 0, 0 }; m.key_size = key_size; m.max_entries = max_entries; m.value_size = 8; // XXX: for stat data, sizeof(uint64_t) int map_id = glob.maps.size(); glob.maps.push_back(m); glob.array_stats[v][f] = map_id; // Assign an agg_idx to identify the aggregate from BPF code. // XXX: agg_idx 0 is reserved for scalar_stats: glob.aggregates[v] = 1 + glob.aggregates.size(); // ??? TODO: skip/drop any stat fields unused by this aggregate // TODO PR24424: special case for 'histogram' field } this_map = -1; // Mark as statistical aggregate. this_idx = -1; // Mark as array. } else { globals::bpf_map_def m = { BPF_MAP_TYPE_HASH, 0, 0, 0, 0 }; m.key_size = key_size; switch (v->type) { case pe_long: m.value_size = 8; break; case pe_string: m.value_size = BPF_MAXSTRINGLEN; break; // XXX: case pe_stats is handled above default: throw SEMANTIC_ERROR (_("unhandled array element type"), v->tok); } m.max_entries = max_entries; this_map = glob.maps.size(); glob.maps.push_back(m); this_idx = -1; // XXX: was 0, check if this is used correctly } } break; } assert(this_map != globals::internal_map_idx); auto ok = (glob.globals.insert (std::pair (v, globals::map_slot(this_map, this_idx)))); assert(ok.second); } } struct BPF_Section { Elf_Scn *scn; Elf64_Shdr *shdr; std::string name; Stap_Strent *name_ent; Elf_Data *data; bool free_data; // NB: then data must have been malloc()'d! BPF_Section(const std::string &n); ~BPF_Section(); }; BPF_Section::BPF_Section(const std::string &n) : scn(0), name(n), name_ent(0), data(0), free_data(false) { } BPF_Section::~BPF_Section() { if (free_data) free(data->d_buf); } struct BPF_Symbol { std::string name; Stap_Strent *name_ent; Elf64_Sym sym; BPF_Symbol(const std::string &n, BPF_Section *, long); }; BPF_Symbol::BPF_Symbol(const std::string &n, BPF_Section *sec, long off) : name(n), name_ent(0) { memset(&sym, 0, sizeof(sym)); sym.st_shndx = elf_ndxscn(sec->scn); sym.st_value = off; } struct BPF_Output { Elf *elf; Elf64_Ehdr *ehdr; Stap_Strtab *str_tab; std::vector sections; std::vector symbols; BPF_Output(int fd); ~BPF_Output(); BPF_Section *new_scn(const std::string &n); BPF_Symbol *new_sym(const std::string &n, BPF_Section *, long); BPF_Symbol *append_sym(const std::string &n, BPF_Section *, long); }; BPF_Output::BPF_Output(int fd) : elf(elf_begin(fd, ELF_C_WRITE_MMAP, NULL)), ehdr(elf64_newehdr(elf)), str_tab(stap_strtab_init(true)) { ehdr->e_type = ET_REL; ehdr->e_machine = EM_BPF; } BPF_Output::~BPF_Output() { stap_strtab_free(str_tab); for (auto i = symbols.begin(); i != symbols.end(); ++i) delete *i; for (auto i = sections.begin(); i != sections.end(); ++i) delete *i; elf_end(elf); } BPF_Section * BPF_Output::new_scn(const std::string &name) { BPF_Section *n = new BPF_Section(name); Elf_Scn *scn = elf_newscn(elf); n->scn = scn; n->shdr = elf64_getshdr(scn); n->data = elf_newdata(scn); n->name_ent = stap_strtab_add(str_tab, n->name.c_str()); sections.push_back(n); return n; } BPF_Symbol * BPF_Output::new_sym(const std::string &name, BPF_Section *sec, long off) { BPF_Symbol *s = new BPF_Symbol(name, sec, off); s->name_ent = stap_strtab_add(str_tab, s->name.c_str()); return s; } BPF_Symbol * BPF_Output::append_sym(const std::string &name, BPF_Section *sec, long off) { BPF_Symbol *s = new_sym(name, sec, off); symbols.push_back(s); return s; } static void output_kernel_version(BPF_Output &eo, const std::string &base_version) { unsigned long maj = 0, min = 0, rel = 0; char *q; maj = strtoul(base_version.c_str(), &q, 10); if (*q == '.') { min = strtoul(q + 1, &q, 10); if (*q == '.') rel = strtoul(q + 1, NULL, 10); } BPF_Section *so = eo.new_scn("version"); Elf_Data *data = so->data; data->d_buf = malloc(sizeof(uint32_t)); assert (data->d_buf); * (uint32_t*) data->d_buf = KERNEL_VERSION(maj, min, rel); data->d_type = ELF_T_BYTE; data->d_size = 4; data->d_align = 4; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_entsize = 4; } static void output_license(BPF_Output &eo) { BPF_Section *so = eo.new_scn("license"); Elf_Data *data = so->data; data->d_buf = (void *)"GPL"; data->d_type = ELF_T_BYTE; data->d_size = 4; so->shdr->sh_type = SHT_PROGBITS; } static void output_stapbpf_script_name(BPF_Output &eo, const std::string script_name) { BPF_Section *so = eo.new_scn("stapbpf_script_name"); Elf_Data *data = so->data; size_t script_name_len = strlen(script_name.c_str()); data->d_buf = (void *)malloc(script_name_len + 1); char *script_name_buf = (char *)data->d_buf; script_name.copy(script_name_buf, script_name_len); script_name_buf[script_name_len] = '\0'; data->d_type = ELF_T_BYTE; data->d_size = script_name_len + 1; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; } static void output_maps(BPF_Output &eo, globals &glob) { unsigned nmaps = glob.maps.size(); if (nmaps == 0) return; assert(sizeof(unsigned) == sizeof(Elf64_Word)); const size_t bpf_map_def_sz = sizeof(globals::bpf_map_def); BPF_Section *so = eo.new_scn("maps"); Elf_Data *data = so->data; data->d_buf = glob.maps.data(); data->d_type = ELF_T_BYTE; data->d_size = nmaps * bpf_map_def_sz; data->d_align = 4; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_entsize = bpf_map_def_sz; // Allow the global arrays to have their actual names. eo.symbols.reserve(nmaps); for (unsigned i = 0; i < nmaps; ++i) eo.symbols.push_back(NULL); for (auto i = glob.globals.begin(); i != glob.globals.end(); ++i) { vardecl *v = i->first; if (v->arity <= 0) continue; if (i->second.is_stat()) continue; unsigned m = i->second.map_id; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(v->name, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); s->sym.st_size = bpf_map_def_sz; eo.symbols[m] = s; } // Give internal names to stat maps. for (auto i = glob.scalar_stats.begin(); i != glob.scalar_stats.end(); ++i) { std::string f = i->first; unsigned m = i->second; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(std::string("stat.") + f, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); eo.symbols[m] = s; } for (auto i = glob.array_stats.begin(); i != glob.array_stats.end(); ++i) { vardecl *v = i->first; for (auto j = i->second.begin(); j != i->second.end(); ++j) { std::string f = j->first; unsigned m = j->second; assert(eo.symbols[m] == NULL); BPF_Symbol *s = eo.new_sym(std::string(v->name) + std::string(".stat.") + f, so, m * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); eo.symbols[m] = s; } } // Give internal names to other maps. for (unsigned i = 0; i < nmaps; ++i) { if (eo.symbols[i] != NULL) continue; BPF_Symbol *s = eo.new_sym(std::string("map.") + std::to_string(i), so, i * bpf_map_def_sz); s->sym.st_info = ELF64_ST_INFO(STB_LOCAL, STT_OBJECT); s->sym.st_size = bpf_map_def_sz; eo.symbols[i] = s; } } static void output_interned_strings(BPF_Output &eo, globals& glob) { // XXX: Don't use SHT_STRTAB since it can reorder the strings, iiuc // requiring us to use yet more ELF infrastructure to refer to them // and forcing us to generate this section at the same time as the // code instead of in a separate procedure. To avoid that, manually // write a SHT_PROGBITS section in SHT_STRTAB format. if (glob.interned_strings.size() == 0) return; BPF_Section *str = eo.new_scn("stapbpf_interned_strings"); Elf_Data *data = str->data; size_t interned_strings_len = 1; // extra NUL byte for (auto i = glob.interned_strings.begin(); i != glob.interned_strings.end(); ++i) { std::string &str = *i; interned_strings_len += str.size() + 1; // with NUL byte } data->d_buf = (void *)malloc(interned_strings_len); char *interned_strings_buf = (char *)data->d_buf; interned_strings_buf[0] = '\0'; unsigned ofs = 1; for (auto i = glob.interned_strings.begin(); i != glob.interned_strings.end(); ++i) { std::string &str = *i; assert(ofs+str.size()+1 <= interned_strings_len); str.copy(interned_strings_buf+ofs, str.size()); interned_strings_buf[ofs+str.size()] = '\0'; ofs += str.size() + 1; } assert(ofs == interned_strings_len); data->d_type = ELF_T_BYTE; data->d_size = interned_strings_len; str->free_data = true; str->shdr->sh_type = SHT_PROGBITS; } static void output_statsmap(void *d_buf, globals::agg_idx agg_id, const globals::stats_map &sm) { globals::interned_stats_map ism = globals::intern_stats_map(sm); uint64_t *ix = (uint64_t *)d_buf; *ix = (uint64_t)agg_id; for (unsigned i = 0; i < globals::stat_fields.size(); i++) { globals::stat_field sf = globals::stat_fields[i]; auto it = sm.find(sf); assert (it != sm.end()); ix++; *ix = (uint64_t)it->second; } } static void output_interned_aggregates(BPF_Output &eo, globals& glob) { if (glob.scalar_stats.empty() && glob.aggregates.size() == 0) return; BPF_Section *agg = eo.new_scn("stapbpf_aggregates"); Elf_Data *data = agg->data; size_t interned_aggregate_len = sizeof(uint64_t) * (1 + globals::stat_fields.size()); unsigned n_aggregates = glob.scalar_stats.empty() ? glob.aggregates.size() : glob.aggregates.size() + 1; data->d_buf = (void *)calloc(n_aggregates, interned_aggregate_len); data->d_size = interned_aggregate_len * n_aggregates; size_t ofs = 0; // XXX after glob.scalar_stats if (!glob.scalar_stats.empty()) { output_statsmap(data->d_buf, ofs, glob.scalar_stats); ofs += interned_aggregate_len; } char *ix = (char *)data->d_buf; for (auto i = glob.aggregates.begin(); i != glob.aggregates.end(); i++) { assert(glob.array_stats.count(i->first) != 0); output_statsmap((void *)(ix+ofs), i->second, glob.array_stats[i->first]); ofs += interned_aggregate_len; } assert (ofs == data->d_size); data->d_type = ELF_T_BYTE; agg->free_data = true; agg->shdr->sh_type = SHT_PROGBITS; } static void output_foreach_loop_info(BPF_Output &eo, globals& glob) { if (glob.foreach_loop_info.empty()) return; /* XXX This method of serializing the foreach loop info struct is clumsy but not so likely to run into struct ser/de weirdness. */ BPF_Section *agg = eo.new_scn("stapbpf_foreach_loop_info"); Elf_Data *data = agg->data; size_t interned_foreach_info_len = sizeof(uint64_t) * globals::n_foreach_info_fields; unsigned n_foreach_loops = glob.foreach_loop_info.size(); data->d_buf = (void *)calloc(n_foreach_loops, interned_foreach_info_len); data->d_size = interned_foreach_info_len * n_foreach_loops; size_t ofs = 0; uint64_t *ix = (uint64_t *)data->d_buf; for (auto i = glob.foreach_loop_info.begin(); i != glob.foreach_loop_info.end(); i++) { globals::interned_foreach_info ifi = globals::intern_foreach_info(*i); for (auto j = ifi.begin(); j != ifi.end(); j++) { *ix = (uint64_t)*j; ofs += sizeof(uint64_t); ix++; } } assert (ofs == data->d_size); data->d_type = ELF_T_BYTE; agg->free_data = true; agg->shdr->sh_type = SHT_PROGBITS; } void bpf_unparser::add_prologue() { /** * Before the probe can be executed, the probe's prologue will * check to see if exit(...) has been called or if an error has * occurred. To check if an error has occurred, it will see if * the number of soft errors has exceeded the specified limit. */ // Create and clear error status and error message. error_status = this_prog.new_reg(); emit_mov(error_status, this_prog.new_imm(0)); // Prepare exit block. block *exit_block = get_exit_block(); // Prepare commonly used variables. value *i0 = this_prog.new_imm(0); value* frame = this_prog.lookup_reg(BPF_REG_10); // If there is no soft error constraint, it is defaulted to 0. int l = (constraints.find("MAXERRORS") != constraints.end()) ? constraints["MAXERRORS"] : 0; value* limit = this_prog.new_imm(l); int map_id = bpf::globals::internal_map_idx; int map_key = bpf::globals::EXIT; int key_size = 4; // Prepare arguments for BPF_FUNC_map_lookup_elem. this_prog.mk_st(this_ins, BPF_W, frame, -key_size, this_prog.new_imm(map_key)); this_prog.use_tmp_space(key_size); // Lookup exit status. this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-key_size)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); block *cont_block = this_prog.new_block(); // Check if BPF_FUNC_map_lookup_elem returned nullptr. value *r0 = this_prog.lookup_reg(BPF_REG_0); this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, cont_block); set_block(cont_block); // Load exit status into exit_status. value *exit_status = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_DW, exit_status, r0, 0); cont_block = this_prog.new_block(); // If exit_status == 1, jump to exit, otherwise continue with handler. this_prog.mk_jcond(this_ins, EQ, exit_status, this_prog.new_imm(1), exit_block, cont_block); set_block(cont_block); // Check the error count. map_key = bpf::globals::ERRORS; // Prepare arguments for BPF_FUNC_map_lookup_elem. this_prog.mk_st(this_ins, BPF_W, frame, -key_size, this_prog.new_imm(map_key)); this_prog.use_tmp_space(key_size); // Lookup error count. this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-key_size)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); cont_block = this_prog.new_block(); // Check if BPF_FUNC_map_lookup_elem returned nullptr. r0 = this_prog.lookup_reg(BPF_REG_0); this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, cont_block); set_block(cont_block); // Load current error count into error_count. value* error_count = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_DW, error_count, r0, 0); cont_block = this_prog.new_block(); // If the limit has been exceeded, proceed towards the exit. this_prog.mk_jcond(this_ins, GT, error_count, limit, exit_block, cont_block); set_block(cont_block); } void bpf_unparser::add_epilogue() { /** * Before the probe can finishes, the probe's epilogue will * increment the error count if any errors occured and will * also print the corresponding error message. */ // Prepare commonly used variables. value *i0 = this_prog.new_imm(0); value* frame = this_prog.lookup_reg(BPF_REG_10); // If no limit has been specified, it is defaulted to 0. int l = (constraints.find("MAXERRORS") != constraints.end()) ? constraints["MAXERRORS"] : 0; value* limit = this_prog.new_imm(l); block *error_block = this_prog.new_block(); block *exit_block = this_prog.new_block(); // Check if an error was called. If it was, run the error handler. this_prog.mk_jcond(this_ins, EQ, i0, error_status, exit_block, error_block); set_block(error_block); // Print error message. emit_transport_msg(globals::STP_PRINT_ERROR_MSG); int map_id = globals::internal_map_idx; int map_key = globals::ERRORS; int key_size = 4; int val_size = 8; // Prepare arguments for BPF_FUNC_map_lookup_elem. this_prog.mk_st(this_ins, BPF_W, frame, -key_size, this_prog.new_imm(map_key)); this_prog.use_tmp_space(key_size); // Lookup error count. this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-key_size)); this_prog.mk_call(this_ins, BPF_FUNC_map_lookup_elem, 2); block *increment_block = this_prog.new_block(); // Check if BPF_FUNC_map_lookup_elem returned nullptr. value *r0 = this_prog.lookup_reg(BPF_REG_0); this_prog.mk_jcond(this_ins, EQ, r0, i0, exit_block, increment_block); set_block(increment_block); // Load current error count into error_count. value *error_count = this_prog.new_reg(); this_prog.mk_ld(this_ins, BPF_DW, error_count, r0, 0); // Increment the number of errors. this_prog.mk_binary(this_ins, BPF_ADD, error_count, error_count, this_prog.new_imm(1)); // Prepare arguments for BPF_FUNC_map_update_elem. this_prog.mk_st(this_ins, BPF_DW, frame, -val_size, error_count); this_prog.use_tmp_space(val_size); this_prog.mk_st(this_ins, BPF_W, frame, -val_size-key_size, this_prog.new_imm(map_key)); this_prog.use_tmp_space(key_size); // Update the global error count. this_prog.load_map(this_ins, this_prog.lookup_reg(BPF_REG_1), map_id); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_2), frame, this_prog.new_imm(-val_size-key_size)); this_prog.mk_binary(this_ins, BPF_ADD, this_prog.lookup_reg(BPF_REG_3), frame, this_prog.new_imm(-val_size)); this_prog.mk_mov(this_ins, this_prog.lookup_reg(BPF_REG_4), this_prog.new_imm(0)); this_prog.mk_call(this_ins, BPF_FUNC_map_update_elem, 4); block *exceeded_block = this_prog.new_block(); // Check if limit is exceeded. If so, communicate a hard error. this_prog.mk_jcond(this_ins, LE, error_count, limit, exit_block, exceeded_block); set_block(exceeded_block); // Communicate a hard error. emit_transport_msg(bpf::globals::STP_ERROR); emit_jmp(exit_block); set_block(exit_block); } static void translate_probe(program &prog, globals &glob, derived_probe *dp) { bpf_unparser u(prog, glob); u.this_locals = u.new_locals(dp->locals); u.set_block(prog.new_block ()); // Save the input argument early. // ??? Ideally this would be deleted as dead code if it were unused; // we don't implement that at the moment. Nor is it easy to support // inserting a new start block that would enable retroactively saving // this only when needed. u.this_in_arg0 = prog.lookup_reg(BPF_REG_6); prog.mk_mov(u.this_ins, u.this_in_arg0, prog.lookup_reg(BPF_REG_1)); u.add_prologue(); dp->body->visit (&u); if (u.in_block()) u.emit_jmp(u.get_ret0_block()); } static void translate_probe_v(program &prog, globals &glob, const std::vector &v) { bpf_unparser u(prog, glob); block *this_block; if (prog.blocks.empty()) this_block = prog.new_block(); else { u.set_block(prog.blocks.back()); this_block = prog.new_block(); u.emit_jmp(this_block); } for (size_t n = v.size(), i = 0; i < n; ++i) { u.set_block(this_block); derived_probe *dp = v[i]; u.this_locals = u.new_locals(dp->locals); if (i == 0) { // Create and clear the error status. u.error_status = prog.new_reg(); prog.mk_mov(u.this_ins, u.error_status, prog.new_imm(0)); } dp->body->visit (&u); delete u.this_locals; u.this_locals = NULL; if (i == n - 1) this_block = u.get_ret0_block(); else this_block = prog.new_block(); if (u.in_block()) u.emit_jmp(this_block); } } static void translate_init_and_probe_v(program &prog, globals &glob, init_block &b, const std::vector &v) { bpf_unparser u(prog, glob); block *this_block = prog.new_block(); u.set_block(this_block); b.visit(&u); if (!v.empty()) translate_probe_v(prog, glob, v); else { this_block = u.get_ret0_block(); assert(u.in_block()); u.emit_jmp(this_block); } } static BPF_Section * output_probe(BPF_Output &eo, program &prog, const std::string &name, unsigned flags) { unsigned ninsns = 0, nreloc = 0; // Count insns and relocations; drop in jump offset. for (auto i = prog.blocks.begin(); i != prog.blocks.end(); ++i) { block *b = *i; for (insn *j = b->first; j != NULL; j = j->next) { unsigned code = j->code; if ((code & 0xff) == (BPF_LD | BPF_IMM | BPF_DW)) { if (code == BPF_LD_MAP) nreloc += 1; ninsns += 2; } else { if (j->is_jmp()) { // ??? Forwarders should be removed by bpf-opt.cxx thread_jumps, // but we seem to miss or reintroduce a few. Minimal fix: block *target = b->taken->next; while (target->first == NULL) { target = target->is_forwarder(); assert (target != NULL); } j->off = target->first->id - (j->id + 1); } else if (j->is_call()) j->off = 0; ninsns += 1; } } } bpf_insn *buf = (bpf_insn*) calloc (sizeof(bpf_insn), ninsns); assert (buf); Elf64_Rel *rel = (Elf64_Rel*) calloc (sizeof(Elf64_Rel), nreloc); assert (rel); unsigned i = 0, r = 0; for (auto bi = prog.blocks.begin(); bi != prog.blocks.end(); ++bi) { block *b = *bi; for (insn *j = b->first; j != NULL; j = j->next) { unsigned code = j->code; value *d = j->dest; value *s = j->src1; if (code == BPF_LD_MAP) { unsigned val = s->imm(); // Note that we arrange for the map symbols to be first. rel[r].r_offset = i * sizeof(bpf_insn); rel[r].r_info = ELF64_R_INFO(val + 1, R_BPF_MAP_FD); r += 1; buf[i + 0].code = code; buf[i + 0].dst_reg = d->reg(); buf[i + 0].src_reg = code >> 8; i += 2; } else if (code == (BPF_LD | BPF_IMM | BPF_DW)) { uint64_t val = s->imm(); buf[i + 0].code = code; buf[i + 0].dst_reg = d->reg(); buf[i + 0].src_reg = code >> 8; buf[i + 0].imm = val; buf[i + 1].imm = val >> 32; i += 2; } else { buf[i].code = code; if (!d) d = j->src0; if (d) buf[i].dst_reg = d->reg(); if (s) { if (s->is_reg()) buf[i].src_reg = s->reg(); else buf[i].imm = s->imm(); } buf[i].off = j->off; i += 1; } } } assert(i == ninsns); assert(r == nreloc); BPF_Section *so = eo.new_scn(name); Elf_Data *data = so->data; data->d_buf = buf; data->d_type = ELF_T_BYTE; data->d_size = ninsns * sizeof(bpf_insn); data->d_align = 8; so->free_data = true; so->shdr->sh_type = SHT_PROGBITS; so->shdr->sh_flags = SHF_EXECINSTR | flags; if (nreloc) { BPF_Section *ro = eo.new_scn(std::string(".rel.") + name); Elf_Data *rdata = ro->data; rdata->d_buf = rel; rdata->d_type = ELF_T_REL; rdata->d_size = nreloc * sizeof(Elf64_Rel); ro->free_data = true; ro->shdr->sh_type = SHT_REL; ro->shdr->sh_info = elf_ndxscn(so->scn); } return so; } static void output_symbols_sections(BPF_Output &eo) { BPF_Section *str = eo.new_scn(".strtab"); str->shdr->sh_type = SHT_STRTAB; str->shdr->sh_entsize = 1; unsigned nsym = eo.symbols.size(); unsigned isym = 0; if (nsym > 0) { BPF_Section *sym = eo.new_scn(".symtab"); sym->shdr->sh_type = SHT_SYMTAB; sym->shdr->sh_link = elf_ndxscn(str->scn); sym->shdr->sh_info = nsym + 1; Elf64_Sym *buf = new Elf64_Sym[nsym + 1]; memset(buf, 0, sizeof(Elf64_Sym)); sym->data->d_buf = buf; sym->data->d_type = ELF_T_SYM; sym->data->d_size = (nsym + 1) * sizeof(Elf64_Sym); stap_strtab_finalize(eo.str_tab, str->data); for (unsigned i = 0; i < nsym; ++i) { BPF_Symbol *s = eo.symbols[i]; Elf64_Sym *b = buf + (i + 1); *b = s->sym; b->st_name = stap_strent_offset(s->name_ent); } isym = elf_ndxscn(sym->scn); } else stap_strtab_finalize(eo.str_tab, str->data); eo.ehdr->e_shstrndx = elf_ndxscn(str->scn); for (auto i = eo.sections.begin(); i != eo.sections.end(); ++i) { BPF_Section *s = *i; s->shdr->sh_name = stap_strent_offset(s->name_ent); if (s->shdr->sh_type == SHT_REL) s->shdr->sh_link = isym; } } } // namespace bpf int translate_bpf_pass (systemtap_session& s) { using namespace bpf; init_bpf_helper_tables(); if (elf_version(EV_CURRENT) == EV_NONE) return 1; module_name = s.module_name; const std::string module = s.tmpdir + "/" + s.module_filename(); int fd = open(module.c_str(), O_RDWR | O_CREAT | O_TRUNC, 0666); if (fd < 0) return 1; BPF_Output eo(fd); globals glob; glob.session = &s; int ret = 0; const token* t = 0; try { translate_globals(glob, s); output_maps(eo, glob); if (s.be_derived_probes || !glob.empty()) { std::vector begin_v, end_v, error_v; sort_for_bpf(s, s.be_derived_probes, begin_v, end_v, error_v); init_block init(glob); if (!init.empty()) { if (!begin_v.empty()) t = begin_v[0]->tok; program p(target_user_bpfinterp); translate_init_and_probe_v(p, glob, init, begin_v); p.generate(); output_probe(eo, p, "stap_begin", 0); } else if (!begin_v.empty()) { t = begin_v[0]->tok; program p(target_user_bpfinterp); translate_probe_v(p, glob, begin_v); p.generate(); output_probe(eo, p, "stap_begin", 0); } if (!end_v.empty()) { t = end_v[0]->tok; program p(target_user_bpfinterp); translate_probe_v(p, glob, end_v); p.generate(); output_probe(eo, p, "stap_end", 0); } if (!error_v.empty()) { t = error_v[0]->tok; program p(target_user_bpfinterp); translate_probe_v(p, glob, error_v); p.generate(); output_probe(eo, p, "stap_error", 0); } } if (s.generic_kprobe_derived_probes) { sort_for_bpf_probe_arg_vector kprobe_v; sort_for_bpf(s, s.generic_kprobe_derived_probes, kprobe_v); for (auto i = kprobe_v.begin(); i != kprobe_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.procfs_derived_probes) { sort_for_bpf_probe_arg_vector procfs_v; sort_for_bpf(s, s.procfs_derived_probes, procfs_v); for (auto i = procfs_v.begin(); i != procfs_v.end(); ++i) { t = i->first->tok; program p(target_user_bpfinterp); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, 0); } } if (s.perf_derived_probes) { sort_for_bpf_probe_arg_vector perf_v; sort_for_bpf(s, s.perf_derived_probes, perf_v); for (auto i = perf_v.begin(); i != perf_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.hrtimer_derived_probes || s.timer_derived_probes) { sort_for_bpf_probe_arg_vector timer_v; sort_for_bpf(s, s.hrtimer_derived_probes, s.timer_derived_probes, timer_v); for (auto i = timer_v.begin(); i != timer_v.end(); ++i) { t = i->first->tok; // TODO PR23477: Also support userspace timer probes. program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.tracepoint_derived_probes) { sort_for_bpf_probe_arg_vector trace_v; sort_for_bpf(s, s.tracepoint_derived_probes, trace_v); for (auto i = trace_v.begin(); i != trace_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } if (s.uprobe_derived_probes) { sort_for_bpf_probe_arg_vector uprobe_v; sort_for_bpf(s, s.uprobe_derived_probes, uprobe_v); for (auto i = uprobe_v.begin(); i != uprobe_v.end(); ++i) { t = i->first->tok; program p(target_kernel_bpf); translate_probe(p, glob, i->first); p.generate(); output_probe(eo, p, i->second, SHF_ALLOC); } } // PR26234: would like to support process.{begin,end} probes, // but BPF doesn't give any clear way to probe the same context.... if (s.utrace_derived_probes) warn_for_bpf(s, s.utrace_derived_probes, "utrace probe"); // XXX PR26234: need to warn about other probe groups.... if (s.hwbkpt_derived_probes) warn_for_bpf(s, s.hwbkpt_derived_probes, "hardware breakpoint probe"); if (s.itrace_derived_probes) warn_for_bpf(s, s.itrace_derived_probes, "process.insn probe"); if (s.netfilter_derived_probes) warn_for_bpf(s, s.netfilter_derived_probes, "netfilter probe"); if (s.profile_derived_probes) warn_for_bpf(s, s.profile_derived_probes, "timer.profile probe"); if (s.mark_derived_probes) warn_for_bpf(s, s.mark_derived_probes, "static marker probe"); if (s.python_derived_probes) warn_for_bpf(s, s.python_derived_probes, "python probe"); // s.task_finder_derived_probes -- synthetic // s.dynprobe_derived_probes -- synthetic, dyninst only output_kernel_version(eo, s.kernel_base_release); output_license(eo); output_stapbpf_script_name(eo, escaped_literal_string(s.script_basename())); output_interned_strings(eo, glob); output_interned_aggregates(eo, glob); output_foreach_loop_info(eo, glob); output_symbols_sections(eo); int64_t r = elf_update(eo.elf, ELF_C_WRITE_MMAP); if (r < 0) { std::clog << "Error writing output file: " << elf_errmsg(elf_errno()) << std::endl; ret = 1; } } catch (const semantic_error &e) { s.print_error(e); ret = 1; } catch (const std::runtime_error &e) { semantic_error er(ERR_SRC, _F("bpf translation failure: %s", e.what()), t); s.print_error(er); ret = 1; } catch (...) { std::cerr << "bpf translation internal error" << std::endl; ret = 1; } close(fd); if (ret == 1) unlink(s.translated_source.c_str()); return ret; } systemtap-4.6/bpf.h000066400000000000000000000006131414446751200143440ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2016 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BPF_H #define BPF_H struct systemtap_session; int translate_bpf_pass (systemtap_session& s); #endif // BPF_H systemtap-4.6/buildrun.cxx000066400000000000000000001346741414446751200160130ustar00rootroot00000000000000// build/run probes // Copyright (C) 2005-2021 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "buildrun.h" #include "session.h" #include "util.h" #include "hash.h" #include "translate.h" #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include } // A bit of obfuscation for Gentoo's sake. // We *need* -Werror for stapconf to work correctly. // https://bugs.gentoo.org/show_bug.cgi?id=522908 #define WERROR ("-W" "error") #define PATH_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+,-./_" using namespace std; /* Adjust and run make_cmd to build a kernel module. */ static int run_make_cmd(systemtap_session& s, vector& make_cmd, bool null_out=false, bool null_err=false) { assert_no_interrupts(); // PR14168: we used to unsetenv values here; instead do it via // env(1) in make_any_make_cmd(). // Disable ccache to avoid saving files that will never be reused. // (ccache is useless to us, because our compiler commands always // include the randomized tmpdir path.) // It's not critical if this fails, so the return is ignored. (void) setenv("CCACHE_DISABLE", "1", 0); if (s.verbose > 2) make_cmd.push_back("V=1"); else if (s.verbose > 1) make_cmd.push_back("--no-print-directory"); else { make_cmd.push_back("-s"); make_cmd.push_back("--no-print-directory"); } // Exploit SMP parallelism, if available. long smp = thread::hardware_concurrency(); if (smp <= 0) smp = 1; // PR16276: but only if we're not running severely nproc-rlimited struct rlimit rlim; int rlimit_rc = getrlimit(RLIMIT_NPROC, &rlim); const unsigned int severely_limited = smp*30; // WAG at number of gcc+make etc. nested processes bool nproc_limited = (rlimit_rc == 0 && (rlim.rlim_max <= severely_limited || rlim.rlim_cur <= severely_limited)); if (smp >= 1 && !nproc_limited) make_cmd.push_back("-j" + lex_cast(smp+1)); if (strverscmp (s.kernel_base_release.c_str(), "2.6.29") < 0) { // Older kernels, before linux commit #fd54f502841c1, include // gratuitous "echo"s in their Makefile. We need to suppress // that with this bluntness. null_out = true; } int rc = stap_system (s.verbose, "kbuild", make_cmd, null_out, null_err); if (rc != 0) s.set_try_server (); return rc; } static vector make_any_make_cmd(systemtap_session& s, const string& dir, const string& target) { string newpath("PATH=/usr/bin:/bin"); const char *oldpath = getenv("PATH"); if (oldpath != NULL) { newpath += ':'; newpath += oldpath; } vector make_cmd { // PR14168: sanitize environment variables for kbuild invocation "env", "-uARCH", "-uKBUILD_EXTMOD", "-uCROSS_COMPILE", "-uKBUILD_IMAGE", "-uKCONFIG_CONFIG", "-uINSTALL_PATH", "-uLD_LIBRARY_PATH", newpath, "make", "-C", s.kernel_build_tree, "M=" + dir, // need make-quoting? target, // PR13847: suppress debuginfo creation by default "CONFIG_DEBUG_INFO=", // linux 5.11 wants btf but no, baby, no "CONFIG_DEBUG_INFO_BTF_MODULES=", // RHBZ1321628: suppress stack validation; expected to be temporary // "CONFIG_STACK_VALIDATION=", // PR28140 ... as of kernel 5.14-rc*, this is actively // dangerous, because it skips the full objtool processing // chain, and the resulting tracepoint call sites in the ko are // not properly instrumented. See also Linux commit // ab3257042c2. }; // PR10280: suppress symbol versioning to restrict to exact kernel version // // XXX (PR24720): this was reported to cause problems on a PPC machine, // and I've spotted kernel commits (43e24e82f35) which vary the vermagic // string for PPC. Still, a standard PPC configuration tested fine, so // I'm cautiously re-enabling this. if (s.guru_mode) make_cmd.push_back("CONFIG_MODVERSIONS="); // Note: can re-enable from command line with "-B CONFIG_MODVERSIONS=y". // Add architecture, except for old powerpc (RHBZ669082) if (s.architecture != "powerpc" || (strverscmp (s.kernel_base_release.c_str(), "2.6.15") >= 0)) make_cmd.push_back("ARCH=" + s.architecture); // need make-quoting? // Add any custom kbuild flags make_cmd.insert(make_cmd.end(), s.kbuildflags.begin(), s.kbuildflags.end()); return make_cmd; } static vector make_make_cmd(systemtap_session& s, const string& dir) { vector mc = make_any_make_cmd(s, dir, "modules"); return mc; } static vector make_make_objs_cmd(systemtap_session& s, const string& dir) { // Kbuild uses these rules to build external modules: // // module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD)) // modules: $(module-dirs) // @$(kecho) ' Building modules, stage 2.'; // $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost // // So if we're only interested in the stage 1 objects, we can // cheat and make only the $(module-dirs) part. // // ... at least, before kernel commit c99f3918cf. if (strverscmp (s.kernel_base_release.c_str(), "5.4") < 0) return make_any_make_cmd(s, dir, "_module_" + dir); else return make_any_make_cmd(s, dir, "modules"); // just build the lot } static void output_autoconf(systemtap_session& s, ofstream& o, vector& autoconf_c_files, const char *autoconf_c, const char *deftrue, const char *deffalse) { autoconf_c_files.push_back (autoconf_c); o << endl << s.tmpdir << "/" << autoconf_c << ".h:" << endl; o << "\t"; if (s.verbose < 4) o << "@"; o << "if $(CHECK_BUILD) $(SYSTEMTAP_RUNTIME)/linux/" << autoconf_c; if (s.verbose < 5) o << " > /dev/null 2>&1"; o << "; then "; if (deftrue) o << "echo \"#define " << deftrue << " 1\""; if (deffalse) o << "; else echo \"#define " << deffalse << " 1\""; o << "; fi >> $@" << endl; } void output_exportconf(systemtap_session& s, ofstream& o, const char *symbol, const char *deftrue) { if (s.kernel_exports.find(symbol) != s.kernel_exports.end()) o << "#define " << deftrue << " 1" << endl; } void output_dual_exportconf(systemtap_session& s, ofstream& o, const char *symbol1, const char *symbol2, const char *deftrue) { if (s.kernel_exports.find(symbol1) != s.kernel_exports.end() && s.kernel_exports.find(symbol2) != s.kernel_exports.end()) o << "#define " << deftrue << " 1" << endl; } void output_either_exportconf(systemtap_session& s, ofstream& o, const char *symbol1, const char *symbol2, const char *deftrue) { if (s.kernel_exports.find(symbol1) != s.kernel_exports.end() || s.kernel_exports.find(symbol2) != s.kernel_exports.end()) o << "#define " << deftrue << " 1" << endl; } static int compile_dyninst (systemtap_session& s) { const string module = s.tmpdir + "/" + s.module_filename(); vector cmd { "gcc", "--std=gnu99", s.translated_source, s.symbols_source, "-o", module, "-fvisibility=hidden", "-O2", "-I" + s.runtime_path, "-D__DYNINST__", "-Wall", WERROR, "-Wno-unused", "-Wno-strict-aliasing", "-Wno-pointer-to-int-cast", "-Wno-int-to-pointer-cast", "-Wno-pragmas", "-Wno-pointer-sign", "-Wno-format", "-pthread", "-lrt", "-ldw", "-fPIC", "-shared", }; // BZ855981/948279. Since dyninst/runtime.h includes __sync_* calls, // the compiler may generate different code for it depending on -march. // For example, if the default is i386, we may get references to auxiliary // functions like __sync_add_and_fetch_4, which appear to be defined // nowhere. We hack around this problem thusly: if (s.architecture == "i386") cmd.push_back("-march=i586"); for (size_t i = 0; i < s.c_macros.size(); ++i) cmd.push_back("-D" + s.c_macros[i]); if (s.verbose > 3) cmd.insert(cmd.end(), { "-ftime-report", "-Q" }); // Add any custom kbuild flags cmd.insert(cmd.end(), s.kbuildflags.begin(), s.kbuildflags.end()); int rc = stap_system (s.verbose, cmd); if (rc) s.set_try_server (); return rc; } int compile_pass (systemtap_session& s) { if (s.runtime_usermode_p()) return compile_dyninst (s); int rc = uprobes_pass (s); if (rc) { s.set_try_server (); return rc; } // fill in a quick Makefile string makefile_nm = s.tmpdir + "/Makefile"; ofstream o (makefile_nm.c_str()); string stap_export_nm = s.tmpdir + "/stapconf_export.h"; ofstream o2 (stap_export_nm.c_str()); // Create makefile // Clever hacks copied from vmware modules string superverbose; if (s.verbose > 3) superverbose = "set -x;"; string redirecterrors = "> /dev/null 2>&1"; if (s.verbose > 6) redirecterrors = ""; // Support O= (or KBUILD_OUTPUT) option // but flags= filter was removed from kernel scripts/Kbuild.include mid-2019 o << "_KBUILD_CFLAGS := $(call flags,KBUILD_CFLAGS) $(KBUILD_CFLAGS)" << endl; o << "stap_check_gcc = $(shell " << superverbose << " if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then " << "echo \"$(1)\"; else echo \"$(2)\"; fi)" << endl; o << "CHECK_BUILD := $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(CPPFLAGS) " << "$(LINUXINCLUDE) $(_KBUILD_CFLAGS) $(CFLAGS_KERNEL) $(EXTRA_CFLAGS) " << "$(CFLAGS) -DKBUILD_BASENAME=\\\"" << s.module_name << "\\\" " << WERROR << " -S -o /dev/null -xc " << endl; o << "stap_check_build = $(shell " << superverbose << " if $(CHECK_BUILD) $(1) " << redirecterrors << " ; then echo \"$(2)\"; else echo \"$(3)\"; fi)" << endl; o << "SYSTEMTAP_RUNTIME = \"" << s.runtime_path << "\"" << endl; // "autoconf" options go here // RHBZ 543529: early rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules o << "CONFIG_MODULE_SIG := n" << endl; string module_cflags = "EXTRA_CFLAGS"; o << module_cflags << " :=" << endl; // XXX: This gruesome hack is needed on some kernels built with separate O=directory, // where files like 2.6.27 x86's asm/mach-*/mach_mpspec.h are not found on the cpp path. // This could be a bug in arch/x86/Makefile that names // mflags-y += -Iinclude/asm-x86/mach-default // but that path does not exist in an O= build tree. o << module_cflags << " += -Iinclude2/asm/mach-default" << endl; o << module_cflags << " += -I" + s.kernel_build_tree << endl; if (s.kernel_source_tree != "") o << module_cflags << " += -I" + s.kernel_source_tree << endl; for (unsigned i = 0; i < s.kernel_extra_cflags.size(); i++) o << module_cflags << " += " + s.kernel_extra_cflags[i] << endl; // NB: don't try // o << module_cflags << " += -Iusr/include" << endl; // since such headers are cleansed of _KERNEL_ pieces that we need o << "STAPCONF_HEADER := " << s.tmpdir << "/" << s.stapconf_name << endl; o << ".DELETE_ON_ERROR: $(STAPCONF_HEADER)" << endl; o << "$(STAPCONF_HEADER):" << endl; o << "\t"; if (s.verbose < 4) o << "@"; o << "$(MAKE) -f \"$(firstword $(MAKEFILE_LIST))\" gen-stapconf" << endl; vector cs; // to hold autoconf C file names output_autoconf(s, o, cs, "autoconf-hrtimer-rel.c", "STAPCONF_HRTIMER_REL", NULL); output_exportconf(s, o2, "hrtimer_get_res", "STAPCONF_HRTIMER_GET_RES"); output_autoconf(s, o, cs, "autoconf-generated-compile.c", "STAPCONF_GENERATED_COMPILE", NULL); output_autoconf(s, o, cs, "autoconf-hrtimer-getset-expires.c", "STAPCONF_HRTIMER_GETSET_EXPIRES", NULL); output_autoconf(s, o, cs, "autoconf-inode-private.c", "STAPCONF_INODE_PRIVATE", NULL); output_autoconf(s, o, cs, "autoconf-inode-rwsem.c", "STAPCONF_INODE_RWSEM", NULL); output_autoconf(s, o, cs, "autoconf-constant-tsc.c", "STAPCONF_CONSTANT_TSC", NULL); output_autoconf(s, o, cs, "autoconf-ktime-get-real.c", "STAPCONF_KTIME_GET_REAL", NULL); output_exportconf(s, o2, "ktime_get_real_fast_ns", "STAPCONF_KTIME_GET_REAL_FAST_NS"); output_autoconf(s, o, cs, "autoconf-x86-uniregs.c", "STAPCONF_X86_UNIREGS", NULL); output_autoconf(s, o, cs, "autoconf-nameidata.c", "STAPCONF_NAMEIDATA_CLEANUP", NULL); output_dual_exportconf(s, o2, "unregister_kprobes", "unregister_kretprobes", "STAPCONF_UNREGISTER_KPROBES"); output_autoconf(s, o, cs, "autoconf-kprobe-symbol-name.c", "STAPCONF_KPROBE_SYMBOL_NAME", NULL); output_autoconf(s, o, cs, "autoconf-real-parent.c", "STAPCONF_REAL_PARENT", NULL); output_autoconf(s, o, cs, "autoconf-uaccess.c", "STAPCONF_LINUX_UACCESS_H", NULL); output_autoconf(s, o, cs, "autoconf-oneachcpu-retry.c", "STAPCONF_ONEACHCPU_RETRY", NULL); output_autoconf(s, o, cs, "autoconf-dpath-path.c", "STAPCONF_DPATH_PATH", NULL); output_exportconf(s, o2, "synchronize_kernel", "STAPCONF_SYNCHRONIZE_KERNEL"); output_exportconf(s, o2, "synchronize_rcu", "STAPCONF_SYNCHRONIZE_RCU"); output_exportconf(s, o2, "synchronize_sched", "STAPCONF_SYNCHRONIZE_SCHED"); output_autoconf(s, o, cs, "autoconf-task-uid.c", "STAPCONF_TASK_UID", NULL); output_autoconf(s, o, cs, "autoconf-from_kuid_munged.c", "STAPCONF_FROM_KUID_MUNGED", NULL); output_exportconf(s, o2, "get_mm_exe_file", "STAPCONF_GET_MM_EXE_FILE_EXPORTED"); output_dual_exportconf(s, o2, "alloc_vm_area", "free_vm_area", "STAPCONF_VM_AREA"); output_autoconf(s, o, cs, "autoconf-procfs-owner.c", "STAPCONF_PROCFS_OWNER", NULL); output_autoconf(s, o, cs, "autoconf-alloc-percpu-align.c", "STAPCONF_ALLOC_PERCPU_ALIGN", NULL); output_autoconf(s, o, cs, "autoconf-set_fs.c", "STAPCONF_SET_FS", NULL); output_autoconf(s, o, cs, "autoconf-x86-fs.c", "STAPCONF_X86_FS", NULL); output_autoconf(s, o, cs, "autoconf-x86-xfs.c", "STAPCONF_X86_XFS", NULL); output_autoconf(s, o, cs, "autoconf-x86-gs.c", "STAPCONF_X86_GS", NULL); output_autoconf(s, o, cs, "autoconf-grsecurity.c", "STAPCONF_GRSECURITY", NULL); output_autoconf(s, o, cs, "autoconf-trace-printk.c", "STAPCONF_TRACE_PRINTK", NULL); output_autoconf(s, o, cs, "autoconf-regset.c", "STAPCONF_REGSET", NULL); output_autoconf(s, o, cs, "autoconf-utrace-regset.c", "STAPCONF_UTRACE_REGSET", NULL); output_autoconf(s, o, cs, "autoconf-uprobe-get-pc.c", "STAPCONF_UPROBE_GET_PC", NULL); output_autoconf(s, o, cs, "autoconf-hlist-4args.c", "STAPCONF_HLIST_4ARGS", NULL); output_autoconf(s, o, cs, "autoconf-get-kretprobe.c", "STAPCONF_GET_KRETPROBE", NULL); output_exportconf(s, o2, "tsc_khz", "STAPCONF_TSC_KHZ"); output_exportconf(s, o2, "cpu_khz", "STAPCONF_CPU_KHZ"); output_exportconf(s, o2, "__module_text_address", "STAPCONF_MODULE_TEXT_ADDRESS"); output_exportconf(s, o2, "add_timer_on", "STAPCONF_ADD_TIMER_ON"); output_autoconf(s, o, cs, "autoconf-514-panic.c", "STAPCONF_514_PANIC", NULL); output_dual_exportconf(s, o2, "probe_kernel_read", "probe_kernel_write", "STAPCONF_PROBE_KERNEL"); output_autoconf(s, o, cs, "autoconf-hw_breakpoint_context.c", "STAPCONF_HW_BREAKPOINT_CONTEXT", NULL); output_exportconf(s, o2, "save_stack_trace_regs", "STAPCONF_SAVE_STACK_TRACE_REGS_EXPORTED"); output_autoconf(s, o, cs, "autoconf-save-stack-trace.c", "STAPCONF_KERNEL_STACKTRACE", NULL); output_autoconf(s, o, cs, "autoconf-save-stack-trace-no-bp.c", "STAPCONF_KERNEL_STACKTRACE_NO_BP", NULL); output_autoconf(s, o, cs, "autoconf-unwind-stack-trace.c", "STAPCONF_KERNEL_UNWIND_STACK", NULL); output_autoconf(s, o, cs, "autoconf-asm-syscall.c", "STAPCONF_ASM_SYSCALL_H", NULL); output_autoconf(s, o, cs, "autoconf-syscall_get_args_3args.c", "STAPCONF_SYSCALL_GET_ARGS_3ARGS", NULL); output_autoconf(s, o, cs, "autoconf-ring_buffer-flags.c", "STAPCONF_RING_BUFFER_FLAGS", NULL); output_autoconf(s, o, cs, "autoconf-ring_buffer_lost_events.c", "STAPCONF_RING_BUFFER_LOST_EVENTS", NULL); output_autoconf(s, o, cs, "autoconf-ring_buffer_read_prepare.c", "STAPCONF_RING_BUFFER_READ_PREPARE", NULL); output_exportconf(s, o2, "kallsyms_on_each_symbol", "STAPCONF_KALLSYMS_ON_EACH_SYMBOL_EXPORTED"); output_autoconf(s, o, cs, "autoconf-walk-stack.c", "STAPCONF_WALK_STACK", NULL); output_autoconf(s, o, cs, "autoconf-stacktrace_ops-warning.c", "STAPCONF_STACKTRACE_OPS_WARNING", NULL); output_autoconf(s, o, cs, "autoconf-stacktrace_ops-int-address.c", "STAPCONF_STACKTRACE_OPS_INT_ADDRESS", NULL); output_autoconf(s, o, cs, "autoconf-mm-context-vdso.c", "STAPCONF_MM_CONTEXT_VDSO", NULL); output_autoconf(s, o, cs, "autoconf-mm-context-vdso-base.c", "STAPCONF_MM_CONTEXT_VDSO_BASE", NULL); output_autoconf(s, o, cs, "autoconf-blk-types.c", "STAPCONF_BLK_TYPES", NULL); output_autoconf(s, o, cs, "autoconf-perf-structpid.c", "STAPCONF_PERF_STRUCTPID", NULL); output_autoconf(s, o, cs, "perf_event_counter_context.c", "STAPCONF_PERF_COUNTER_CONTEXT", NULL); output_autoconf(s, o, cs, "perf_probe_handler_nmi.c", "STAPCONF_PERF_HANDLER_NMI", NULL); output_exportconf(s, o2, "path_lookup", "STAPCONF_PATH_LOOKUP"); output_exportconf(s, o2, "kern_path_parent", "STAPCONF_KERN_PATH_PARENT"); output_exportconf(s, o2, "vfs_path_lookup", "STAPCONF_VFS_PATH_LOOKUP"); output_exportconf(s, o2, "kern_path", "STAPCONF_KERN_PATH"); output_exportconf(s, o2, "proc_create_data", "STAPCONF_PROC_CREATE_DATA"); output_autoconf(s, o, cs, "autoconf-proc_ops.c", "STAPCONF_PROC_OPS", NULL); output_exportconf(s, o2, "PDE_DATA", "STAPCONF_PDE_DATA"); output_autoconf(s, o, cs, "autoconf-module-sect-attrs.c", "STAPCONF_MODULE_SECT_ATTRS", NULL); output_autoconf(s, o, cs, "autoconf-kernel_read-new-args.c", "STAPCONF_KERNEL_READ_NEW_ARGS", NULL); output_autoconf(s, o, cs, "autoconf-utrace-via-tracepoints.c", "STAPCONF_UTRACE_VIA_TRACEPOINTS", NULL); output_autoconf(s, o, cs, "autoconf-task_work-struct.c", "STAPCONF_TASK_WORK_STRUCT", NULL); output_autoconf(s, o, cs, "autoconf-vm-area-pte.c", "STAPCONF_VM_AREA_PTE", NULL); output_autoconf(s, o, cs, "autoconf-relay-umode_t.c", "STAPCONF_RELAY_UMODE_T", NULL); output_autoconf(s, o, cs, "autoconf-relay_buf-per_cpu_ptr.c", "STAPCONF_RELAY_BUF_PER_CPU_PTR", NULL); output_autoconf(s, o, cs, "autoconf-fs_supers-hlist.c", "STAPCONF_FS_SUPERS_HLIST", NULL); output_autoconf(s, o, cs, "autoconf-compat_sigaction.c", "STAPCONF_COMPAT_SIGACTION", NULL); output_autoconf(s, o, cs, "autoconf-netfilter.c", "STAPCONF_NETFILTER_V313", NULL); output_autoconf(s, o, cs, "autoconf-netfilter-313b.c", "STAPCONF_NETFILTER_V313B", NULL); output_autoconf(s, o, cs, "autoconf-netfilter-4_1.c", "STAPCONF_NETFILTER_V41", NULL); output_autoconf(s, o, cs, "autoconf-netfilter-4_4.c", "STAPCONF_NETFILTER_V44", NULL); output_autoconf(s, o, cs, "autoconf-smpcall-5args.c", "STAPCONF_SMPCALL_5ARGS", NULL); output_autoconf(s, o, cs, "autoconf-smpcall-4args.c", "STAPCONF_SMPCALL_4ARGS", NULL); output_autoconf(s, o, cs, "autoconf-access_ok_2args.c", "STAPCONF_ACCESS_OK_2ARGS", NULL); output_autoconf(s, o, cs, "autoconf-uapi-mount.c", "STAPCONF_UAPI_LINUX_MOUNT_H", NULL); output_autoconf(s, o, cs, "autoconf-time32.c", "STAPCONF_TIME32_H", NULL); output_autoconf(s, o, cs, "autoconf-time32-old.c", "STAPCONF_TIME32_OLD_H", NULL); output_autoconf(s, o, cs, "autoconf-compat-utimbuf.c", "STAPCONF_COMPAT_UTIMBUF", NULL); // used by tapset/timestamp_monotonic.stp output_autoconf(s, o, cs, "autoconf-cpu-clock.c", "STAPCONF_CPU_CLOCK", NULL); output_autoconf(s, o, cs, "autoconf-local-clock.c", "STAPCONF_LOCAL_CLOCK", NULL); // used by tapset/linux/proc_mem.stp output_autoconf(s, o, cs, "autoconf-mm-shmempages.c", "STAPCONF_MM_SHMEMPAGES", NULL); // used by runtime/uprobe-inode.c output_either_exportconf(s, o2, "uprobe_register", "register_uprobe", "STAPCONF_UPROBE_REGISTER_EXPORTED"); output_either_exportconf(s, o2, "uprobe_unregister", "unregister_uprobe", "STAPCONF_UPROBE_UNREGISTER_EXPORTED"); output_autoconf(s, o, cs, "autoconf-old-inode-uprobes.c", "STAPCONF_OLD_INODE_UPROBES", NULL); output_autoconf(s, o, cs, "autoconf-inode-uretprobes.c", "STAPCONF_INODE_URETPROBES", NULL); // used by tapsets.cxx inode uprobe generated code output_exportconf(s, o2, "uprobe_get_swbp_addr", "STAPCONF_UPROBE_GET_SWBP_ADDR_EXPORTED"); // used by runtime/loc2c-runtime.h output_exportconf(s, o2, "task_user_regset_view", "STAPCONF_TASK_USER_REGSET_VIEW_EXPORTED"); // used by runtime/stp_utrace.c output_exportconf(s, o2, "task_work_add", "STAPCONF_TASK_WORK_ADD_EXPORTED"); output_exportconf(s, o2, "task_work_cancel", "STAPCONF_TASK_WORK_CANCEL_EXPORTED"); output_exportconf(s, o2, "wake_up_state", "STAPCONF_WAKE_UP_STATE_EXPORTED"); output_exportconf(s, o2, "try_to_wake_up", "STAPCONF_TRY_TO_WAKE_UP_EXPORTED"); output_exportconf(s, o2, "signal_wake_up_state", "STAPCONF_SIGNAL_WAKE_UP_STATE_EXPORTED"); output_exportconf(s, o2, "signal_wake_up", "STAPCONF_SIGNAL_WAKE_UP_EXPORTED"); output_exportconf(s, o2, "__lock_task_sighand", "STAPCONF___LOCK_TASK_SIGHAND_EXPORTED"); output_autoconf(s, o, cs, "autoconf-pagefault_disable.c", "STAPCONF_PAGEFAULT_DISABLE", NULL); output_exportconf(s, o2, "kallsyms_lookup_name", "STAPCONF_KALLSYMS_LOOKUP_NAME_EXPORTED"); output_autoconf(s, o, cs, "autoconf-uidgid.c", "STAPCONF_LINUX_UIDGID_H", NULL); output_exportconf(s, o2, "sigset_from_compat", "STAPCONF_SIGSET_FROM_COMPAT_EXPORTED"); output_exportconf(s, o2, "vzalloc", "STAPCONF_VZALLOC"); output_exportconf(s, o2, "vzalloc_node", "STAPCONF_VZALLOC_NODE"); output_exportconf(s, o2, "vmalloc_node", "STAPCONF_VMALLOC_NODE"); // RHBZ1233912 - s390 temporary workaround for non-atomic udelay() output_exportconf(s, o2, "udelay_simple", "STAPCONF_UDELAY_SIMPLE_EXPORTED"); output_autoconf(s, o, cs, "autoconf-udelay_simple.c", "STAPCONF_UDELAY_SIMPLE", NULL); // RHBZ1788662 - need rcu_is_watching() output_autoconf(s, o, cs, "autoconf-rcu_is_watching.c", "STAPCONF_RCU_IS_WATCHING", NULL); output_autoconf(s, o, cs, "autoconf-tracepoint-has-data.c", "STAPCONF_TRACEPOINT_HAS_DATA", NULL); output_autoconf(s, o, cs, "autoconf-tracepoint-strings.c", "STAPCONF_TRACEPOINT_STRINGS", NULL); output_autoconf(s, o, cs, "autoconf-timerfd.c", "STAPCONF_TIMERFD_H", NULL); output_autoconf(s, o, cs, "autoconf-module_layout.c", "STAPCONF_MODULE_LAYOUT", NULL); output_autoconf(s, o, cs, "autoconf-mod_kallsyms.c", "STAPCONF_MOD_KALLSYMS", NULL); output_exportconf(s, o2, "get_user_pages_remote", "STAPCONF_GET_USER_PAGES_REMOTE"); output_autoconf(s, o, cs, "autoconf-get_user_pages_remote-flags.c", "STAPCONF_GET_USER_PAGES_REMOTE_FLAGS", NULL); output_autoconf(s, o, cs, "autoconf-get_user_pages_remote-flags_locked.c", "STAPCONF_GET_USER_PAGES_REMOTE_FLAGS_LOCKED", NULL); output_autoconf(s, o, cs, "autoconf-get_user_pages_remote-notask_struct.c", "STAPCONF_GET_USER_PAGES_REMOTE_NOTASK_STRUCT", NULL); output_autoconf(s, o, cs, "autoconf-get_user_pages-flags.c", "STAPCONF_GET_USER_PAGES_FLAGS", NULL); output_autoconf(s, o, cs, "autoconf-get_user_pages-notask_struct.c", "STAPCONF_GET_USER_PAGES_NOTASK_STRUCT", NULL); output_autoconf(s, o, cs, "autoconf-bio-bi_opf.c", "STAPCONF_BIO_BI_OPF", NULL); output_autoconf(s, o, cs, "autoconf-linux-sched_headers.c", "STAPCONF_LINUX_SCHED_HEADERS", NULL); output_autoconf(s, o, cs, "autoconf-stack-trace-save-regs.c", "STAPCONF_STACK_TRACE_SAVE_REGS", NULL); output_autoconf(s, o, cs, "autoconf-mmap_lock.c", "STAPCONF_MMAP_LOCK", NULL); output_autoconf(s, o, cs, "autoconf-atomic_fetch_add_unless.c", "STAPCONF_ATOMIC_FETCH_ADD_UNLESS", NULL); output_autoconf(s, o, cs, "autoconf-lockdown-debugfs.c", "STAPCONF_LOCKDOWN_DEBUGFS", NULL); output_autoconf(s, o, cs, "autoconf-lockdown-kernel.c", "STAPCONF_LOCKDOWN_KERNEL", NULL); output_autoconf(s, o, cs, "autoconf-hlist_add_tail_rcu.c", "STAPCONF_HLIST_ADD_TAIL_RCU", NULL); output_autoconf(s, o, cs, "autoconf-files_lookup_fd_raw.c", "STAPCONF_FILES_LOOKUP_FD_RAW", NULL); output_autoconf(s, o, cs, "autoconf-task-state.c", "STAPCONF_TASK_STATE", NULL); // used by runtime/linux/netfilter.c output_exportconf(s, o2, "nf_register_hook", "STAPCONF_NF_REGISTER_HOOK"); // runtime/linux/kprobes.c output_exportconf(s, o2, "module_mutex", "STAPCONF_MODULE_MUTEX"); // used by tapset/linux/ioblock.stp output_exportconf(s, o2, "disk_get_part", "STAPCONF_DISK_GET_PART"); o2.close (); o << ".PHONY: gen-stapconf" << endl; o << "gen-stapconf: " << stap_export_nm; for (unsigned i=0; i $(STAPCONF_HEADER)" << endl; o << module_cflags << " += -include $(STAPCONF_HEADER)" << endl; for (unsigned i=0; i 3) o << "EXTRA_CFLAGS += -ftime-report -Q" << endl; // XXX: unfortunately, -save-temps can't work since linux kbuild cwd // is not writable. // // if (s.keep_tmpdir) // o << "CFLAGS += -fverbose-asm -save-temps" << endl; // Kernels can be compiled with CONFIG_CC_OPTIMIZE_FOR_SIZE to select // -Os, otherwise -O2 is the default. o << "EXTRA_CFLAGS += -freorder-blocks" << endl; // improve on -Os // Generate eh_frame for self-backtracing // FIXME Work around the issue with riscv kernel modules not being // loadable with asynchronous unwind tables due to R_RISCV_32_PCREL // relocations. if (s.architecture != "riscv") o << "EXTRA_CFLAGS += -fasynchronous-unwind-tables" << endl; // We used to allow the user to override default optimization when so // requested by adding a -O[0123s] so they could determine the // time/space/speed tradeoffs themselves, but we cannot guantantee that // the (un)optimized code actually compiles and/or generates functional // code, so we had to remove it. // o << "EXTRA_CFLAGS += " << s.gcc_flags << endl; // Add -O[0123s] // o << "CFLAGS += -fno-unit-at-a-time" << endl; // gcc 5.0.0-0.13.fc23 ipa-icf seems to consume gigacpu on stap-generated code o << "EXTRA_CFLAGS += $(call cc-option,-fno-ipa-icf)" << endl; // Assumes linux 2.6 kbuild o << "EXTRA_CFLAGS += -Wno-unused " << WERROR << endl; #if CHECK_POINTER_ARITH_PR5947 o << "EXTRA_CFLAGS += -Wpointer-arith" << endl; #endif // Accept extra diagnostic-suppression pragmas etc. o << "EXTRA_CFLAGS += -Wno-pragmas" << endl; // PR25845: Recent gcc (seen on 9.3.1) warns fairly common 32-bit pointer-conversions: o << "EXTRA_CFLAGS += $(call cc-option,-Wno-pointer-to-int-cast)" << endl; o << "EXTRA_CFLAGS += $(call cc-option,-Wno-int-to-pointer-cast)" << endl; // TODO: Some tests also suffer from -Werror=overflow. That seems like a warning requiring a tiny bit more care. // If we've got a reasonable runtime path from the user, we'll just // do '-IDIR'. If there are any sneaky/odd characters in it, we'll // have to quote it, like '-I"DIR"'. if (s.runtime_path.find_first_not_of(PATH_ALLOWED_CHARS, 0) == string::npos) o << "EXTRA_CFLAGS += -I" << s.runtime_path << endl; else { s.print_warning("quoting runtime path in the module Makefile."); o << "EXTRA_CFLAGS += -I\"" << s.runtime_path << "\"" << endl; } // XXX: this may help ppc toc overflow // o << "CFLAGS := $(subst -Os,-O2,$(CFLAGS)) -fminimal-toc" << endl; o << "obj-m := " << s.module_name << ".o" << endl; // print out all the auxiliary source (->object) file names o << s.module_name << "-y := "; for (unsigned i=0; itrailer_p) continue; string srcname = s.auxiliary_outputs[i]->filename; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } // and once again, for the translated_source file. It can't simply // be named MODULENAME.c, since kbuild doesn't allow a foo.ko file // consisting of multiple .o's to have foo.o/foo.c as a source. // (It uses ld -r -o foo.o EACH.o EACH.o). { string srcname = s.translated_source; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } // and once again, for the trailer type auxiliary outputs. for (unsigned i=0; itrailer_p) continue; string srcname = s.auxiliary_outputs[i]->filename; assert (srcname != "" && srcname.rfind('/') != string::npos); string objname = srcname.substr(srcname.rfind('/')+1); // basename assert (objname != "" && objname[objname.size()-1] == 'c'); objname[objname.size()-1] = 'o'; // now objname o << " " + objname; } o << " stap_symbols.o" << endl; o << s.tmpdir << "/stap_symbols.o: $(STAPCONF_HEADER)" << endl; // add all stapconf dependencies string translated = s.translated_source; translated[translated.size()-1] = 'o'; o << translated << ": $(STAPCONF_HEADER)" << endl; translated[translated.size()-1] = 'i'; o << translated << ": $(STAPCONF_HEADER)" << endl; for (unsigned i=0; ifilename; translated[translated.size()-1] = 'o'; o << translated << ": $(STAPCONF_HEADER)" << endl; } o.close (); // Generate module directory pathname and make sure it exists. string module_dir = s.kernel_build_tree; string module_dir_makefile = module_dir + "/Makefile"; struct stat st; rc = stat(module_dir_makefile.c_str(), &st); if (rc != 0) { clog << _F("Checking \" %s \" failed with error: %s\nEnsure kernel development headers & makefiles are installed.", module_dir_makefile.c_str(), strerror(errno)) << endl; s.set_try_server (); return rc; } // Run make vector make_cmd = make_make_cmd(s, s.tmpdir); if (s.keep_tmpdir) { string E_source = s.translated_source.substr(s.translated_source.find_last_of("/")+1); E_source.at(E_source.length() - 1) = 'i'; // overwrite the last character make_cmd.push_back(E_source); } rc = run_make_cmd(s, make_cmd); if (rc) s.set_try_server (); return rc; } /* * If uprobes was built as part of the kernel build (either built-in * or as a module), the uprobes exports should show up. This is to be * as distinct from the stap-built uprobes.ko from the runtime. */ static bool kernel_built_uprobes (systemtap_session& s) { if (s.runtime_usermode_p()) return true; // sort of, via dyninst // see also tapsets.cxx:kernel_supports_inode_uprobes() return ((s.kernel_config["CONFIG_ARCH_SUPPORTS_UPROBES"] == "y" && s.kernel_config["CONFIG_UPROBES"] == "y") || (s.kernel_exports.find("unregister_uprobe") != s.kernel_exports.end())); } static int make_uprobes (systemtap_session& s) { if (s.verbose > 1) clog << _("Pass 4, preamble: (re)building SystemTap's version of uprobes.") << endl; // create a subdirectory for the uprobes module string dir(s.tmpdir + "/uprobes"); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for build uprobes."); s.set_try_server (); return 1; } // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); omf << "obj-m := uprobes.o" << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; omf.close(); // create a simple #include-chained source file string runtimesourcefile(s.runtime_path + "/linux/uprobes/uprobes.c"); string sourcefile(dir + "/uprobes.c"); ofstream osrc(sourcefile.c_str()); osrc << "#include \"" << runtimesourcefile << "\"" << endl; // pass --modinfo k=v to uprobes build too for (unsigned i = 0; i < s.modinfos.size(); i++) { const string& mi = s.modinfos[i]; size_t loc = mi.find('='); string tag = mi.substr (0, loc); string value = mi.substr (loc+1); osrc << "MODULE_INFO(" << tag << "," << lex_cast_qstring(value) << ");" << endl; } osrc.close(); // make the module vector make_cmd = make_make_cmd(s, dir); int rc = run_make_cmd(s, make_cmd); if (!rc && !copy_file(dir + "/Module.symvers", s.tmpdir + "/Module.symvers")) rc = -1; if (s.verbose > 1) clog << _("uprobes rebuild exit code: ") << rc << endl; if (rc) s.set_try_server (); else s.uprobes_path = dir + "/uprobes.ko"; return rc; } static bool get_cached_uprobes(systemtap_session& s) { s.uprobes_hash = s.use_cache ? find_uprobes_hash(s) : ""; if (!s.uprobes_hash.empty()) { // NB: We always put uprobes.ko in its own directory, especially so // stap-serverd can more easily locate it. string dir(s.tmpdir + "/uprobes"); if (create_dir(dir.c_str()) != 0) return false; string cacheko = s.uprobes_hash + ".ko"; string tmpko = dir + "/uprobes.ko"; // The symvers file still needs to go in the script module's directory. string cachesyms = s.uprobes_hash + ".symvers"; string tmpsyms = s.tmpdir + "/Module.symvers"; if (get_file_size(cacheko) > 0 && copy_file(cacheko, tmpko) && get_file_size(cachesyms) > 0 && copy_file(cachesyms, tmpsyms)) { s.uprobes_path = tmpko; return true; } } return false; } static void set_cached_uprobes(systemtap_session& s) { if (s.use_cache && !s.uprobes_hash.empty()) { string cacheko = s.uprobes_hash + ".ko"; string tmpko = s.tmpdir + "/uprobes/uprobes.ko"; copy_file(tmpko, cacheko); string cachesyms = s.uprobes_hash + ".symvers"; string tmpsyms = s.tmpdir + "/uprobes/Module.symvers"; copy_file(tmpsyms, cachesyms); } } int uprobes_pass (systemtap_session& s) { if (!s.need_uprobes || kernel_built_uprobes(s)) return 0; if (s.kernel_config["CONFIG_UTRACE"] != string("y")) { clog << _("user-space process-tracking facilities not available [man error::process-tracking]") << endl; s.set_try_server (); return 1; } /* * We need to use the version of uprobes that comes with SystemTap. Try to * get it from the cache first. If not found, build it and try to save it to * the cache for future reuse. */ int rc = 0; if (!get_cached_uprobes(s)) { rc = make_uprobes(s); if (!rc) set_cached_uprobes(s); } if (rc) s.set_try_server (); return rc; } static vector make_dyninst_run_command (systemtap_session& s, const string& remotedir, const string&) { vector cmd { getenv("SYSTEMTAP_STAPDYN") ?: BINDIR "/stapdyn" }; // use slightly less verbosity if (s.verbose > 0) cmd.insert(cmd.end(), s.verbose - 1, "-v"); if (s.suppress_warnings) cmd.push_back("-w"); if (!s.cmd.empty()) cmd.insert(cmd.end(), { "-c", s.cmd }); if (s.target_pid) cmd.insert(cmd.end(), { "-x", lex_cast(s.target_pid) }); if (!s.output_file.empty()) cmd.insert(cmd.end(), { "-o", s.output_file }); if (s.color_mode != s.color_auto) { auto mode = s.color_mode == s.color_always ? "always" : "never"; cmd.insert(cmd.end(), { "-C", mode }); } cmd.push_back((remotedir.empty() ? s.tmpdir : remotedir) + "/" + s.module_filename()); // add module arguments cmd.insert(cmd.end(), s.globalopts.begin(), s.globalopts.end()); return cmd; } static vector make_kernel_run_command (systemtap_session& s, const string& remotedir, const string& version) { // for now, just spawn staprun vector cmd { getenv("SYSTEMTAP_STAPRUN") ?: BINDIR "/staprun" }; // use slightly less verbosity if (s.verbose > 0) cmd.insert(cmd.end(), s.verbose - 1, "-v"); if (s.suppress_warnings) cmd.push_back("-w"); if (!s.output_file.empty()) cmd.insert(cmd.end(), { "-o", s.output_file }); if (!s.cmd.empty()) cmd.insert(cmd.end(), { "-c", s.cmd }); if (s.target_pid) cmd.insert(cmd.end(), { "-t", lex_cast(s.target_pid) }); if (s.target_namespaces_pid) cmd.insert(cmd.end(), { "-N", lex_cast(s.target_namespaces_pid) }); if (s.buffer_size) cmd.insert(cmd.end(), { "-b", lex_cast(s.buffer_size) }); if (s.read_stdin) cmd.insert(cmd.end(), "-i"); if (s.need_uprobes && !kernel_built_uprobes(s)) { string opt_u = "-u"; if (!s.uprobes_path.empty() && strverscmp("1.4", version.c_str()) <= 0) { if (remotedir.empty()) opt_u.append(s.uprobes_path); else opt_u.append(remotedir + "/" + basename(s.uprobes_path.c_str())); } cmd.push_back(opt_u); } if (s.load_only) cmd.push_back(s.output_file.empty() ? "-L" : "-D"); // Note that if this system requires signed modules, we can't rename // it after it has been signed. if (!s.modname_given && (strverscmp("1.6", version.c_str()) <= 0) && s.mok_fingerprints.empty()) cmd.push_back("-R"); if (!s.size_option.empty()) cmd.insert(cmd.end(), { "-S", s.size_option }); if (s.color_mode != s.color_auto) { auto mode = s.color_mode == s.color_always ? "always" : "never"; cmd.insert(cmd.end(), { "-C", mode }); } if (s.monitor) cmd.insert(cmd.end(), { "-M", lex_cast(s.monitor_interval) }); cmd.push_back((remotedir.empty() ? s.tmpdir : remotedir) + "/" + s.module_filename()); // add module arguments cmd.insert(cmd.end(), s.globalopts.begin(), s.globalopts.end()); return cmd; } static vector make_bpf_run_command (systemtap_session& s, const string& remotedir, const string&) { vector cmd; cmd.push_back(getenv("SYSTEMTAP_STAPBPF") ?: BINDIR "/stapbpf"); for (unsigned i=1; i make_run_command (systemtap_session& s, const string& remotedir, const string& version) { switch (s.runtime_mode) { case systemtap_session::kernel_runtime: return make_kernel_run_command (s, remotedir, version); case systemtap_session::dyninst_runtime: return make_dyninst_run_command(s, remotedir, version); case systemtap_session::bpf_runtime: return make_bpf_run_command(s, remotedir, version); default: abort(); } } // Build tiny kernel modules to query tracepoints. // Given a (header-file -> test-contents) map, compile them ASAP, and return // a (header-file -> obj-filename) map. map make_tracequeries(systemtap_session& s, const map& contents) { static unsigned tick = 0; string basename("tracequery_kmod_" + lex_cast(++tick)); map objs; // create a subdirectory for the module string dir(s.tmpdir + "/" + basename); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for querying tracepoints."); s.set_try_server (); return objs; } // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); // force debuginfo generation, and relax implicit functions omf << "EXTRA_CFLAGS := -g -Wno-implicit-function-declaration " << WERROR << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; // PR23488: need to override this kconfig, else we get no useful struct decls omf << "CONFIG_DEBUG_INFO_REDUCED := " << endl; // PR18389: disable GCC's Identical Code Folding, since the stubs may look identical omf << "EXTRA_CFLAGS += $(call cc-option,-fno-ipa-icf)" << endl; omf << "EXTRA_CFLAGS += -I" + s.kernel_build_tree << endl; if (s.kernel_source_tree != "") omf << "EXTRA_CFLAGS += -I" + s.kernel_source_tree << endl; for (unsigned i = 0; i < s.kernel_extra_cflags.size(); i++) omf << "EXTRA_CFLAGS += " + s.kernel_extra_cflags[i] << endl; omf << "obj-m := " << endl; // write out each header-specific source file into a separate file for (map::const_iterator it = contents.begin(); it != contents.end(); it++) { string sbasename = basename + "_" + lex_cast(++tick); // suffixed // write out source code string srcname = dir + "/" + sbasename + ".c"; string src = it->second; ofstream osrc(srcname.c_str()); osrc << src; osrc.close(); if (s.verbose > 2) clog << _F("Processing tracepoint header %s with query %s", it->first.c_str(), srcname.c_str()) << endl; // arrange to build it omf << "obj-m += " + sbasename + ".o" << endl; // NB: without prefix objs[it->first] = dir + "/" + sbasename + ".o"; } omf.close(); // make the module vector make_cmd = make_make_objs_cmd(s, dir); make_cmd.push_back ("-i"); // ignore errors, give rc 0 even in case of tracepoint header nits bool quiet = (s.verbose < 4); int rc = run_make_cmd(s, make_cmd, quiet, quiet); if (rc) s.set_try_server (); // Sometimes we fail a tracequery due to PR9993 / PR11649 type // kernel trace header problems. In this case, due to PR12729, we // used to get a lovely "Warning: make exited with status: 2" but no // other useful diagnostic. -vvvv would let a user see what's up, // but the user can't fix the problem even with that. return objs; } // Build a tiny kernel module to query type information static int make_typequery_kmod(systemtap_session& s, const vector& headers, string& name) { static unsigned tick = 0; string basename("typequery_kmod_" + lex_cast(++tick)); // create a subdirectory for the module string dir(s.tmpdir + "/" + basename); if (create_dir(dir.c_str()) != 0) { s.print_warning("failed to create directory for querying types."); s.set_try_server (); return 1; } name = dir + "/" + basename + ".ko"; // create a simple Makefile string makefile(dir + "/Makefile"); ofstream omf(makefile.c_str()); omf << "EXTRA_CFLAGS := -g -fno-eliminate-unused-debug-types" << endl; // RHBZ 655231: later rhel6 kernels' module-signing kbuild logic breaks out-of-tree modules omf << "CONFIG_MODULE_SIG := n" << endl; // PR23488: need to override this kconfig, else we get no useful struct decls omf << "CONFIG_DEBUG_INFO_REDUCED := " << endl; // NB: We use -include instead of #include because that gives us more power. // Using #include searches relative to the source's path, which in this case // is /tmp/..., so that's not helpful. Using -include will search relative // to the cwd, which will be the kernel build root. This means if you have a // full kernel build tree, it's possible to get at types that aren't in the // normal include path, e.g.: // @cast(foo, "bsd_acct_struct", "kernel")->... omf << "CFLAGS_" << basename << ".o :="; for (size_t i = 0; i < headers.size(); ++i) omf << " -include " << lex_cast_qstring(headers[i]); // XXX right quoting? omf << endl; omf << "obj-m := " + basename + ".o" << endl; omf.close(); // create our -nearly- empty source file string source(dir + "/" + basename + ".c"); ofstream osrc(source.c_str()); // this is mandated by linux kbuild as of 5.11+ osrc << "#include " << endl; osrc << "MODULE_LICENSE(\"GPL\");" << endl; osrc.close(); // make the module vector make_cmd = make_make_cmd(s, dir); bool quiet = (s.verbose < 4); int rc = run_make_cmd(s, make_cmd, quiet, false /* stderr should be quiet PR27658 */); if (rc) s.set_try_server (); return rc; } // Build a tiny user module to query type information static int make_typequery_umod(systemtap_session& s, const vector& headers, string& name) { static unsigned tick = 0; name = s.tmpdir + "/typequery_umod_" + lex_cast(++tick) + ".so"; // make the module // // NB: As with kmod, using -include makes relative paths more useful. The // cwd in this case will be the cwd of stap itself though, which may be // trickier to deal with. It might be better to "cd `dirname $script`" // first... // s.runtime_path allows finding linux/stp_tls.h vector cmd { "gcc", "-shared", "-g", "-I", s.runtime_path, "-fno-eliminate-unused-debug-types", "-xc", "/dev/null", "-o", name, }; for (size_t i = 0; i < headers.size(); ++i) cmd.insert(cmd.end(), { "-include", headers[i] }); bool quiet = (s.verbose < 4); int rc = stap_system (s.verbose, cmd, quiet, false /* stderr should be quiet PR27658 */); if (rc) s.set_try_server (); return rc; } int make_typequery(systemtap_session& s, string& module) { // check our memoized cache first if (s.typequery_memo.find(module) != s.typequery_memo.end()) { module = s.typequery_memo.at(module); return 0; } int rc; string new_module; vector headers; bool kernel = startswith(module, "kernel"); for (size_t end, i = kernel ? 6 : 0; i < module.size(); i = end + 1) { if (module[i] != '<') return -1; end = module.find('>', ++i); if (end == string::npos) return -1; string header = module.substr(i, end - i); vector matches; if (regexp_match(header, "^[a-zA-Z0-9/_.+-]+$", matches)) s.print_warning("skipping malformed @cast header \""+ header + "\""); else headers.push_back(header); } if (headers.empty()) return -1; if (kernel) rc = make_typequery_kmod(s, headers, new_module); else rc = make_typequery_umod(s, headers, new_module); // memoize the result --- even if it failed (rc != 0), so as to avoid // repeated attempts to rebuild the same thing s.typequery_memo[module] = new_module; if (!rc) module = new_module; return rc; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/buildrun.h000066400000000000000000000016251414446751200154250ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2005 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef BUILDRUN_H #define BUILDRUN_H #include "elaborate.h" int compile_pass (systemtap_session& s); int uprobes_pass (systemtap_session& s); std::vector make_run_command (systemtap_session& s, const std::string& remotedir="", const std::string& version=VERSION); std::map make_tracequeries(systemtap_session& s, const std::map& contents); int make_typequery(systemtap_session& s, std::string& module); #endif // BUILDRUN_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/cache.cxx000066400000000000000000000316261414446751200152230ustar00rootroot00000000000000// systemtap cache manager // Copyright (C) 2006-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "session.h" #include "cache.h" #include "util.h" #include "stap-probe.h" #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include } using namespace std; #define SYSTEMTAP_CACHE_MAX_FILENAME "cache_mb_limit" #define SYSTEMTAP_CACHE_DEFAULT_MB 256 #define SYSTEMTAP_CACHE_CLEAN_INTERVAL_FILENAME "cache_clean_interval_s" #define SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S 300 struct cache_ent_info { vector paths; off_t size; // sum across all paths time_t mtime; // newest of all paths cache_ent_info(const vector& paths); bool operator<(const struct cache_ent_info& other) const; void unlink() const; }; void add_stapconf_to_cache(systemtap_session& s) { bool verbose = s.verbose > 1; string stapconf_src_path = s.tmpdir + "/" + s.stapconf_name; if (!copy_file(stapconf_src_path, s.stapconf_path, verbose)) { // NB: this is not so severe as to prevent reuse of the .ko // already copied. // // s.use_script_cache = false; // return; } } void add_script_to_cache(systemtap_session& s) { bool verbose = s.verbose > 1; // PR10543: clean the cache *before* we try putting something new into it. // We don't want to risk having the brand new contents being erased again. clean_cache(s); string module_src_path = s.tmpdir + "/" + s.module_filename(); PROBE2(stap, cache__add__module, module_src_path.c_str(), s.hash_path.c_str()); if (!copy_file(module_src_path, s.hash_path, verbose)) { s.use_script_cache = false; return; } // Copy the signature file, if any. It is not an error if this fails. if (file_exists (module_src_path + ".sgn")) copy_file(module_src_path + ".sgn", s.hash_path + ".sgn", verbose); string c_dest_path = s.hash_path; if (endswith(c_dest_path, ".ko") || endswith(c_dest_path, ".so")) c_dest_path.resize(c_dest_path.size() - 3); c_dest_path += ".c"; PROBE2(stap, cache__add__source, s.translated_source.c_str(), c_dest_path.c_str()); if (!copy_file(s.translated_source, c_dest_path, verbose)) { // NB: this is not so severe as to prevent reuse of the .ko // already copied. // // s.use_script_cache = false; } } bool get_stapconf_from_cache(systemtap_session& s) { if (s.poison_cache) return false; string stapconf_dest_path = s.tmpdir + "/" + s.stapconf_name; int fd_stapconf; // See if stapconf exists fd_stapconf = open(s.stapconf_path.c_str(), O_RDONLY); if (fd_stapconf == -1) { // It isn't in cache. return false; } // Copy the stapconf header file to the destination if (!get_file_size(fd_stapconf) || !copy_file(s.stapconf_path, stapconf_dest_path)) { close(fd_stapconf); return false; } // We're done with this file handle. close(fd_stapconf); if (s.verbose > 1) clog << _("Pass 4: using cached ") << s.stapconf_path << endl; return true; } bool get_script_from_cache(systemtap_session& s) { if (s.poison_cache) return false; string module_dest_path = s.tmpdir + "/" + s.module_filename(); string c_src_path = s.hash_path; int fd_module, fd_c; if (endswith(c_src_path, ".ko") || endswith(c_src_path, ".so")) c_src_path.resize(c_src_path.size() - 3); c_src_path += ".c"; // See if module exists fd_module = open(s.hash_path.c_str(), O_RDONLY); if (fd_module == -1) { // It isn't in cache. return false; } // See if C file exists. fd_c = open(c_src_path.c_str(), O_RDONLY); if (fd_c == -1) { // The module is there, but the C file isn't. Cleanup and // return. close(fd_module); unlink(s.hash_path.c_str()); return false; } // Check that the files aren't empty, and then // copy the cached C file to the destination if (!get_file_size(fd_module) || !get_file_size(fd_c) || !copy_file(c_src_path, s.translated_source)) { close(fd_module); close(fd_c); return false; } // Copy the cached module to the destination (if needed) if (s.last_pass != 3) { if (!copy_file(s.hash_path, module_dest_path)) { unlink(c_src_path.c_str()); close(fd_module); close(fd_c); return false; } // Copy the module signature file, if any. // It is not an error if this fails. if (file_exists (s.hash_path + ".sgn")) copy_file(s.hash_path + ".sgn", module_dest_path + ".sgn"); } // We're done with these file handles. close(fd_module); close(fd_c); // To preserve semantics (since this will happen if we're not // caching), display the C source if the last pass is 3. if (s.last_pass == 3) { ifstream i (s.translated_source.c_str()); cout << i.rdbuf(); } // And similarly, display probe module name for -p4. if (s.last_pass == 4) cout << s.hash_path << endl; // If everything worked, tell the user. We need to do this here, // since if copying the cached C file works, but copying the cached // module fails, we remove the cached C file and let the C file get // regenerated. // NB: don't use s.verbose here, since we're still in pass-2, // i.e., s.verbose = s.perpass_verbose[1]. if (s.perpass_verbose[2]) clog << _("Pass 3: using cached ") << c_src_path << endl; if (s.perpass_verbose[3] && s.last_pass != 3) clog << _("Pass 4: using cached ") << s.hash_path << endl; PROBE2(stap, cache__get, c_src_path.c_str(), s.hash_path.c_str()); return true; } void clean_cache(systemtap_session& s) { if (s.cache_path != "") { /* Get cache size limit from file in the stap cache dir */ string cache_max_filename = s.cache_path + "/"; cache_max_filename += SYSTEMTAP_CACHE_MAX_FILENAME; ifstream cache_max_file(cache_max_filename.c_str(), ios::in); unsigned long cache_mb_max; if (cache_max_file.is_open()) { cache_max_file >> cache_mb_max; cache_max_file.close(); } else { //file doesnt exist, create a default size ofstream default_cache_max(cache_max_filename.c_str(), ios::out); default_cache_max << SYSTEMTAP_CACHE_DEFAULT_MB << endl; cache_mb_max = SYSTEMTAP_CACHE_DEFAULT_MB; if (s.verbose > 1) clog << _F("Cache limit file %s/%s missing, creating default.", s.cache_path.c_str(), SYSTEMTAP_CACHE_MAX_FILENAME) << endl; } /* Get cache clean interval from file in the stap cache dir */ string cache_clean_interval_filename = s.cache_path + "/"; cache_clean_interval_filename += SYSTEMTAP_CACHE_CLEAN_INTERVAL_FILENAME; ifstream cache_clean_interval_file(cache_clean_interval_filename.c_str(), ios::in); unsigned long cache_clean_interval; if (cache_clean_interval_file.is_open()) { cache_clean_interval_file >> cache_clean_interval; cache_clean_interval_file.close(); } else { //file doesnt exist, create a default interval ofstream default_cache_clean_interval(cache_clean_interval_filename.c_str(), ios::out); default_cache_clean_interval << SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S << endl; cache_clean_interval = SYSTEMTAP_CACHE_CLEAN_DEFAULT_INTERVAL_S; if (s.verbose > 1) clog << _F("Cache clean interval file %s missing, creating default.", cache_clean_interval_filename.c_str())<< endl; } /* Check the cache cleaning interval */ struct stat sb; if(stat(cache_clean_interval_filename.c_str(), &sb) < 0) { const char* e = strerror (errno); cerr << _F("clean_cache stat error: %s", e) << endl; return; } struct timeval current_time; gettimeofday(¤t_time, NULL); if(difftime(current_time.tv_sec, sb.st_mtime) < cache_clean_interval) { //interval not passed, don't continue if (s.verbose > 1) clog << _F("Cache cleaning skipped, interval not reached %ld s / %lu s.", (long) (current_time.tv_sec-sb.st_mtime), cache_clean_interval) << endl; return; } else { //interval reached, continue if (s.verbose > 1) clog << _F("Cleaning cache, interval reached %ld s > %lu s.", (long) (current_time.tv_sec-sb.st_mtime), cache_clean_interval) << endl; } // glob for all files that look like hashes glob_t cache_glob; ostringstream glob_pattern; glob_pattern << s.cache_path << "/*/*"; for (unsigned int i = 0; i < 32; i++) glob_pattern << "[[:xdigit:]]"; glob_pattern << "*"; int rc = glob(glob_pattern.str().c_str(), 0, NULL, &cache_glob); if (rc) { cerr << _F("clean_cache glob error rc=%d", rc) << endl; return; } regex_t hash_len_re; rc = regcomp (&hash_len_re, "([[:xdigit:]]{32}_[[:digit:]]+)", REG_EXTENDED); if (rc) { cerr << _F("clean_cache regcomp error rc=%d", rc) << endl; globfree(&cache_glob); return; } // group all files with the same HASH_LEN map > cache_groups; for (size_t i = 0; i < cache_glob.gl_pathc; i++) { const char* path = cache_glob.gl_pathv[i]; regmatch_t hash_len; rc = regexec(&hash_len_re, path, 1, &hash_len, 0); if (rc || hash_len.rm_so == -1 || hash_len.rm_eo == -1) cache_groups[path].push_back(path); // ungrouped else cache_groups[string(path + hash_len.rm_so, hash_len.rm_eo - hash_len.rm_so)] .push_back(path); } regfree(&hash_len_re); globfree(&cache_glob); // create each cache entry and accumulate the sum off_t cache_size_b = 0; set cache_contents; for (map >::const_iterator it = cache_groups.begin(); it != cache_groups.end(); ++it) { cache_ent_info cur_info(it->second); if (cache_contents.insert(cur_info).second) cache_size_b += cur_info.size; } unsigned long r_cache_size = cache_size_b; vector removed; //unlink .ko and .c until the cache size is under the limit for (set::iterator i = cache_contents.begin(); i != cache_contents.end(); ++i) { if (r_cache_size < cache_mb_max * 1024 * 1024) //convert cache_mb_max to bytes break; //remove this (*i) cache_entry, add to removed list for (size_t j = 0; j < i->paths.size(); ++j) PROBE1(stap, cache__clean, i->paths[j].c_str()); i->unlink(); r_cache_size -= i->size; removed.push_back(&*i); } if (s.verbose > 1 && !removed.empty()) { clog << _("Cache cleaning successful, removed entries: ") << endl; for (size_t i = 0; i < removed.size(); ++i) for (size_t j = 0; j < removed[i]->paths.size(); ++j) clog << " " << removed[i]->paths[j] << endl; } if(utime(cache_clean_interval_filename.c_str(), NULL)<0) { const char* e = strerror (errno); cerr << _F("clean_cache utime error: %s", e) << endl; return; } } else { if (s.verbose > 1) clog << _("Cache cleaning skipped, no cache path.") << endl; } } cache_ent_info::cache_ent_info(const vector& paths): paths(paths), size(0), mtime(0) { struct stat file_info; for (size_t i = 0; i < paths.size(); ++i) if (stat(paths[i].c_str(), &file_info) == 0) { size += file_info.st_size; if (file_info.st_mtime > mtime) mtime = file_info.st_mtime; } } // The ordering here determines the order that // files will be removed from the cache. bool cache_ent_info::operator<(const struct cache_ent_info& other) const { if (mtime != other.mtime) return mtime < other.mtime; if (size != other.size) return size < other.size; if (paths.size() != other.paths.size()) return paths.size() < other.paths.size(); for (size_t i = 0; i < paths.size(); ++i) if (paths[i] != other.paths[i]) return paths[i] < other.paths[i]; return false; } void cache_ent_info::unlink() const { for (size_t i = 0; i < paths.size(); ++i) ::unlink(paths[i].c_str()); } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/cache.h000066400000000000000000000004601414446751200146400ustar00rootroot00000000000000void add_script_to_cache(systemtap_session& s); bool get_script_from_cache(systemtap_session& s); void add_stapconf_to_cache(systemtap_session& s); bool get_stapconf_from_cache(systemtap_session& s); void clean_cache(systemtap_session& s); /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/client-http.cxx000066400000000000000000001240011414446751200164010ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017, 2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #ifdef HAVE_HTTP_SUPPORT #include "session.h" #include "client-http.h" #include "util.h" #include "staptree.h" #include "elaborate.h" #include "nsscommon.h" #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #include #include #include #include } using namespace std; class http_client { public: http_client (systemtap_session &s): root(0), s(s), curl(0), retry(0), location(nullptr) { } ~http_client () {if (curl) curl_easy_cleanup(curl); remove_file_or_dir (pem_cert_file.c_str());} json_object *root; std::map header_values; std::vector> env_vars; enum download_type {json_type, file_type}; std::string pem_cert_file; std::string host; enum cert_type {signer_trust, ssl_trust}; bool download (const std::string & url, enum download_type type, bool report_errors, bool cleanup); bool download_pem_cert (const std::string & url, std::string & certs); bool post (const string & url, vector> & request_parameters); void add_file (std::string filename); void add_module (std::string module); void get_header_field (const std::string & data, const std::string & field); static size_t get_data_shim (void *ptr, size_t size, size_t nitems, void *client); static size_t get_file (void *ptr, size_t size, size_t nitems, FILE * stream); static size_t get_header_shim (void *ptr, size_t size, size_t nitems, void *client); std::string get_rpmname (std::string & pathname); void get_buildid (string fname); void get_kernel_buildid (void); long get_response_code (void); bool add_server_cert_to_client (std::string & tmpdir, db_init_types db_init_type); static int trace (CURL *, curl_infotype type, unsigned char *data, size_t size, void *); bool delete_op (const std::string & url); bool check_trust (enum cert_type, vector &specified_servers); private: size_t get_header (void *ptr, size_t size, size_t nitems); size_t get_data (void *ptr, size_t size, size_t nitems); static int process_buildid_shim (Dwfl_Module *dwflmod, void **userdata, const char *name, Dwarf_Addr base, void *client); int process_buildid (Dwfl_Module *dwflmod); std::vector files; std::vector modules; std::vector> buildids; systemtap_session &s; CURL *curl; int retry; std::string *location; std::string buildid; }; // TODO is there a better way than making this static? static http_client *http; size_t http_client::get_data_shim (void *ptr, size_t size, size_t nitems, void *client) { http_client *http = static_cast(client); return http->get_data (ptr, size, nitems); } // Parse the json data at PTR having SIZE and NITEMS into root size_t http_client::get_data (void *ptr, size_t size, size_t nitems) { string data ((const char *) ptr, (size_t) size * nitems); // Process the JSON data. if (data.front () == '{') { enum json_tokener_error json_error; root = json_tokener_parse_verbose (data.c_str(), &json_error); if (root == NULL) throw SEMANTIC_ERROR (json_tokener_error_desc (json_error)); } else { clog << "Malformed JSON data: '" << data << "'" << endl; } return size * nitems; } size_t http_client::get_header_shim (void *ptr, size_t size, size_t nitems, void *client) { http_client *http = static_cast(client); return http->get_header (ptr, size, nitems); } // Extract header values at PTR having SIZE and NITEMS into header_values size_t http_client::get_header (void *ptr, size_t size, size_t nitems) { string data ((const char *) ptr, (size_t) size * nitems); unsigned long colon = data.find(':'); if (colon != string::npos) { string key = data.substr (0, colon); string value = data.substr (colon + 2, data.length() - colon - 4); header_values[key] = value; } return size * nitems; } // Put the data, e.g. .ko at PTR having SIZE and NITEMS into STREAM size_t http_client::get_file (void *ptr, size_t size, size_t nitems, std::FILE * stream) { size_t written; written = fwrite (ptr, size, nitems, stream); std::fflush (stream); return written; } // Trace sent and received packets int http_client::trace(CURL *, curl_infotype type, unsigned char *data, size_t size, void *) { string text; switch(type) { case CURLINFO_TEXT: clog << "== Info: " << data; return 0; case CURLINFO_HEADER_OUT: text = "=> Send header"; break; case CURLINFO_DATA_OUT: text = "=> Send data"; break; case CURLINFO_HEADER_IN: text = "<= Recv header"; break; case CURLINFO_DATA_IN: text = "<= Recv data"; break; default: return 0; } size_t i; size_t c; const unsigned int width = 64; // Packet contents exceeding this size are probably downloaded file components const unsigned int max_size = 0x2000; clog << text << " " << size << " bytes (" << showbase << hex << size << ")" << dec << noshowbase << endl; if (size > max_size) return 0; for (i = 0; i < size; i += width) { clog << setw(4) << setfill('0') << hex << i << dec << setfill(' ') << ": "; for (c = 0; (c < width) && (i + c < size); c++) { if ((i + c + 1 < size) && data[i + c] == '\r' && data[i + c + 1] == '\n') { i += (c + 2 - width); break; } clog << (char)(isprint (data[i + c]) ? data[i + c] : '.'); if ((i + c + 2 < size) && data[i + c + 1] == '\r' && data[i + c + 2] == '\n') { i += (c + 3 - width); break; } } clog << endl; } return 0; } // Read the certificate bundle corresponding to 'url into 'certs' bool http_client::download_pem_cert (const std::string & url, string & certs) { CURL *dpc_curl; CURLcode res; bool have_certs = false; struct curl_certinfo *certinfo; struct curl_slist *headers = NULL; // Get the certificate info for the url dpc_curl = curl_easy_init (); curl_easy_setopt(dpc_curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(dpc_curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(dpc_curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(dpc_curl, CURLOPT_VERBOSE, 0L); curl_easy_setopt (dpc_curl, CURLOPT_ACCEPT_ENCODING, "deflate"); headers = curl_slist_append (headers, "Accept: */*"); headers = curl_slist_append (headers, "Content-Type: text/html"); curl_easy_setopt (dpc_curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (dpc_curl, CURLOPT_HTTPGET, 1); // older versions of curl don't support CURLINFO_CERTINFO reliably // so use server return cert info as a backup curl_easy_setopt (dpc_curl, CURLOPT_WRITEDATA, http); curl_easy_setopt (dpc_curl, CURLOPT_WRITEFUNCTION, http_client::get_data_shim); if (s.verbose > 2) { curl_easy_setopt (dpc_curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (dpc_curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt(dpc_curl, CURLOPT_CERTINFO, 1L); res = curl_easy_perform (dpc_curl); if (res) return false; res = curl_easy_getinfo (dpc_curl, CURLINFO_CERTINFO, &certinfo); // Create a certificate bundle from the certificate info if (!res && certinfo->num_of_certs > 0) { for (int i = 0; i < certinfo->num_of_certs; i++) { struct curl_slist *slist; for (slist = certinfo->certinfo[i]; slist; slist = slist->next) { string one_cert; string slist_data = string (slist->data); size_t cert_begin, cert_end; if ((cert_begin = slist_data.find("-----BEGIN CERTIFICATE-----")) == string::npos) continue; if ((cert_end = slist_data.find("-----END CERTIFICATE-----", cert_begin)) == string::npos) continue; certs += string (slist_data.substr(cert_begin, cert_end - cert_begin + 28)); have_certs = true; } } } else if (!res && certinfo->num_of_certs == 0) { json_object *cert_obj; // Get the certificate returned by the server if (json_object_object_get_ex (root, "certificate", &cert_obj)) { certs = string (json_object_get_string(cert_obj)); have_certs = true; } } if (s.verbose >= 2) clog << "Server returned certificate chain with: " << certinfo->num_of_certs << " members" << endl; curl_easy_cleanup(dpc_curl); curl_global_cleanup(); return have_certs; } bool http_client::download (const std::string & url, http_client::download_type type, bool report_errors, bool cleanup) { struct curl_slist *headers = NULL; if (curl) curl_easy_reset (curl); else curl = curl_easy_init (); if (s.verbose > 2) { curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt (curl, CURLOPT_URL, url.c_str ()); curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); //Prevent "longjmp causes uninitialized stack frame" bug curl_easy_setopt (curl, CURLOPT_ACCEPT_ENCODING, "deflate"); headers = curl_slist_append (headers, "Accept: */*"); headers = curl_slist_append (headers, "Content-Type: text/html"); curl_easy_setopt (curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (curl, CURLOPT_HTTPGET, 1); curl_easy_setopt (curl, CURLOPT_SSLCERTTYPE, "PEM"); curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1L); // Enabling verifyhost causes a mismatch between "hostname" in the // server cert db and "hostname.domain" given as the client url curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt (curl, CURLOPT_CAINFO, pem_cert_file.c_str()); if (type == json_type) { curl_easy_setopt (curl, CURLOPT_WRITEDATA, http); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, http_client::get_data_shim); } else if (type == file_type) { std::string filename = url; std::string filepath; if (filename.back() == '/') filename.erase(filename.length()-1); filepath = s.tmpdir + "/" + filename.substr (filename.rfind ('/')+1); if (s.verbose >= 3) clog << "Downloaded " + filepath << endl; std::FILE *File = std::fopen (filepath.c_str(), "wb"); curl_easy_setopt (curl, CURLOPT_WRITEDATA, File); curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, http_client::get_file); } curl_easy_setopt (curl, CURLOPT_HEADERDATA, http); curl_easy_setopt (curl, CURLOPT_HEADERFUNCTION, http_client::get_header_shim); CURLcode res = curl_easy_perform (curl); if (cleanup) { curl_easy_cleanup(curl); curl_global_cleanup(); curl = 0; } if (res != CURLE_OK && res != CURLE_GOT_NOTHING) { if (report_errors) clog << curl_easy_strerror (res) << ' ' << url << endl; return false; } else return true; } // Get the rpm corresponding to SEARCH_FILE std::string http_client::get_rpmname (std::string &search_file) { rpmts ts = NULL; Header hdr; rpmdbMatchIterator mi; rpmtd td; td = rpmtdNew (); ts = rpmtsCreate (); rpmReadConfigFiles (NULL, NULL); int metrics[] = { RPMTAG_NAME, RPMTAG_EVR, RPMTAG_ARCH, RPMTAG_FILENAMES, }; struct { string name; string evr; string arch; } rpmhdr; bool found = false; mi = rpmtsInitIterator (ts, RPMDBI_PACKAGES, NULL, 0); while (NULL != (hdr = rpmdbNextIterator (mi))) { hdr = headerLink(hdr); for (unsigned int i = 0; i < (sizeof (metrics) / sizeof (int)); i++) { headerGet (hdr, metrics[i], td, HEADERGET_EXT); switch (td->type) { case RPM_STRING_TYPE: { const char *rpmval = rpmtdGetString (td); switch (metrics[i]) { case RPMTAG_NAME: rpmhdr.name = rpmval; break; case RPMTAG_EVR: rpmhdr.evr = rpmval; break; case RPMTAG_ARCH: rpmhdr.arch = rpmval; break; } break; } case RPM_STRING_ARRAY_TYPE: while (rpmtdNext(td) >= 0) { const char *rpmval = rpmtdGetString (td); if (strcmp (rpmval, search_file.c_str()) == 0) { found = true; break; } } break; } rpmtdFreeData (td); rpmtdReset (td); } headerFree (hdr); if (found) break; } rpmFreeCrypto (); rpmdbFreeIterator (mi); rpmtsFree (ts); rpmtdFree (td); if (found) { return rpmhdr.name + "-" + rpmhdr.evr + "." + rpmhdr.arch; } // There wasn't an rpm that contains SEARCH_FILE. Return the empty // string. return ""; } // Put the buildid for DWFLMOD into buildids int http_client::process_buildid (Dwfl_Module *dwflmod) { const char *fname; dwfl_module_info (dwflmod, NULL, NULL, NULL, NULL, NULL, &fname, NULL); GElf_Addr bias; int build_id_len = 0; unsigned char *build_id_bits; GElf_Addr build_id_vaddr; string build_id; char *result = NULL; int code; dwfl_module_getelf (dwflmod, &bias); build_id_len = dwfl_module_build_id (dwflmod, (const unsigned char **)&build_id_bits, &build_id_vaddr); for (int i = 0; i < build_id_len; i++) { if (result) code = asprintf (&result, "%s%02x", result, *(build_id_bits+i)); else code = asprintf (&result, "%02x", *(build_id_bits+i)); if (code < 0) return 1; } http->buildids.push_back(make_tuple(fname, result)); return DWARF_CB_OK; } int http_client::process_buildid_shim (Dwfl_Module *dwflmod, void **userdata __attribute__ ((unused)), const char *name __attribute__ ((unused)), Dwarf_Addr base __attribute__ ((unused)), void *client) { http_client *http = static_cast(client); return http->process_buildid (dwflmod); } // Do the setup for getting the buildid for FNAME void http_client::get_buildid (string fname) { int fd; if ((fd = open (fname.c_str(), O_RDONLY)) < 0) { clog << "can't open " << fname; return; } static const Dwfl_Callbacks callbacks = { dwfl_build_id_find_elf, dwfl_standard_find_debuginfo, dwfl_offline_section_address, NULL }; Dwfl *dwfl = dwfl_begin (&callbacks); if (dwfl == NULL) return; if (dwfl_report_offline (dwfl, fname.c_str(), fname.c_str(), fd) == NULL) return; else { dwfl_report_end (dwfl, NULL, NULL); dwfl_getmodules (dwfl, process_buildid_shim, http, 0); } dwfl_end (dwfl); close (fd); } void http_client::get_kernel_buildid (void) { const char *notesfile = "/sys/kernel/notes"; int fd = open (notesfile, O_RDONLY); if (fd < 0) return; union { GElf_Nhdr nhdr; unsigned char data[8192]; } buf; ssize_t n = read (fd, buf.data, sizeof buf); close (fd); if (n <= 0) return; unsigned char *p = buf.data; while (p < &buf.data[n]) { /* No translation required since we are reading the native kernel. */ GElf_Nhdr *nhdr = (GElf_Nhdr *) p; p += sizeof *nhdr; unsigned char *name = p; p += (nhdr->n_namesz + 3) & -4U; unsigned char *bits = p; p += (nhdr->n_descsz + 3) & -4U; if (p <= &buf.data[n] && nhdr->n_type == NT_GNU_BUILD_ID && nhdr->n_namesz == sizeof "GNU" && !memcmp (name, "GNU", sizeof "GNU")) { char *result = NULL; int code; for (unsigned int i = 0; i < nhdr->n_descsz; i++) { if (result) code = asprintf (&result, "%s%02x", result, *(bits+i)); else code = asprintf (&result, "%02x", *(bits+i)); if (code < 0) return; } http->buildids.push_back(make_tuple("kernel", result)); break; } } } long http_client::get_response_code (void) { long response_code = 0; curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &response_code); return response_code; } // Post REQUEST_PARAMETERS, files, modules, buildids to URL bool http_client::post (const string & url, vector> & request_parameters) { struct curl_slist *headers = NULL; int still_running = false; struct curl_httppost *formpost = NULL; struct curl_httppost *lastptr = NULL; struct json_object *jobj = json_object_new_object(); // Add parameter info // "cmd_args": ["script\/\/path\/linetimes.stp","-v","-v", // "-c\/path\/bench.x","--","process(\"\/path\/bench.x\")","main"] string previous_parm_type; string previous_json_data; auto it = request_parameters.begin (); while (it != request_parameters.end ()) { string parm_type = get<0>(*it); string parm_data = get<1>(*it); struct json_object *json_data = json_object_new_string(parm_data.c_str()); if (parm_type == previous_parm_type) { // convert original singleton to an array struct json_object *jarr = json_object_new_array(); json_data = json_object_new_string(previous_json_data.c_str()); json_object_array_add(jarr, json_data); while (parm_type == previous_parm_type) { json_data = json_object_new_string(parm_data.c_str()); json_object_array_add(jarr, json_data); previous_parm_type = parm_type; previous_json_data = parm_data; it++; parm_type = get<0>(*it); parm_data = get<1>(*it); } json_object_object_add(jobj, previous_parm_type.c_str(), jarr); continue; } else json_object_object_add(jobj, parm_type.c_str(), json_data); previous_parm_type = parm_type; previous_json_data = parm_data; it++; } // Fill in the file upload field; libcurl will load data from the // given file name. for (auto it = files.begin (); it != files.end (); ++it) { string filename = (*it); string filebase = basename (filename.c_str()); curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, filebase.c_str(), CURLFORM_FILE, filename.c_str(), CURLFORM_END); curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, "files", CURLFORM_COPYCONTENTS, filename.c_str(), CURLFORM_END); } // Add package info // "file_info": [ { "file_pkg": "kernel-4.14.0-0.rc4.git4.1.fc28.x86_64", // "file_name": "kernel", // "build_id": "ef7210ee3a447c798c3548102b82665f03ef241f" }, // { "file_pkg": "foo-1.1.x86_64", // "file_name": "/usr/bin/foo", // "build_id": "deadbeef" } // ] int bid_idx = 0; struct json_object *jarr = json_object_new_array(); for (auto it = modules.begin (); it != modules.end (); ++it, ++bid_idx) { struct json_object *jfobj = json_object_new_object(); string pkg = (*it); string name = std::get<0>(buildids[bid_idx]); string build_id = std::get<1>(buildids[bid_idx]); json_object_object_add (jfobj, "file_name", json_object_new_string (name.c_str())); json_object_object_add (jfobj, "file_pkg", json_object_new_string (pkg.c_str())); json_object_object_add (jfobj, "build_id", json_object_new_string (build_id.c_str())); json_object_array_add (jarr, jfobj); } json_object_object_add(jobj, "file_info", jarr); // Add environment variables info // "env_vars": {"LANG":"en_US.UTF-8","LC_MESSAGES":"en_US.UTF-8"} if (! http->env_vars.empty()) { struct json_object *jlvobj = json_object_new_object(); for (auto i = http->env_vars.begin(); i != http->env_vars.end(); ++i) { string name = get<0>(*i); string value = get<1>(*i); json_object_object_add (jlvobj, name.c_str(), json_object_new_string(value.c_str())); } if (http->env_vars.size()) json_object_object_add (jobj, "env_vars", jlvobj); } curl_formadd (&formpost, &lastptr, CURLFORM_COPYNAME, "command_environment", CURLFORM_CONTENTTYPE, "application/json", CURLFORM_COPYCONTENTS, json_object_to_json_string_ext (jobj, JSON_C_TO_STRING_PLAIN), CURLFORM_END); json_object_put(jobj); headers = curl_slist_append (headers, "Expect:"); curl_easy_setopt (curl, CURLOPT_URL, url.c_str()); curl_easy_setopt (curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt (curl, CURLOPT_HTTPPOST, formpost); CURLM *multi_handle = curl_multi_init(); curl_multi_add_handle (multi_handle, curl); curl_multi_perform (multi_handle, &still_running); do { struct timeval timeout; int rc; // select() return code CURLMcode mc; // curl_multi_fdset() return code fd_set fdread; fd_set fdwrite; fd_set fdexcep; int maxfd = -1; long curl_timeo = -1; FD_ZERO (&fdread); FD_ZERO (&fdwrite); FD_ZERO (&fdexcep); // set a suitable timeout to play around with timeout.tv_sec = 1; timeout.tv_usec = 0; curl_multi_timeout (multi_handle, &curl_timeo); if (curl_timeo >= 0) { timeout.tv_sec = curl_timeo / 1000; if (timeout.tv_sec > 1) timeout.tv_sec = 1; else timeout.tv_usec = (curl_timeo % 1000) * 1000; } // get file descriptors from the transfers mc = curl_multi_fdset (multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd); if (mc != CURLM_OK) { clog << "curl_multi_fdset() failed" << curl_multi_strerror (mc) << endl; return false; } /* On success the value of maxfd is guaranteed to be >= -1. We call select(maxfd + 1, ...); specially in case of (maxfd == -1) there are no fds ready yet so we call select(0, ...)to sleep 100ms, the minimum suggested value */ if (maxfd == -1) { struct timeval wait = { 0, 100 * 1000 }; // 100ms rc = select (0, NULL, NULL, NULL, &wait); } else rc = select (maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); switch (rc) { case -1: /* select error */ break; case 0: default: curl_multi_perform (multi_handle, &still_running); break; } } while (still_running); curl_multi_cleanup (multi_handle); curl_formfree (formpost); curl_slist_free_all (headers); return true; } // Add FILE to files void http_client::add_file (std::string filename) { files.push_back (filename); } // Add MODULE to modules void http_client::add_module (std::string module) { modules.push_back (module); } // Add the server certificate to the client certificate database bool http_client::add_server_cert_to_client (string &tmpdir, db_init_types db_init_type) { const char *certificate; json_object *cert_obj; // Get the certificate returned by the server if (json_object_object_get_ex (root, "certificate", &cert_obj)) certificate = json_object_get_string(cert_obj); else return false; string pem_tmp = tmpdir + "pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << certificate; pem_out.close(); // Add the certificate to the client nss certificate database if (add_client_cert(pem_tmp, local_client_cert_db_path(), db_init_type) == SECSuccess) { remove_file_or_dir (pem_tmp.c_str()); return true; } return false; } // Ask the server to delete a URL. bool http_client::delete_op (const std::string & url) { curl = curl_easy_init (); if (s.verbose > 2) { curl_easy_setopt (curl, CURLOPT_VERBOSE, 1L); curl_easy_setopt (curl, CURLOPT_DEBUGFUNCTION, trace); } curl_easy_setopt (curl, CURLOPT_URL, url.c_str ()); curl_easy_setopt (curl, CURLOPT_NOSIGNAL, 1); //Prevent "longjmp causes uninitialized stack frame" bug curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); CURLcode res = curl_easy_perform (curl); if (res != CURLE_OK) { clog << "curl_easy_perform() failed: " << curl_easy_strerror (res) << endl; return false; } return true; } // Can a certificate having trust 'this_cert_trust' be handled by the corresponding host bool http_client::check_trust (enum cert_type this_cert_type, vector &specified_servers) { vector server_list; string cert_db_path; string cert_string; if (this_cert_type == signer_trust) { cert_db_path = signing_cert_db_path (); cert_string = "signing"; } else if (this_cert_type == ssl_trust) { cert_db_path = local_client_cert_db_path (); cert_string = "trusted"; } get_server_info_from_db (s, server_list, cert_db_path); vector::iterator i = specified_servers.begin (); while (i != specified_servers.end ()) { bool have_match = false; for (vector::const_iterator j = server_list.begin (); j != server_list.end (); ++j) { if (j->host_name == i->host_name || j->host_name == i->unresolved_host_name.substr(0,j->host_name.length())) { have_match = true; break; } } if (!have_match) i = specified_servers.erase (i); else ++i; } if (specified_servers.size() == 0) { clog << "No matching " << cert_string << " server"; if (server_list.size() > 0) clog << "; the " << cert_string << " servers are\n" << server_list; clog << endl; return false; } else return true; } http_client_backend::http_client_backend (systemtap_session &s) : client_backend(s), files_seen(false) { server_tmpdir = s.tmpdir; } int http_client_backend::initialize () { if (!http) http = new http_client (s); request_parameters.clear(); return 0; } // Symbolically link the given file or directory into the client's temp // directory under the given subdirectory. // // We need to do this even for the http client/server so that we can // fully handle systemtap's complexity. A tricky example of this // complexity would be something like "stap -I tapset_dir script.stp", // where "tapset_dir" is empty. You can transfer files with a POST, // but you can't really indicate an empty directory. // // So, we'll handle this like the NSS client does - build up a // directory of all the files we need to transfer over to the server // and zip it up and send the one zip file. int http_client_backend::include_file_or_directory (const string &subdir, const string &path, const bool add_arg) { // Must predeclare these because we do use 'goto done' to // exit from error situations. vector components; string name; int rc = 0; // Canonicalize the given path and remove the leading /. string rpath; char *cpath = canonicalize_file_name (path.c_str ()); if (! cpath) { // It can not be canonicalized. Use the name relative to // the current working directory and let the server deal with it. char cwd[PATH_MAX]; if (getcwd (cwd, sizeof (cwd)) == NULL) { rpath = path; rc = 1; goto done; } rpath = string (cwd) + "/" + path; } else { // It can be canonicalized. Use the canonicalized name and add this // file or directory to the request package. rpath = cpath; free (cpath); // Including / would require special handling in the code below and // is a bad idea anyway. Let's not allow it. if (rpath == "/") { if (rpath != path) clog << _F("%s resolves to %s\n", path.c_str (), rpath.c_str ()); clog << _F("Unable to send %s to the server\n", path.c_str ()); return 1; } // First create the requested subdirectory (if there is one). if (! subdir.empty()) { name = client_tmpdir + "/" + subdir; rc = create_dir (name.c_str ()); if (rc) goto done; } else { name = client_tmpdir; } // Now create each component of the path within the sub directory. assert (rpath[0] == '/'); tokenize (rpath.substr (1), components, "/"); assert (components.size () >= 1); unsigned i; for (i = 0; i < components.size() - 1; ++i) { if (components[i].empty ()) continue; // embedded '//' name += "/" + components[i]; rc = create_dir (name.c_str ()); if (rc) goto done; } // Now make a symbolic link to the actual file or directory. assert (i == components.size () - 1); name += "/" + components[i]; rc = symlink (rpath.c_str (), name.c_str ()); if (rc) goto done; } // If the caller asks us, add this file or directory to the arguments. if (add_arg) rc = add_cmd_arg (subdir + "/" + rpath.substr (1)); done: if (rc != 0) { const char* e = strerror (errno); clog << "ERROR: unable to add " << rpath << " to temp directory as " << name << ": " << e << endl; } else { files_seen = true; } return rc; } int http_client_backend::package_request () { int rc = 0; http->add_module ("kernel-" + s.kernel_release); http->get_kernel_buildid (); for (set::const_iterator i = s.unwindsym_modules.begin(); i != s.unwindsym_modules.end(); ++i) { string module = (*i); if (module != "kernel") { string rpmname = http->get_rpmname (module); if (! rpmname.empty()) { http->get_buildid (module); http->add_module (rpmname); } else if (module[0] == '/') { include_file_or_directory ("files", module, false); } } } // Package up the temporary directory into a zip file, if needed. if (files_seen) { string client_zipfile = client_tmpdir + ".zip"; string cmd = "cd " + cmdstr_quoted(client_tmpdir) + " && zip -qr " + cmdstr_quoted(client_zipfile) + " *"; vector sh_cmd { "sh", "-c", cmd }; rc = stap_system (s.verbose, sh_cmd); if (rc == 0) http->add_file(client_zipfile); } return rc; } int http_client_backend::find_and_connect_to_server () { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); if (s.verbose >= 2) clog << "connecting to server using cert db " + cert_db << endl; vector specified_servers; nss_get_specified_server_info (s, specified_servers); if (! pr_contains (s.privilege, pr_stapdev)) if (! http->check_trust (http->signer_trust, specified_servers)) return 1; if (! http->check_trust (http->ssl_trust, specified_servers)) return 1; for (vector::iterator i = specified_servers.begin (); i != specified_servers.end (); ++i) { // Try to connect to the server. We'll try to grab the base // directory of the server just to see if we can make a // connection. __label__ TRY_NEXT_SERVER; string pem_cert; bool add_cert = false; string url = "https://" + i->host_specification(); http->host = i->unresolved_host_name; int download_tries; if (get_pem_cert(cert_db, nick, http->host, pem_cert) == true) download_tries = 2; // 1st try cert db 2nd download cert from server else download_tries = 1; // download cert from server while (download_tries) { if (download_tries == 1) { pem_cert = ""; if (http->download_pem_cert (url, pem_cert) == false) goto TRY_NEXT_SERVER; else add_cert = true; } string pem_tmp = client_tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) goto TRY_NEXT_SERVER; // curl invocation for a download must be the same as the preceding post if (http->download (url + "/", http->json_type, true, false) == true) break; remove_file_or_dir (pem_tmp.c_str()); download_tries -= 1; } // FIXME: The server returns its version number. We might // need to check it for compatibility. // Send our build request. if (http->post (url + "/builds", request_parameters)) { s.winning_server = url; http->host = url; if (add_cert) http->add_server_cert_to_client (client_tmpdir, db_nssinitcontext); return 0; } TRY_NEXT_SERVER:; } return 1; } int http_client_backend::unpack_response () { std::string build_uri; std::map::iterator it_loc; it_loc = http->header_values.find("Location"); if (it_loc == http->header_values.end()) { clog << "Cannot get location from server" << endl; return 1; } build_uri = http->host + http->header_values["Location"]; if (s.verbose >= 2) clog << "Initial response code: " << http->get_response_code() << endl; while (true) { auto it = http->header_values.find("Retry-After"); if (it == http->header_values.end()) { clog << "No retry-after?" << endl; break; } int retry = std::stoi(http->header_values["Retry-After"], nullptr, 10); if (s.verbose >= 2) clog << "Waiting " << retry << " seconds" << endl; sleep (retry); if (http->download (http->host + http->header_values["Location"], http->json_type, true, false)) { // We need to wait until we get a 303 (See Other) long response_code = http->get_response_code(); if (s.verbose >= 2) clog << "Response code: " << response_code << endl; if (response_code == 200) continue; else if (response_code == 303) break; else { clog << "Received a unhandled response code " << response_code << endl; return 1; } } } // If we're here, we got a '303' (See Other). Read the "other" // location, which should contain our results. if (! http->download (http->host + http->header_values["Location"], http->json_type, true, false)) { clog << "Couldn't read result information" << endl; return 1; } // Get the server version number. json_object *ver_obj; json_bool jfound = json_object_object_get_ex (http->root, "version", &ver_obj); if (jfound) { server_version = json_object_get_string(ver_obj); } else { clog << "Couldn't find 'version' in JSON results data" << endl; return 1; } // Get the return code information. json_object *rc_obj; jfound = json_object_object_get_ex (http->root, "rc", &rc_obj); if (jfound) { int rc = json_object_get_int(rc_obj); write_to_file(s.tmpdir + "/rc", rc); } else { clog << "Couldn't find 'rc' in JSON results data" << endl; return 1; } // Download each item in the optional 'files' array. This is // optional since not all stap invocations produce an output file // (like a module). json_object *files; json_object_object_get_ex (http->root, "files", &files); if (files) { for (size_t k = 0; k < (size_t)json_object_array_length (files); k++) { json_object *files_element = json_object_array_get_idx (files, k); json_object *loc; jfound = json_object_object_get_ex (files_element, "location", &loc); string location = json_object_get_string (loc); http->download (http->host + location, http->file_type, true, false); } } // Output stdout and stderr. json_object *loc_obj; jfound = json_object_object_get_ex (http->root, "stderr_location", &loc_obj); if (jfound) { string loc_str = json_object_get_string (loc_obj); http->download (http->host + loc_str, http->file_type, true, false); } else { clog << "Couldn't find 'stderr' in JSON results data" << endl; return 1; } jfound = json_object_object_get_ex (http->root, "stdout_location", &loc_obj); if (jfound) { string loc_str = json_object_get_string (loc_obj); http->download (http->host + loc_str, http->file_type, true, false); } else { clog << "Couldn't find 'stdout' in JSON results data" << endl; return 1; } delete http; return 0; } int http_client_backend::add_protocol_version (const std::string &version) { // Add the protocol version (so the server can ensure we're // compatible). request_parameters.push_back(make_tuple("version", version)); return 0; } int http_client_backend::add_sysinfo () { request_parameters.push_back(make_tuple("kver", s.kernel_release)); request_parameters.push_back(make_tuple("arch", s.architecture)); vector distro_info; get_distro_info (distro_info); if (! distro_info.empty()) { std::replace(distro_info[0].begin(), distro_info[0].end(), '\n', ' '); std::replace(distro_info[1].begin(), distro_info[1].end(), '\n', ' '); request_parameters.push_back(make_tuple("distro_name", distro_info[0])); request_parameters.push_back(make_tuple("distro_version", distro_info[1])); } return 0; } int http_client_backend::add_tmpdir_file (const std::string &) { files_seen = true; return 0; } int http_client_backend::add_cmd_arg (const std::string &arg) { request_parameters.push_back(make_tuple("cmd_args", arg)); return 0; } void http_client_backend::add_localization_variable (const std::string &name, const std::string &value) { http->env_vars.push_back(make_tuple(name, value)); return; } void http_client_backend::add_mok_fingerprint (const std::string &) { // FIXME: We'll probably just add to the request_parameters here. return; } void http_client_backend::fill_in_server_info (compile_server_info &info) { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); string host = info.unresolved_host_name; if (info.port == 0) // Sync with httpd/main.cxx info.port = 1234; string url = "https://" + host + ":" + std::to_string(info.port); string pem_cert; if (host.empty()) return; if (s.verbose >= 2) { char hostname[NI_MAXHOST]; memset (&hostname, '\0', NI_MAXHOST); PR_NetAddrToString(&info.address, hostname, NI_MAXHOST); clog << "getting server info for " + url + " " + hostname + " using cert db " + cert_db << endl; } // Try to get the server certificate and the base // directory of the server just to see if we can make a // connection. int download_tries; // Obtain server info based on network address instead of host name? if (file_exists (cert_db) == true && get_pem_cert(cert_db, nick, http->host, pem_cert) == true) download_tries = 2; // 1st try cert db 2nd download cert from server else download_tries = 1; // download cert from server while (download_tries) { if (download_tries == 1) { pem_cert = ""; if (http->download_pem_cert (url, pem_cert) == false) return; } string pem_tmp = s.tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) return; // curl invocation for a download must be the same as the preceding post if (http->download (url + "/", http->json_type, false, true) == true) break; remove_file_or_dir (pem_tmp.c_str()); download_tries -= 1; } json_object *ver_obj; json_bool jfound; // Get the server version number. jfound = json_object_object_get_ex (http->root, "version", &ver_obj); if (jfound) info.version = json_object_get_string(ver_obj); // Get the server arch. jfound = json_object_object_get_ex (http->root, "arch", &ver_obj); if (jfound) info.sysinfo = json_object_get_string(ver_obj); // Get the server certificate info. jfound = json_object_object_get_ex (http->root, "cert_info", &ver_obj); if (jfound) info.certinfo = json_object_get_string(ver_obj); // If the download worked, this server is obviously online. nss_add_online_server_info (s, info); } int http_client_backend::trust_server_info (const compile_server_info &info) { const string cert_db = local_client_cert_db_path (); const string nick = server_cert_nickname (); string pem_cert; string host = info.unresolved_host_name; string url = "https://" + host + ":" + std::to_string(info.port); if (s.verbose >= 2) clog << "getting server trust for " + url + " using cert db " + cert_db << endl; if (http->download_pem_cert (url, pem_cert) == false) return 1; string pem_tmp = s.tmpdir + "/pemXXXXXX"; int fd = mkstemp ((char*)pem_tmp.c_str()); close(fd); std::ofstream pem_out(pem_tmp); pem_out << pem_cert; pem_out.close(); http->pem_cert_file = pem_tmp; // Similar to CURLOPT_VERIFYHOST: compare source alternate names to hostname if (have_san_match (url, pem_cert) == false) return 1; if (http->download (url + "/", http->json_type, false, true)) http->add_server_cert_to_client (s.tmpdir, db_no_nssinit); return 0; } #endif /* HAVE_HTTP_SUPPORT */ systemtap-4.6/client-http.h000066400000000000000000000034451414446751200160360ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CLIENT_HTTP_H #define CLIENT_HTTP_H #ifdef HAVE_HTTP_SUPPORT #include "session.h" #include "csclient.h" #include class http_client; class http_client_backend : public client_backend { public: http_client_backend (systemtap_session &s); ~http_client_backend (); friend class http_client; int initialize (); int package_request (); int find_and_connect_to_server (); int unpack_response (); int process_response (); int add_protocol_version (const std::string &version); int add_sysinfo (); int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true); int add_tmpdir_file (const std::string &file); int add_cmd_arg (const std::string &arg); void add_localization_variable(const std::string &var, const std::string &value); int finalize_localization_variables() { return 0; }; void add_mok_fingerprint(const std::string &fingerprint); int finalize_mok_fingerprints() { return 0; }; void fill_in_server_info (compile_server_info &info); int trust_server_info (const compile_server_info &info); // FIXME: The 'request_parameters' data item isn't right. This means // we can only add string parameters, not numeric parameters. We // could have 'request_string_parameters' and // 'request_numeric_parameters' - but then we get the ordering // wrong. std::vector> request_parameters; private: bool files_seen; }; #endif // HAVE_HTTP_SUPPORT #endif // CLIENT_HTTP_H systemtap-4.6/client-nss.cxx000066400000000000000000000731451414446751200162410ustar00rootroot00000000000000/* Compile server client functions Copyright (C) 2010-2018 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ // Completely disable the client if NSS is not available. #include "config.h" #if HAVE_NSS #include "session.h" #include "cscommon.h" #include "csclient.h" #include "client-nss.h" #include "util.h" #include "stap-probe.h" #include #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #include } #if HAVE_AVAHI extern "C" { #include #include #include #include #include #include } #endif // HAVE_AVAHI extern "C" { #include #include #include #include #include #include #include #include } #include "nsscommon.h" using namespace std; #define STAP_CSC_01 _("WARNING: The domain name, %s, does not match the DNS name(s) on the server certificate:\n") #define STAP_CSC_02 _("could not find input file %s\n") #define STAP_CSC_03 _("could not open input file %s\n") #define STAP_CSC_04 _("Unable to open output file %s\n") #define STAP_CSC_05 _("could not write to %s\n") extern "C" void nsscommon_error (const char *msg, int logit __attribute ((unused))) { clog << msg << endl << flush; } static void preferred_order (vector &servers) { // Sort the given list of servers into the preferred order for contacting. // Don't bother if there are less than 2 servers in the list. if (servers.size () < 2) return; // Sort the list using compile_server_info::operator< sort (servers.begin (), servers.end ()); } /* Connection state. */ typedef struct connectionState_t { const char *hostName; PRNetAddr addr; const char *infileName; const char *outfileName; const char *trustNewServerMode; } connectionState_t; /* Called when the server certificate verification fails. This gives us the chance to trust the server anyway and add the certificate to the local database. */ static SECStatus badCertHandler(void *arg, PRFileDesc *sslSocket) { SECStatus secStatus; PRErrorCode errorNumber; CERTCertificate *serverCert = NULL; SECItem subAltName; PRArenaPool *tmpArena = NULL; CERTGeneralName *nameList, *current; char *expected = NULL; const connectionState_t *connectionState = (connectionState_t *)arg; errorNumber = PR_GetError (); switch (errorNumber) { case SSL_ERROR_BAD_CERT_DOMAIN: /* Since we administer our own client-side databases of trustworthy certificates, we don't need the domain name(s) on the certificate to match. If the cert is in our database, then we can trust it. If we know the expected domain name, then issue a warning but, in any case, accept the certificate. */ secStatus = SECSuccess; expected = SSL_RevealURL (sslSocket); if (expected == NULL || *expected == '\0') break; fprintf (stderr, STAP_CSC_01, expected); /* List the DNS names from the server cert as part of the warning. First, find the alt-name extension on the certificate. */ subAltName.data = NULL; serverCert = SSL_PeerCertificate (sslSocket); secStatus = CERT_FindCertExtension (serverCert, SEC_OID_X509_SUBJECT_ALT_NAME, & subAltName); if (secStatus != SECSuccess || ! subAltName.data) { fprintf (stderr, _("Unable to find alt name extension on the server certificate\n")); secStatus = SECSuccess; /* Not a fatal error */ break; } // Now, decode the extension. tmpArena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (! tmpArena) { fprintf (stderr, _("Out of memory\n")); SECITEM_FreeItem(& subAltName, PR_FALSE); secStatus = SECSuccess; /* Not a fatal error here */ break; } nameList = CERT_DecodeAltNameExtension (tmpArena, & subAltName); SECITEM_FreeItem(& subAltName, PR_FALSE); if (! nameList) { fprintf (stderr, _("Unable to decode alt name extension on server certificate\n")); secStatus = SECSuccess; /* Not a fatal error */ break; } /* List the DNS names from the server cert as part of the warning. The names are in a circular list. */ current = nameList; do { /* Make sure this is a DNS name. */ if (current->type == certDNSName) { fprintf (stderr, " %.*s\n", (int)current->name.other.len, current->name.other.data); } current = CERT_GetNextGeneralName (current); } while (current != nameList); break; case SEC_ERROR_CA_CERT_INVALID: /* The server's certificate is not trusted. Should we trust it? */ secStatus = SECFailure; /* Do not trust by default. */ if (! connectionState->trustNewServerMode) break; /* Trust it for this session only? */ if (strcmp (connectionState->trustNewServerMode, "session") == 0) { secStatus = SECSuccess; break; } /* Trust it permanently? */ if (strcmp (connectionState->trustNewServerMode, "permanent") == 0) { /* The user wants to trust this server. Get the server's certificate so and add it to our database. */ serverCert = SSL_PeerCertificate (sslSocket); if (serverCert != NULL) { secStatus = nss_trustNewServer (serverCert); } } break; default: secStatus = SECFailure; /* Do not trust this server */ break; } if (expected) PORT_Free (expected); if (tmpArena) PORT_FreeArena (tmpArena, PR_FALSE); if (serverCert != NULL) { CERT_DestroyCertificate (serverCert); } return secStatus; } static PRFileDesc * setupSSLSocket (connectionState_t *connectionState) { PRFileDesc *tcpSocket; PRFileDesc *sslSocket; PRSocketOptionData socketOption; PRStatus prStatus; SECStatus secStatus; tcpSocket = PR_OpenTCPSocket(connectionState->addr.raw.family); if (tcpSocket == NULL) goto loser; /* Make the socket blocking. */ socketOption.option = PR_SockOpt_Nonblocking; socketOption.value.non_blocking = PR_FALSE; prStatus = PR_SetSocketOption(tcpSocket, &socketOption); if (prStatus != PR_SUCCESS) goto loser; /* Import the socket into the SSL layer. */ sslSocket = SSL_ImportFD(NULL, tcpSocket); if (!sslSocket) goto loser; /* Set configuration options. */ secStatus = SSL_OptionSet(sslSocket, SSL_SECURITY, PR_TRUE); if (secStatus != SECSuccess) goto loser; secStatus = SSL_OptionSet(sslSocket, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE); if (secStatus != SECSuccess) goto loser; /* Set SSL callback routines. */ #if 0 /* no client authentication */ secStatus = SSL_GetClientAuthDataHook(sslSocket, (SSLGetClientAuthData)myGetClientAuthData, (void *)certNickname); if (secStatus != SECSuccess) goto loser; #endif #if 0 /* Use the default */ secStatus = SSL_AuthCertificateHook(sslSocket, (SSLAuthCertificate)myAuthCertificate, (void *)CERT_GetDefaultCertDB()); if (secStatus != SECSuccess) goto loser; #endif secStatus = SSL_BadCertHook(sslSocket, (SSLBadCertHandler)badCertHandler, connectionState); if (secStatus != SECSuccess) goto loser; #if 0 /* No handshake callback */ secStatus = SSL_HandshakeCallback(sslSocket, myHandshakeCallback, NULL); if (secStatus != SECSuccess) goto loser; #endif return sslSocket; loser: if (tcpSocket) PR_Close(tcpSocket); return NULL; } static SECStatus handle_connection (PRFileDesc *sslSocket, connectionState_t *connectionState) { PRInt32 numBytes; char *readBuffer; PRFileInfo info; PRFileDesc *local_file_fd; PRStatus prStatus; SECStatus secStatus = SECSuccess; #define READ_BUFFER_SIZE (60 * 1024) /* If we don't have both the input and output file names, then we're contacting this server only in order to establish trust. In this case send 0 as the file size and exit. */ if (! connectionState->infileName || ! connectionState->outfileName) { numBytes = htonl ((PRInt32)0); numBytes = PR_Write (sslSocket, & numBytes, sizeof (numBytes)); if (numBytes < 0) return SECFailure; return SECSuccess; } /* read and send the data. */ /* Try to open the local file named. * If successful, then write it to the server */ prStatus = PR_GetFileInfo(connectionState->infileName, &info); if (prStatus != PR_SUCCESS || info.type != PR_FILE_FILE || info.size < 0) { fprintf (stderr, STAP_CSC_02, connectionState->infileName); return SECFailure; } local_file_fd = PR_Open(connectionState->infileName, PR_RDONLY, 0); if (local_file_fd == NULL) { fprintf (stderr, STAP_CSC_03, connectionState->infileName); return SECFailure; } /* Send the file size first, so the server knows when it has the entire file. */ numBytes = htonl ((PRInt32)info.size); numBytes = PR_Write(sslSocket, & numBytes, sizeof (numBytes)); if (numBytes < 0) { PR_Close(local_file_fd); return SECFailure; } /* Transmit the local file across the socket. */ numBytes = PR_TransmitFile(sslSocket, local_file_fd, NULL, 0, PR_TRANSMITFILE_KEEP_OPEN, PR_INTERVAL_NO_TIMEOUT); if (numBytes < 0) { PR_Close(local_file_fd); return SECFailure; } PR_Close(local_file_fd); /* read until EOF */ readBuffer = (char *)PORT_Alloc(READ_BUFFER_SIZE); if (! readBuffer) { fprintf (stderr, _("Out of memory\n")); return SECFailure; } local_file_fd = PR_Open(connectionState->outfileName, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, PR_IRUSR | PR_IWUSR | PR_IRGRP | PR_IWGRP | PR_IROTH); if (local_file_fd == NULL) { fprintf (stderr, STAP_CSC_04, connectionState->outfileName); return SECFailure; } while (PR_TRUE) { // No need for PR_Read_Complete here, since we're already managing multiple // reads to a fixed size buffer. numBytes = PR_Read (sslSocket, readBuffer, READ_BUFFER_SIZE); if (numBytes == 0) break; /* EOF */ if (numBytes < 0) { secStatus = SECFailure; break; } /* Write to output file */ numBytes = PR_Write(local_file_fd, readBuffer, numBytes); if (numBytes < 0) { fprintf (stderr, STAP_CSC_05, connectionState->outfileName); secStatus = SECFailure; break; } } PR_Free(readBuffer); PR_Close(local_file_fd); /* Caller closes the socket. */ return secStatus; } /* make the connection. */ static SECStatus do_connect (connectionState_t *connectionState) { PRFileDesc *sslSocket; PRStatus prStatus; SECStatus secStatus; secStatus = SECSuccess; /* Set up SSL secure socket. */ sslSocket = setupSSLSocket (connectionState); if (sslSocket == NULL) return SECFailure; #if 0 /* no client authentication */ secStatus = SSL_SetPKCS11PinArg(sslSocket, password); if (secStatus != SECSuccess) goto done; #endif secStatus = SSL_SetURL(sslSocket, connectionState->hostName); if (secStatus != SECSuccess) goto done; prStatus = PR_Connect(sslSocket, & connectionState->addr, PR_INTERVAL_NO_TIMEOUT); if (prStatus != PR_SUCCESS) { secStatus = SECFailure; goto done; } /* Established SSL connection, ready to send data. */ secStatus = SSL_ResetHandshake(sslSocket, /* asServer */ PR_FALSE); if (secStatus != SECSuccess) goto done; /* This is normally done automatically on the first I/O operation, but doing it here catches any authentication problems early. */ secStatus = SSL_ForceHandshake(sslSocket); if (secStatus != SECSuccess) goto done; // Connect to the server and make the request. secStatus = handle_connection(sslSocket, connectionState); done: prStatus = PR_Close(sslSocket); return secStatus; } static bool isIPv6LinkLocal (const PRNetAddr &address) { // Link-local addresses are members of the address block fe80:: if (address.raw.family == PR_AF_INET6 && address.ipv6.ip.pr_s6_addr[0] == 0xfe && address.ipv6.ip.pr_s6_addr[1] == 0x80) return true; return false; } static int client_connect (const compile_server_info &server, const char* infileName, const char* outfileName, const char* trustNewServer) { SECStatus secStatus; PRErrorCode errorNumber; int attempt; int errCode = NSS_GENERAL_ERROR; struct connectionState_t connectionState; // Set up a connection state for use by NSS error callbacks. memset (& connectionState, 0, sizeof (connectionState)); connectionState.hostName = server.host_name.c_str (); connectionState.addr = server.address; connectionState.infileName = infileName; connectionState.outfileName = outfileName; connectionState.trustNewServerMode = trustNewServer; /* Some errors (see below) represent a situation in which trying again should succeed. However, don't try forever. */ for (attempt = 0; attempt < 5; ++attempt) { secStatus = do_connect (& connectionState); if (secStatus == SECSuccess) return NSS_SUCCESS; errorNumber = PR_GetError (); switch (errorNumber) { case PR_CONNECT_RESET_ERROR: /* Server was not ready. */ sleep (1); break; /* Try again */ case SEC_ERROR_EXPIRED_CERTIFICATE: /* The server's certificate has expired. It should generate a new certificate. Return now and we'll try again. */ errCode = NSS_SERVER_CERT_EXPIRED_ERROR; return errCode; case SEC_ERROR_CA_CERT_INVALID: /* The server's certificate is not trusted. The exit code must reflect this. */ errCode = NSS_CA_CERT_INVALID_ERROR; return errCode; default: /* This error is fatal. */ return errCode; } } return errCode; } nss_client_backend::nss_client_backend (systemtap_session &s) : client_backend(s), argc(0) { server_tmpdir = s.tmpdir + "/server"; } int nss_client_backend::initialize () { // Initialize session state argc = 0; locale_vars.clear(); mok_fingerprints.clear(); // Private location for server certificates. private_ssl_dbs.push_back (local_client_cert_db_path ()); // Additional public location. public_ssl_dbs.push_back (global_client_cert_db_path ()); return 0; } int nss_client_backend::add_protocol_version (const string &version) { // Add the current protocol version. return write_to_file (client_tmpdir + "/version", version); } int nss_client_backend::add_sysinfo () { string sysinfo = "sysinfo: " + s.kernel_release + " " + s.architecture; return write_to_file (client_tmpdir + "/sysinfo", sysinfo); } // Symbolically link the given file or directory into the client's temp // directory under the given subdirectory. int nss_client_backend::include_file_or_directory (const string &subdir, const string &path, const bool add_arg) { // Must predeclare these because we do use 'goto done' to // exit from error situations. vector components; string name; int rc = 0; // Canonicalize the given path and remove the leading /. string rpath; char *cpath = canonicalize_file_name (path.c_str ()); if (! cpath) { // It can not be canonicalized. Use the name relative to // the current working directory and let the server deal with it. char cwd[PATH_MAX]; if (getcwd (cwd, sizeof (cwd)) == NULL) { rpath = path; rc = 1; goto done; } rpath = string (cwd) + "/" + path; } else { // It can be canonicalized. Use the canonicalized name and add this // file or directory to the request package. rpath = cpath; free (cpath); // Including / would require special handling in the code below and // is a bad idea anyway. Let's not allow it. if (rpath == "/") { if (rpath != path) clog << _F("%s resolves to %s\n", path.c_str (), rpath.c_str ()); clog << _F("Unable to send %s to the server\n", path.c_str ()); return 1; } // First create the requested subdirectory (if there is one). if (! subdir.empty()) { name = client_tmpdir + "/" + subdir; rc = create_dir (name.c_str ()); if (rc) goto done; } else { name = client_tmpdir; } // Now create each component of the path within the sub directory. assert (rpath[0] == '/'); tokenize (rpath.substr (1), components, "/"); assert (components.size () >= 1); unsigned i; for (i = 0; i < components.size() - 1; ++i) { if (components[i].empty ()) continue; // embedded '//' name += "/" + components[i]; rc = create_dir (name.c_str ()); if (rc) goto done; } // Now make a symbolic link to the actual file or directory. assert (i == components.size () - 1); name += "/" + components[i]; rc = symlink (rpath.c_str (), name.c_str ()); if (rc) goto done; } // If the caller asks us, add this file or directory to the arguments. if (add_arg) rc = add_cmd_arg (subdir + "/" + rpath.substr (1)); done: if (rc != 0) { const char* e = strerror (errno); clog << "ERROR: unable to add " << rpath << " to temp directory as " << name << ": " << e << endl; } return rc; } int nss_client_backend::add_cmd_arg (const string &cmd_arg) { int rc = 0; ostringstream fname; fname << client_tmpdir << "/argv" << ++argc; write_to_file (fname.str (), cmd_arg); // NB: No terminating newline return rc; } void nss_client_backend::add_localization_variable (const std::string &var, const std::string &value) { locale_vars += var + "=" + value + "\n"; } int nss_client_backend::finalize_localization_variables () { string fname = client_tmpdir + "/locale"; return write_to_file(fname, locale_vars); } void nss_client_backend::add_mok_fingerprint (const std::string &fingerprint) { mok_fingerprints << fingerprint << endl; } int nss_client_backend::finalize_mok_fingerprints () { string fname = client_tmpdir + "/mok_fingerprints"; return write_to_file(fname, mok_fingerprints.str()); } // Package the client's temp directory into a form suitable for sending to the // server. int nss_client_backend::package_request () { // Package up the temporary directory into a zip file. client_zipfile = client_tmpdir + ".zip"; string cmd = "cd " + cmdstr_quoted(client_tmpdir) + " && zip -qr " + cmdstr_quoted(client_zipfile) + " *"; vector sh_cmd { "sh", "-c", cmd }; int rc = stap_system (s.verbose, sh_cmd); return rc; } int nss_client_backend::find_and_connect_to_server () { // Accumulate info on the specified servers. vector specified_servers; nss_get_specified_server_info (s, specified_servers); // Examine the specified servers to make sure that each has been resolved // with a host name, ip address and port. If not, try to obtain this // information by examining online servers. vector server_list; for (vector::const_iterator i = specified_servers.begin (); i != specified_servers.end (); ++i) { // If we have an ip address and were given a port number, then just use the one we've // been given. Otherwise, check for matching compatible online servers and try their // ip addresses and ports. if (i->hasAddress() && i->fully_specified) nss_add_server_info (*i, server_list); else { // Obtain a list of online servers. vector online_servers; nss_get_or_keep_online_server_info (s, online_servers, false/*keep*/); // If no specific server (port) has been specified, // then we'll need the servers to be // compatible and possibly trusted as signers as well. if (! i->fully_specified) { nss_get_or_keep_compatible_server_info (s, online_servers, true/*keep*/); if (! pr_contains (s.privilege, pr_stapdev)) nss_get_or_keep_signing_server_info (s, online_servers, true/*keep*/); } // Keep the ones (if any) which match our server. nss_keep_common_server_info (*i, online_servers); // Add these servers (if any) to the server list. nss_add_server_info (online_servers, server_list); } } // Did we identify any potential servers? unsigned limit = server_list.size (); if (limit == 0) { clog << _("Unable to find a suitable compile server. [man stap-server]") << endl; // Try to explain why. vector online_servers; nss_get_or_keep_online_server_info (s, online_servers, false/*keep*/); if (online_servers.empty ()) clog << _("No servers online to select from.") << endl; else { clog << _("The following servers are online:") << endl; clog << online_servers; if (! specified_servers.empty ()) { clog << _("The following servers were requested:") << endl; clog << specified_servers; } else { string criteria = "online,trusted,compatible"; if (! pr_contains (s.privilege, pr_stapdev)) criteria += ",signer"; clog << _F("No servers matched the selection criteria of %s.", criteria.c_str()) << endl; // PR26665, mention case of local mok key but no matching server if (s.modules_must_be_signed() && s.mok_fingerprints.size() > 0) { clog << _("Consider removing the local MOK to associate with a new server") << endl; clog << _("# sudo mokutil --list-enrolled") << endl; clog << _("# sudo mokutil --export / --delete OR --reset") << endl; } } } return 1; } // Sort the list of servers into a preferred order. preferred_order (server_list); // Now try each of the identified servers in turn. int rc = compile_using_server (server_list); if (rc == NSS_SUCCESS) return 0; // success! // If the error was that a server's cert was expired, try again. This is because the server // should generate a new cert which may be automatically trusted by us if it is our server. // Give the server a chance to do this before retrying. if (rc == NSS_SERVER_CERT_EXPIRED_ERROR) { if (s.verbose >= 2) clog << _("The server's certificate was expired. Trying again") << endl << flush; sleep (2); rc = compile_using_server (server_list); if (rc == NSS_SUCCESS) return 0; // success! } // We were unable to use any available server clog << _("Unable to connect to a server.") << endl; if (s.verbose == 1) { // This information is redundant at higher verbosity levels. clog << _("The following servers were tried:") << endl; clog << server_list; } return 1; // Failure } int nss_client_backend::compile_using_server ( vector &servers ) { NSSInitContext *context; // Make sure NSPR is initialized. Must be done before NSS is initialized s.NSPR_init (); // Attempt connection using each of the available client certificate // databases. Assume the server certificate is invalid until proven otherwise. PR_SetError (SEC_ERROR_CA_CERT_INVALID, 0); vector dbs = private_ssl_dbs; vector::iterator i = dbs.end(); dbs.insert (i, public_ssl_dbs.begin (), public_ssl_dbs.end ()); int rc = NSS_GENERAL_ERROR; // assume failure bool serverCertExpired = false; for (i = dbs.begin (); i != dbs.end (); ++i) { // Make sure the database directory exists. It is not an error if it // doesn't. if (! file_exists (*i)) continue; #if 0 // no client authentication for now. // Set our password function callback. PK11_SetPasswordFunc (myPasswd); #endif // Initialize the NSS libraries. const char *cert_dir = i->c_str (); context = nssInitContext (cert_dir); if (context == NULL) { // Message already issued. continue; // try next database } // Enable all cipher suites. // SSL_ClearSessionCache is required for the new settings to take effect. /* Some NSS versions don't do this correctly in NSS_SetDomesticPolicy. */ do { const PRUint16 *cipher; for (cipher = SSL_GetImplementedCiphers(); *cipher != 0; ++cipher) SSL_CipherPolicySet(*cipher, SSL_ALLOWED); } while (0); SSL_ClearSessionCache (); server_zipfile = s.tmpdir + "/server.zip"; // Try each server in turn. for (vector::iterator j = servers.begin (); j != servers.end (); ++j) { // At a minimum we need an ip_address along with a port // number in order to contact the server. if (! j->hasAddress() || j->port == 0) continue; // Set the port within the address. j->setAddressPort (j->port); if (s.verbose >= 2) clog << _F("Attempting SSL connection with %s\n" " using certificates from the database in %s\n", lex_cast(*j).c_str(), cert_dir); rc = client_connect (*j, client_zipfile.c_str(), server_zipfile.c_str (), NULL/*trustNewServer_p*/); if (rc == NSS_SUCCESS) { s.winning_server = lex_cast(*j); break; // Success! } // Server cert has expired. Try other servers and/or databases, but take note because // server should generate a new certificate. If no other servers succeed, we'll try again // in case the new cert works. if (rc == NSS_SERVER_CERT_EXPIRED_ERROR) { serverCertExpired = true; continue; } if (s.verbose >= 2) { clog << _(" Unable to connect: "); nssError (); // Additional information: if the address is IPv6 and is link-local, then it must // have a scope_id. if (isIPv6LinkLocal (j->address) && j->address.ipv6.scope_id == 0) { clog << _(" The address is an IPv6 link-local address with no scope specifier.") << endl; } } } // SSL_ClearSessionCache is required before shutdown for client applications. SSL_ClearSessionCache (); nssCleanup (cert_dir, context); if (rc == SECSuccess) break; // Success! } // Indicate whether a server cert was expired, so we can try again, if desired. if (rc != NSS_SUCCESS) { if (serverCertExpired) rc = NSS_SERVER_CERT_EXPIRED_ERROR; } return rc; } int nss_client_backend::unpack_response () { // Unzip the response package. vector cmd { "unzip", "-qd", server_tmpdir, server_zipfile }; int rc = stap_system (s.verbose, cmd); if (rc != 0) { clog << _F("Unable to unzip the server response '%s'\n", server_zipfile.c_str()); return rc; } // Determine the server protocol version. string filename = server_tmpdir + "/version"; if (file_exists (filename)) read_from_file (filename, server_version); // Warn about the shortcomings of this server, if it is down level. show_server_compatibility (); // If the server's response contains a systemtap temp directory, move // its contents to our temp directory. glob_t globbuf; string filespec = server_tmpdir + "/stap??????"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); int r = glob(filespec.c_str (), 0, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { if (globbuf.gl_pathc > 1) { clog << _("Incorrect number of files in server response") << endl; rc = 1; goto done; } assert (globbuf.gl_pathc == 1); string dirname = globbuf.gl_pathv[0]; if (s.verbose >= 3) clog << _(" found ") << dirname << endl; filespec = dirname + "/*"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); globfree(&globbuf); int r = glob(filespec.c_str (), GLOB_PERIOD, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { unsigned prefix_len = dirname.size () + 1; for (unsigned i = 0; i < globbuf.gl_pathc; ++i) { string oldname = globbuf.gl_pathv[i]; if (oldname.substr (oldname.size () - 2) == "/." || oldname.substr (oldname.size () - 3) == "/..") continue; string newname = s.tmpdir + "/" + oldname.substr (prefix_len); if (s.verbose >= 3) clog << _F(" found %s -- linking from %s", oldname.c_str(), newname.c_str()); rc = symlink (oldname.c_str (), newname.c_str ()); if (rc != 0) { clog << _F("Unable to link '%s' to '%s':%s\n", oldname.c_str(), newname.c_str(), strerror(errno)); goto done; } } } } // If the server version is less that 1.6, remove the output line due to the synthetic // server-side -k. Look for a message containing the name of the temporary directory. // We can look for the English message since server versions before 1.6 do not support // localization. if (server_version < "1.6") { cmd = { "sed", "-i", "/^Keeping temporary directory.*/ d", server_tmpdir + "/stderr" }; stap_system (s.verbose, cmd); } // Remove the output line due to the synthetic server-side -p4 cmd = { "sed", "-i", "/^.*\\.ko$/ d", server_tmpdir + "/stdout" }; stap_system (s.verbose, cmd); done: globfree (& globbuf); return rc; } void nss_client_backend::show_server_compatibility () const { // Locale sensitivity was added in version 1.6 if (server_version < "1.6") { clog << _F("Server protocol version is %s\n", server_version.v); clog << _("The server does not use localization information passed by the client\n"); } } int nss_client_backend::trust_server_info (const compile_server_info &server) { return client_connect (server, NULL, NULL, "permanent"); } #endif // HAVE_NSS /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/client-nss.h000066400000000000000000000035401414446751200156560ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2017-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CLIENT_NSS_H #define CLIENT_NSS_H #if HAVE_NSS #include "session.h" #include "csclient.h" #include "cscommon.h" #include "nss-server-info.h" #include #include // Utility functions void nss_client_query_server_status (systemtap_session &s); void nss_client_manage_server_trust (systemtap_session &s); class nss_client_backend : public client_backend { public: nss_client_backend (systemtap_session &s); int initialize (); int add_protocol_version (const std::string &version); int add_sysinfo (); int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true); int add_tmpdir_file (const std::string &) { return 0; }; int add_cmd_arg (const std::string &arg); void add_localization_variable(const std::string &var, const std::string &value); int finalize_localization_variables(); void add_mok_fingerprint(const std::string &fingerprint); int finalize_mok_fingerprints(); void fill_in_server_info (compile_server_info &) { return; }; int trust_server_info (const compile_server_info &server); int package_request (); int find_and_connect_to_server (); int unpack_response (); private: unsigned argc; std::string client_zipfile; std::string server_zipfile; std::string locale_vars; std::ostringstream mok_fingerprints; std::vector private_ssl_dbs; std::vector public_ssl_dbs; int compile_using_server (std::vector &servers); void show_server_compatibility () const; }; #endif // HAVE_NSS #endif // CLIENT_NSS_H systemtap-4.6/cmdline.cxx000066400000000000000000000114451414446751200155700ustar00rootroot00000000000000// Shared data for parsing the stap command line // Copyright (C) 2014-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include #include "cmdline.h" // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! struct option stap_long_options[] = { { "skip-badvars", no_argument, NULL, LONG_OPT_SKIP_BADVARS }, { "vp", required_argument, NULL, LONG_OPT_VERBOSE_PASS }, { "unprivileged", no_argument, NULL, LONG_OPT_UNPRIVILEGED }, { "client-options", no_argument, NULL, LONG_OPT_CLIENT_OPTIONS }, { "help", no_argument, NULL, LONG_OPT_HELP }, { "disable-cache", no_argument, NULL, LONG_OPT_DISABLE_CACHE }, { "poison-cache", no_argument, NULL, LONG_OPT_POISON_CACHE }, { "clean-cache", no_argument, NULL, LONG_OPT_CLEAN_CACHE }, { "compatible", required_argument, NULL, LONG_OPT_COMPATIBLE }, { "ldd", no_argument, NULL, LONG_OPT_LDD }, { "use-server", optional_argument, NULL, LONG_OPT_USE_SERVER }, { "list-servers", optional_argument, NULL, LONG_OPT_LIST_SERVERS }, { "trust-servers", optional_argument, NULL, LONG_OPT_TRUST_SERVERS }, { "use-server-on-error", optional_argument, NULL, LONG_OPT_USE_SERVER_ON_ERROR }, { "use-http-server", required_argument, NULL, LONG_OPT_USE_HTTP_SERVER }, { "all-modules", no_argument, NULL, LONG_OPT_ALL_MODULES }, { "remote", required_argument, NULL, LONG_OPT_REMOTE }, { "remote-prefix", no_argument, NULL, LONG_OPT_REMOTE_PREFIX }, { "check-version", no_argument, NULL, LONG_OPT_CHECK_VERSION }, { "version", no_argument, NULL, LONG_OPT_VERSION }, { "tmpdir", required_argument, NULL, LONG_OPT_TMPDIR }, { "download-debuginfo", optional_argument, NULL, LONG_OPT_DOWNLOAD_DEBUGINFO }, { "dump-probe-types", no_argument, NULL, LONG_OPT_DUMP_PROBE_TYPES }, { "dump-probe-aliases", no_argument, NULL, LONG_OPT_DUMP_PROBE_ALIASES }, { "dump-functions", no_argument, NULL, LONG_OPT_DUMP_FUNCTIONS }, { "privilege", required_argument, NULL, LONG_OPT_PRIVILEGE }, { "suppress-handler-errors", no_argument, NULL, LONG_OPT_SUPPRESS_HANDLER_ERRORS }, { "modinfo", required_argument, NULL, LONG_OPT_MODINFO }, { "rlimit-as", required_argument, NULL, LONG_OPT_RLIMIT_AS }, { "rlimit-cpu", required_argument, NULL, LONG_OPT_RLIMIT_CPU }, { "rlimit-nproc", required_argument, NULL, LONG_OPT_RLIMIT_NPROC }, { "rlimit-stack", required_argument, NULL, LONG_OPT_RLIMIT_STACK }, { "rlimit-fsize", required_argument, NULL, LONG_OPT_RLIMIT_FSIZE }, { "sysroot", required_argument, NULL, LONG_OPT_SYSROOT }, { "sysenv", required_argument, NULL, LONG_OPT_SYSENV }, { "suppress-time-limits", no_argument, NULL, LONG_OPT_SUPPRESS_TIME_LIMITS }, { "runtime", required_argument, NULL, LONG_OPT_RUNTIME }, { "dyninst", no_argument, NULL, LONG_OPT_RUNTIME_DYNINST }, { "bpf", no_argument, NULL, LONG_OPT_RUNTIME_BPF }, { "benchmark-sdt", no_argument, NULL, LONG_OPT_BENCHMARK_SDT }, { "benchmark-sdt-loops", required_argument, NULL, LONG_OPT_BENCHMARK_SDT_LOOPS }, { "benchmark-sdt-threads", required_argument, NULL, LONG_OPT_BENCHMARK_SDT_THREADS }, { "color", optional_argument, NULL, LONG_OPT_COLOR_ERRS }, { "colour", optional_argument, NULL, LONG_OPT_COLOR_ERRS }, { "prologue-searching", optional_argument, NULL, LONG_OPT_PROLOGUE_SEARCHING }, { "save-uprobes", no_argument, NULL, LONG_OPT_SAVE_UPROBES }, { "target-namespaces", required_argument, NULL, LONG_OPT_TARGET_NAMESPACES }, { "monitor", optional_argument, NULL, LONG_OPT_MONITOR }, { "interactive", no_argument, NULL, LONG_OPT_INTERACTIVE}, { "example", no_argument, NULL, LONG_OPT_RUN_EXAMPLE}, { "no-global-var-display", no_argument, NULL, LONG_OPT_NO_GLOBAL_VAR_DISPLAY}, { NULL, 0, NULL, 0 } }; systemtap-4.6/cmdline.h000066400000000000000000000042541414446751200152150ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2014-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CMDLINE_H #define CMDLINE_H 1 extern "C" { #include } // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! // NB: The values of these enumerators must not conflict with the values of ordinary // characters, since those are returned by getopt_long for short options. enum { LONG_OPT_VERBOSE_PASS = 256, LONG_OPT_SKIP_BADVARS, LONG_OPT_UNPRIVILEGED, LONG_OPT_CLIENT_OPTIONS, LONG_OPT_HELP, LONG_OPT_DISABLE_CACHE, LONG_OPT_POISON_CACHE, LONG_OPT_CLEAN_CACHE, LONG_OPT_COMPATIBLE, LONG_OPT_LDD, LONG_OPT_USE_SERVER, LONG_OPT_LIST_SERVERS, LONG_OPT_TRUST_SERVERS, LONG_OPT_USE_HTTP_SERVER, LONG_OPT_ALL_MODULES, LONG_OPT_REMOTE, LONG_OPT_CHECK_VERSION, LONG_OPT_USE_SERVER_ON_ERROR, LONG_OPT_VERSION, LONG_OPT_REMOTE_PREFIX, LONG_OPT_TMPDIR, LONG_OPT_DOWNLOAD_DEBUGINFO, LONG_OPT_DUMP_PROBE_TYPES, LONG_OPT_DUMP_PROBE_ALIASES, LONG_OPT_DUMP_FUNCTIONS, LONG_OPT_PRIVILEGE, LONG_OPT_SUPPRESS_HANDLER_ERRORS, LONG_OPT_MODINFO, LONG_OPT_RLIMIT_AS, LONG_OPT_RLIMIT_CPU, LONG_OPT_RLIMIT_NPROC, LONG_OPT_RLIMIT_STACK, LONG_OPT_RLIMIT_FSIZE, LONG_OPT_SYSROOT, LONG_OPT_SYSENV, LONG_OPT_SUPPRESS_TIME_LIMITS, LONG_OPT_RUNTIME, LONG_OPT_RUNTIME_DYNINST, LONG_OPT_RUNTIME_BPF, LONG_OPT_BENCHMARK_SDT, LONG_OPT_BENCHMARK_SDT_LOOPS, LONG_OPT_BENCHMARK_SDT_THREADS, LONG_OPT_COLOR_ERRS, LONG_OPT_PROLOGUE_SEARCHING, LONG_OPT_SAVE_UPROBES, LONG_OPT_TARGET_NAMESPACES, LONG_OPT_MONITOR, LONG_OPT_INTERACTIVE, LONG_OPT_RUN_EXAMPLE, LONG_OPT_NO_GLOBAL_VAR_DISPLAY, }; // NB: when adding new options, consider very carefully whether they // should be restricted from stap clients (after --client-options)! #define STAP_SHORT_OPTIONS "hVvtp:I:e:E:o:R:r:a:m:kgPc:x:D:bs:uqiwl:d:L:FS:B:J:jWG:T:" extern struct option stap_long_options[]; #endif // CMDLINE_H systemtap-4.6/compile000077500000000000000000000162451414446751200150120ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemtap-4.6/config.guess000077500000000000000000001406141414446751200157520ustar00rootroot00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. timestamp='2021-05-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039 { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$driver" break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)) case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/SecBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-secbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; *:OS108:*:*) echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Twizzler:*:*) echo "$UNAME_MACHINE"-unknown-twizzler exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') ;; *5.*) UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "$( (/bin/universe) 2>/dev/null)" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case $(/usr/bin/uname -p) in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:*:*) case $(/usr/bin/arch -k) in Series*|S4*) UNAME_RELEASE=$(uname -v) ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case $(/bin/arch) in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && SYSTEM_NAME=$("$dummy" "$dummyarg") && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=$(/usr/bin/uname -p) if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=$(/usr/bin/oslevel) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=$(uname -p) set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi else echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf fi exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=$(/usr/bin/uname -p) case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case $UNAME_MACHINE in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:* | arc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI="$LIBC"x32 fi fi echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case $(/bin/uname -X | grep "^Machine") in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=$(sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=$( (uname -p) 2>/dev/null) echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; arm64:Darwin:*:*) echo aarch64-apple-darwin"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=$(uname -p) case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=$(uname -p) if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; *:*VMS:*:*) UNAME_MACHINE=$( (uname -p) 2>/dev/null) case $UNAME_MACHINE in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; *:AROS:*:*) echo "$UNAME_MACHINE"-unknown-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; *:Unleashed:*:*) echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" exit ;; esac # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown) uname -r = $( (uname -r) 2>/dev/null || echo unknown) uname -s = $( (uname -s) 2>/dev/null || echo unknown) uname -v = $( (uname -v) 2>/dev/null || echo unknown) /usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) /bin/uname -X = $( (/bin/uname -X) 2>/dev/null) hostinfo = $( (hostinfo) 2>/dev/null) /bin/universe = $( (/bin/universe) 2>/dev/null) /usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) /bin/arch = $( (/bin/arch) 2>/dev/null) /usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) /usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemtap-4.6/config.in000066400000000000000000000145511414446751200152270ustar00rootroot00000000000000/* config.in. Generated from configure.ac by autoheader. */ /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* make -P prologue-searching default */ #undef ENABLE_PROLOGUES /* Define to 1 to enable process.mark probes in stap, staprun, stapio. */ #undef ENABLE_SDT_PROBES /* Define to 1 if you have the avahi libraries. */ #undef HAVE_AVAHI /* Define to 1 if you have the header file. */ #undef HAVE_BOOST_UTILITY_STRING_REF_HPP /* Define to 1 if you have the header file. */ #undef HAVE_BPATCH_OBJECT_H /* Define to 1 if you have the necessary declarations in bpf.h */ #undef HAVE_BPF_DECLS /* Define to 1 if you have the necessary declarations in bpf.h */ #undef HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the header file. */ #undef HAVE_CRASH_DEFS_H /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `BPF_PROG_TYPE_PERF_EVENT', and to 0 if you don't. */ #undef HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT /* Define to 1 if you have the declaration of `BPF_PROG_TYPE_RAW_TRACEPOINT', and to 0 if you don't. */ #undef HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT /* Define to 1 if Dyninst is enabled */ #undef HAVE_DYNINST /* Define to 1 if F_SETPIPE_SZ is available. */ #undef HAVE_F_SETPIPE_SZ /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 to enable http web service support in systemtap. */ #undef HAVE_HTTP_SUPPORT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Flag indicating that libHelperSDT.so is available (can be found in PKGLIBDIR) */ #undef HAVE_JAVA /* Define to 1 if debuginfod is enabled. */ #undef HAVE_LIBDEBUGINFOD /* Define to 1 if you have the `dw' library (-ldw). */ #undef HAVE_LIBDW /* Define to 1 if you have the `elf' library (-lelf). */ #undef HAVE_LIBELF /* Define if you have the readline library (-lreadline). */ #undef HAVE_LIBREADLINE /* have librpm */ #undef HAVE_LIBRPM /* have librpmio */ #undef HAVE_LIBRPMIO /* Define to 1 if you have the 'sqlite3' library (-lsqlite3). */ #undef HAVE_LIBSQLITE3 /* Define to 1 if libvirt development libraries are installed */ #undef HAVE_LIBVIRT /* Define to 1 if libxml2 development libraries are installed */ #undef HAVE_LIBXML2 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if json-c and ncurses libraries are installed */ #undef HAVE_MONITOR_LIBS /* Define to 1 if you have the nss libraries. */ #undef HAVE_NSS /* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT /* Define to 1 if you have the openssl libraries. */ #undef HAVE_OPENSSL /* Define to 1 if you have the `ppoll' function. */ #undef HAVE_PPOLL /* Define to 1 to enable python version 2 probe support in systemtap. */ #undef HAVE_PYTHON2_PROBES /* Define to 1 to enable python version 3 probe support in systemtap. */ #undef HAVE_PYTHON3_PROBES /* Define to 1 if you have the header file. */ #undef HAVE_PYTHON_H /* Define to 1 if you have the SELinux libraries. */ #undef HAVE_SELINUX /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the base client code is needed. */ #undef NEED_BASE_CLIENT_CODE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Base name of the python3 interpreter binary. */ #undef PYTHON3_BASENAME /* The python3 interpreter binary exists. */ #undef PYTHON3_EXISTS /* Base name of the python2 interpreter binary. */ #undef PYTHON_BASENAME /* The python2 interpreter binary exists. */ #undef PYTHON_EXISTS /* extra stap version code */ #undef STAP_EXTRA_VERSION /* configure prefix location */ #undef STAP_PREFIX /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE systemtap-4.6/config.rpath000077500000000000000000000442161414446751200157430ustar00rootroot00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: systemtap-4.6/configure000077500000000000000000016137641414446751200153550ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for systemtap 4.6. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: systemtap@sourceware.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='systemtap' PACKAGE_TARNAME='systemtap' PACKAGE_VERSION='4.6' PACKAGE_STRING='systemtap 4.6' PACKAGE_BUGREPORT='systemtap@sourceware.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS subdirs pkglibexecdir STAP_PREFIX NEED_BASE_CLIENT_CODE_FALSE NEED_BASE_CLIENT_CODE_TRUE HAVE_HTTP_SUPPORT_FALSE HAVE_HTTP_SUPPORT_TRUE libcurl_LIBS libcurl_CFLAGS uuid_LIBS uuid_CFLAGS libmicrohttpd_LIBS libmicrohttpd_CFLAGS STAP_EXTRA_VERSION LOCALEDIR ENABLE_NLS HAVE_JAVA_FALSE HAVE_JAVA_TRUE JAVADIR have_jar have_javac HAVE_SELINUX_FALSE HAVE_SELINUX_TRUE selinux_LIBS selinux_CFLAGS HAVE_BPF_DECLS_FALSE HAVE_BPF_DECLS_TRUE support_section_question HAVE_MONITOR_LIBS_FALSE HAVE_MONITOR_LIBS_TRUE ncurses_LIBS ncurses_CFLAGS jsonc_LIBS jsonc_CFLAGS HAVE_PYTHON_PROBES_FALSE HAVE_PYTHON_PROBES_TRUE HAVE_PYTHON3_PROBES_FALSE HAVE_PYTHON3_PROBES_TRUE PYTHON3_CPPFLAGS PYTHON3_CONFIG HAVE_PYTHON2_PROBES_FALSE HAVE_PYTHON2_PROBES_TRUE PYTHON_CPPFLAGS PYTHON_CONFIG BUILD_VIRT_FALSE BUILD_VIRT_TRUE HAVE_LIBXML2_FALSE HAVE_LIBXML2_TRUE libxml2_LIBS libxml2_CFLAGS HAVE_LIBVIRT_FALSE HAVE_LIBVIRT_TRUE libvirt_LIBS libvirt_CFLAGS HAVE_DYNINST_FALSE HAVE_DYNINST_TRUE DYNINST_LIBS DYNINST_LDFLAGS DYNINST_CXXFLAGS BOOST_SYSTEM_LIB CXXCPP stapbpf_LIBS staprun_LIBS stap_LIBS preferred_python HAVE_LIBREADLINE_FALSE HAVE_LIBREADLINE_TRUE READLINE_LIBS HAVE_AVAHI_FALSE HAVE_AVAHI_TRUE avahi_LIBS avahi_CFLAGS BUILD_SERVER_FALSE BUILD_SERVER_TRUE dracutbindir dracutstap HAVE_OPENSSL_FALSE HAVE_OPENSSL_TRUE openssl_LIBS openssl_CFLAGS HAVE_NSS_FALSE HAVE_NSS_TRUE nss_LIBS nss_CFLAGS XMLTO_STRINGPARAM_FALSE XMLTO_STRINGPARAM_TRUE BUILD_HTMLDOCS_FALSE BUILD_HTMLDOCS_TRUE HAVE_XMLTO_FALSE HAVE_XMLTO_TRUE HAVE_FOP_FALSE HAVE_FOP_TRUE have_fop have_xmlto BUILD_REFDOCS_FALSE BUILD_REFDOCS_TRUE INSTALL_PREBUILT_DOCS_FALSE INSTALL_PREBUILT_DOCS_TRUE BUILD_DOCS_FALSE BUILD_DOCS_TRUE have_ps2pdf have_dvips have_latex BUILD_CRASHMOD_FALSE BUILD_CRASHMOD_TRUE staplog_CPPFLAGS BUILD_TRANSLATOR_FALSE BUILD_TRANSLATOR_TRUE sqlite3_LIBS sqlite3_CFLAGS debuginfod_LIBS debuginfod_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG PIECXXFLAGS PIECFLAGS PIELDFLAGS ALIGNEDNEW HAVE_CXX11 py3execdir python3dir PYTHON3_PLATFORM PYTHON3_EXEC_PREFIX PYTHON3_PREFIX PYTHON3_VERSION PYTHON3 pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_PLATFORM PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON PYTHON_UNKNOWN POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED RANLIB ac_ct_AR AR am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX LN_S EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_largefile enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_prologues enable_sdt_probes with_debuginfod enable_sqlite enable_translator enable_crash enable_docs enable_refdocs enable_htmldocs with_nss with_openssl with_dracutstap with_dracutbindir enable_server with_avahi with_rpm with_python3 with_dyninst enable_virt enable_libvirt with_python2_probes with_python3_probes enable_monitor with_bpf with_selinux with_java with_extra_version enable_http ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC PYTHON PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR debuginfod_CFLAGS debuginfod_LIBS sqlite3_CFLAGS sqlite3_LIBS nss_CFLAGS nss_LIBS openssl_CFLAGS openssl_LIBS avahi_CFLAGS avahi_LIBS CXXCPP libvirt_CFLAGS libvirt_LIBS libxml2_CFLAGS libxml2_LIBS jsonc_CFLAGS jsonc_LIBS ncurses_CFLAGS ncurses_LIBS selinux_CFLAGS selinux_LIBS libmicrohttpd_CFLAGS libmicrohttpd_LIBS uuid_CFLAGS uuid_LIBS libcurl_CFLAGS libcurl_LIBS' ac_subdirs_all='testsuite' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures systemtap 4.6 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/systemtap] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of systemtap 4.6:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-prologues make -P prologue-searching default --disable-sdt-probes disable process.mark probes in stap, staprun, stapio --enable-sqlite build with sqlite support --disable-translator build only runtime utilities --enable-crash[=DIRECTORY] enable crash extension (default is disabled). Optional DIRECTORY is the path to the crash header file (needed if installed in a non-standard location). --enable-docs enable building documentation (default to only installing prebuilt docs). --enable-refdocs enable building reference documentation (default on if other documentation built). --enable-htmldocs enable building html documentation (default off). --enable-server enable building of stap-server (default on if nss etc. found). --enable-virt enable building of stapvirt support (default on if libvirt etc. found). --disable-libvirt Do not use libvirt even if present --disable-monitor Disable monitor --enable-http Enable building http web compilation service, if possible Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-debuginfod Enable debuginfo lookups with debuginfod (auto/yes/no) --without-nss Do not use NSS even if present --without-openssl Do not use OPENSSL even if present --with-dracutstap=DIR Install dracut module files in DIR --with-dracutbindir=DIR Use the dracut binary located in DIR --without-avahi Do not use Avahi even if present --with-rpm query rpm database for missing debuginfos --with-python3 prefer python version 3 --with-dyninst=DIRECTORY find dyninst headers/libraries in DIRECTORY --without-python2-probes Disable building python version 2 probe support, even if it is available --without-python3-probes Disable building python version 3 probe support, even if it is available --without-bpf Do not try to build BPF components --without-selinux Do not use libselinux even if present --with-java=DIRECTORY Specify JDK directory to compile libHelperSDT.so against (default is /usr/lib/jvm/java) --with-extra-version=STRING Add STRING to stap -V version Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags PYTHON the Python interpreter PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path debuginfod_CFLAGS C compiler flags for debuginfod, overriding pkg-config debuginfod_LIBS linker flags for debuginfod, overriding pkg-config sqlite3_CFLAGS C compiler flags for sqlite3, overriding pkg-config sqlite3_LIBS linker flags for sqlite3, overriding pkg-config nss_CFLAGS C compiler flags for nss, overriding pkg-config nss_LIBS linker flags for nss, overriding pkg-config openssl_CFLAGS C compiler flags for openssl, overriding pkg-config openssl_LIBS linker flags for openssl, overriding pkg-config avahi_CFLAGS C compiler flags for avahi, overriding pkg-config avahi_LIBS linker flags for avahi, overriding pkg-config CXXCPP C++ preprocessor libvirt_CFLAGS C compiler flags for libvirt, overriding pkg-config libvirt_LIBS linker flags for libvirt, overriding pkg-config libxml2_CFLAGS C compiler flags for libxml2, overriding pkg-config libxml2_LIBS linker flags for libxml2, overriding pkg-config jsonc_CFLAGS C compiler flags for jsonc, overriding pkg-config jsonc_LIBS linker flags for jsonc, overriding pkg-config ncurses_CFLAGS C compiler flags for ncurses, overriding pkg-config ncurses_LIBS linker flags for ncurses, overriding pkg-config selinux_CFLAGS C compiler flags for selinux, overriding pkg-config selinux_LIBS linker flags for selinux, overriding pkg-config libmicrohttpd_CFLAGS C compiler flags for libmicrohttpd, overriding pkg-config libmicrohttpd_LIBS linker flags for libmicrohttpd, overriding pkg-config uuid_CFLAGS C compiler flags for uuid, overriding pkg-config uuid_LIBS linker flags for uuid, overriding pkg-config libcurl_CFLAGS C compiler flags for libcurl, overriding pkg-config libcurl_LIBS linker flags for libcurl, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF systemtap configure 4.6 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------- ## ## Report this to systemtap@sourceware.org ## ## --------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------------- ## ## Report this to systemtap@sourceware.org ## ## --------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by systemtap $as_me 4.6, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='systemtap' VERSION='4.6' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi for ac_func in ppoll do : ac_fn_c_check_func "$LINENO" "ppoll" "ac_cv_func_ppoll" if test "x$ac_cv_func_ppoll" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PPOLL 1 _ACEOF fi done for ac_func in openat do : ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat" if test "x$ac_cv_func_openat" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENAT 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # We want the 'PYTHON' varible to be python version 2. We also want # our custom 'PYTHON3' varible to be python version 3. # # Note that the python2/python3 code was inspired by code in the # 'abrt' configure: # # # First, figure out what version of python is in the executable named # 'python'. On most systems that is python version 2, but on arch # linux that is python version 3. # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON_UNKNOWN+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON_UNKNOWN in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_UNKNOWN="$PYTHON_UNKNOWN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON_UNKNOWN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PYTHON_UNKNOWN" && ac_cv_path_PYTHON_UNKNOWN="no" ;; esac fi PYTHON_UNKNOWN=$ac_cv_path_PYTHON_UNKNOWN if test -n "$PYTHON_UNKNOWN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_UNKNOWN" >&5 $as_echo "$PYTHON_UNKNOWN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PYTHON_UNKNOWN" != "xno"; then # OK, we found 'python'. What version is it? { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON_UNKNOWN is version 2 or 3" >&5 $as_echo_n "checking whether $PYTHON_UNKNOWN is version 2 or 3... " >&6; } if ${ac_cv_python_unknown_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python_unknown_version=`$PYTHON_UNKNOWN -c "import sys; sys.stdout.write(sys.version[:3][0])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python_unknown_version" >&5 $as_echo "$ac_cv_python_unknown_version" >&6; } fi # Now we'll update the _AM_PYTHON_INTERPRETER_LIST variable (which # AM_PATH_PYTHON uses) to only be version 2 versions of python. Note # that the m4_define happens when autoconf is run, but the # PLAIN_PYTHON_INTERPRETER variable expansion will happen when the # user runs configure. # # Note that for python2, we prefer an executable named 'python2' over # one just named 'python'. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x2"; then PLAIN_PYTHON_INTERPRETER=python else PLAIN_PYTHON_INTERPRETER=python2 fi # Now we can call AM_PATH_PYTHON to find python version 2.6+ (and # version 2 only). if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 2.6" >&5 $as_echo_n "checking whether $PYTHON version is >= 2.6... " >&6; } prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.6" >&5 $as_echo_n "checking for a Python interpreter with version >= 2.6... " >&6; } if ${am_cv_pathless_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else for am_cv_pathless_PYTHON in python2 $PLAIN_PYTHON_INTERPRETER python2.7 python2.6 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '2.6'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then : break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 $as_echo "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 $as_echo "$PYTHON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 $as_echo_n "checking for $am_display_PYTHON version... " >&6; } if ${am_cv_python_version+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 $as_echo "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version PYTHON_PREFIX='${prefix}' PYTHON_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 $as_echo_n "checking for $am_display_PYTHON platform... " >&6; } if ${am_cv_python_platform+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 $as_echo "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform # Just factor out some code duplication. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[:3] == '2.7': can_use_sysconfig = 0 except ImportError: pass" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 $as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } if ${am_cv_python_pythondir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$prefix" = xNONE then am_py_prefix=$ac_default_prefix else am_py_prefix=$prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 $as_echo "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 $as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } if ${am_cv_python_pyexecdir+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$exec_prefix" = xNONE then am_py_exec_prefix=$am_py_prefix else am_py_exec_prefix=$exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages ;; esac ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 $as_echo "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi python_basename=$(basename "$PYTHON") cat >>confdefs.h <<_ACEOF #define PYTHON_BASENAME "${python_basename}" _ACEOF if test "x$PYTHON" != "x:"; then $as_echo "#define PYTHON_EXISTS /**/" >>confdefs.h fi # AM_PATH_PYTHON defines 'pyexecdir'. Make sure the python and # pyexecdir variables get sent down to the subconfigure in the # testsuite directory. as_fn_append ac_configure_args " python='$PYTHON' pyexecdir='$pyexecdir'" # Now let's try to find python version 3. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then # Extract the first word of "python", so it can be a program name with args. set dummy python; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3 in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 if test -n "$PYTHON3"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 $as_echo "$PYTHON3" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else for ac_prog in python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3 in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3=$ac_cv_path_PYTHON3 if test -n "$PYTHON3"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5 $as_echo "$PYTHON3" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON3" && break done test -n "$PYTHON3" || PYTHON3=":" fi python3_basename=$(basename "$PYTHON3") cat >>confdefs.h <<_ACEOF #define PYTHON3_BASENAME "${python3_basename}" _ACEOF # If we found python version 3, set up the other variables for python # version 3 that AM_PATH_PYTHON sets up for python version 2. if test "x$PYTHON3" != "x:"; then $as_echo "#define PYTHON3_EXISTS /**/" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 version" >&5 $as_echo_n "checking for python3 version... " >&6; } if ${ac_cv_python3_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_version=`$PYTHON3 -c "import sys; sys.stdout.write(sys.version[:3])"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_version" >&5 $as_echo "$ac_cv_python3_version" >&6; } PYTHON3_VERSION=$ac_cv_python3_version PYTHON3_PREFIX='${prefix}' PYTHON3_EXEC_PREFIX='${exec_prefix}' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 platform" >&5 $as_echo_n "checking for python3 platform... " >&6; } if ${ac_cv_python3_platform+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_platform=`$PYTHON3 -c "import sys; sys.stdout.write(sys.platform)"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_platform" >&5 $as_echo "$ac_cv_python3_platform" >&6; } PYTHON3_PLATFORM=$ac_cv_python3_platform { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 script directory" >&5 $as_echo_n "checking for python3 script directory... " >&6; } if ${ac_cv_python3_dir+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_python3_dir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(0,0,prefix='$PYTHON3_PREFIX'))"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_python3_dir" >&5 $as_echo "$ac_cv_python3_dir" >&6; } python3dir=$ac_cv_python3_dir { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python3 extension module directory" >&5 $as_echo_n "checking for python3 extension module directory... " >&6; } if ${ac_cv_py3execdir+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_py3execdir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_py3execdir" >&5 $as_echo "$ac_cv_py3execdir" >&6; } py3execdir=$ac_cv_py3execdir fi # Make sure the python3 and py3execdir variables get sent down to # the subconfigure in the testsuite directory. as_fn_append ac_configure_args " python3='$PYTHON3' py3execdir='$ac_cv_py3execdir'" if test "${enable_prologues+set}" != set; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if prologue searching should be the default" >&5 $as_echo_n "checking to see if prologue searching should be the default... " >&6; } if { echo '#if __i386__ == 1 && __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_prologues=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi # Check whether --enable-prologues was given. if test "${enable_prologues+set}" = set; then : enableval=$enable_prologues; if test "$enable_prologues" = yes; then $as_echo "#define ENABLE_PROLOGUES /**/" >>confdefs.h fi fi if test "${enable_sdt_probes+set}" != set; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if sdt probes should be the default" >&5 $as_echo_n "checking to see if sdt probes should be the default... " >&6; } if { echo '#if __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_sdt_probes=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi # Check whether --enable-sdt-probes was given. if test "${enable_sdt_probes+set}" = set; then : enableval=$enable_sdt_probes; fi if test "x$enable_sdt_probes" != xno; then : $as_echo "#define ENABLE_SDT_PROBES 1" >>confdefs.h fi ax_cxx_compile_cxx11_required=false ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 $as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_cxx_compile_cxx11=yes else ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 $as_echo "$ax_cv_cxx_compile_cxx11" >&6; } if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi if test x$ac_success = xno; then for switch in -std=c++11 -std=c++0x +std=c++11 "-h std=c++11"; do cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 $as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval \${$cachevar+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes else eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" ac_success=yes break fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 fi fi if test x$ac_success = xno; then HAVE_CXX11=0 { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 $as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi have_cxx0x="no" if test "x$HAVE_CXX11" != x1; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -std=c++0x" >&5 $as_echo_n "checking whether C++ compiler accepts -std=c++0x... " >&6; } if ${ax_cv_check_cxxflags___std_cpp0x+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -std=c++0x" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_check_cxxflags___std_cpp0x=yes else ax_cv_check_cxxflags___std_cpp0x=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS=$ax_check_save_flags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___std_cpp0x" >&5 $as_echo "$ax_cv_check_cxxflags___std_cpp0x" >&6; } if test "x$ax_cv_check_cxxflags___std_cpp0x" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: Compiling with -std=c++0x" >&5 $as_echo "$as_me: Compiling with -std=c++0x" >&6;} CXX="$CXX -std=c++0x" HAVE_CXX11=1 have_cxx0x="yes" else as_fn_error $? "A compiler with C++11 support is required." "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -faligned-new" >&5 $as_echo_n "checking whether C++ compiler accepts -faligned-new... " >&6; } if ${ax_cv_check_cxxflags___faligned_new+:} false; then : $as_echo_n "(cached) " >&6 else ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -faligned-new" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_check_cxxflags___faligned_new=yes else ax_cv_check_cxxflags___faligned_new=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS=$ax_check_save_flags fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___faligned_new" >&5 $as_echo "$ax_cv_check_cxxflags___faligned_new" >&6; } if test "x$ax_cv_check_cxxflags___faligned_new" = xyes; then : ALIGNEDNEW="-faligned-new" else ALIGNEDNEW="" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check whether --with-debuginfod was given. if test "${with_debuginfod+set}" = set; then : withval=$with_debuginfod; else with_debuginfod=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use debuginfod" >&5 $as_echo_n "checking whether to use debuginfod... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_debuginfod" >&5 $as_echo "$with_debuginfod" >&6; } if test "x$with_debuginfod" != xno; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debuginfod" >&5 $as_echo_n "checking for debuginfod... " >&6; } if test -n "$debuginfod_CFLAGS"; then pkg_cv_debuginfod_CFLAGS="$debuginfod_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5 ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_debuginfod_CFLAGS=`$PKG_CONFIG --cflags "libdebuginfod >= 0.179" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$debuginfod_LIBS"; then pkg_cv_debuginfod_LIBS="$debuginfod_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libdebuginfod >= 0.179\""; } >&5 ($PKG_CONFIG --exists --print-errors "libdebuginfod >= 0.179") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_debuginfod_LIBS=`$PKG_CONFIG --libs "libdebuginfod >= 0.179" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then debuginfod_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1` else debuginfod_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libdebuginfod >= 0.179" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$debuginfod_PKG_ERRORS" >&5 if test "x$with_debuginfod" = xyes; then as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5 $as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;} fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$with_debuginfod" = xyes; then as_fn_error $? "\"--with-debuginfod was given, but libdebuginfod is missing or unusable.\"" "$LINENO" 5 else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&5 $as_echo "$as_me: WARNING: libdebuginfod is missing or unusable; some features may be unavailable." >&2;} fi else debuginfod_CFLAGS=$pkg_cv_debuginfod_CFLAGS debuginfod_LIBS=$pkg_cv_debuginfod_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBDEBUGINFOD 1" >>confdefs.h fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: debuginfod support disabled; some features may be unavailable." >&5 $as_echo "$as_me: WARNING: debuginfod support disabled; some features may be unavailable." >&2;} fi # Check whether --enable-sqlite was given. if test "${enable_sqlite+set}" = set; then : enableval=$enable_sqlite; else enable_sqlite=check fi sqlite3_LIBS= if test "x$enable_sqlite" != xno; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3" >&5 $as_echo_n "checking for sqlite3... " >&6; } if test -n "$sqlite3_CFLAGS"; then pkg_cv_sqlite3_CFLAGS="$sqlite3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 > 3.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 > 3.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite3_CFLAGS=`$PKG_CONFIG --cflags "sqlite3 > 3.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$sqlite3_LIBS"; then pkg_cv_sqlite3_LIBS="$sqlite3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3 > 3.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "sqlite3 > 3.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_sqlite3_LIBS=`$PKG_CONFIG --libs "sqlite3 > 3.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then sqlite3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3 > 3.7" 2>&1` else sqlite3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3 > 3.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$sqlite3_PKG_ERRORS" >&5 if test "x$enable_sqlite" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--enable-sqlite was given, but test for sqlite > 3.7 failed See \`config.log' for more details" "$LINENO" 5; } fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "x$enable_sqlite" != xcheck; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "--enable-sqlite was given, but test for sqlite > 3.7 failed See \`config.log' for more details" "$LINENO" 5; } fi else sqlite3_CFLAGS=$pkg_cv_sqlite3_CFLAGS sqlite3_LIBS=$pkg_cv_sqlite3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBSQLITE3 1" >>confdefs.h fi fi # Check whether --enable-translator was given. if test "${enable_translator+set}" = set; then : enableval=$enable_translator; else enable_translator="yes" fi if test "$enable_translator" = "yes"; then BUILD_TRANSLATOR_TRUE= BUILD_TRANSLATOR_FALSE='#' else BUILD_TRANSLATOR_TRUE='#' BUILD_TRANSLATOR_FALSE= fi # Check whether --enable-crash was given. if test "${enable_crash+set}" = set; then : enableval=$enable_crash; if test "$enable_crash" != "no"; then save_CPPFLAGS="$CPPFLAGS" if test "$enable_crash" != "yes"; then staplog_CPPFLAGS=-I$enable_crash CPPFLAGS="${staplog_CPPFLAGS} $CPPFLAGS" fi for ac_header in crash/defs.h do : ac_fn_c_check_header_compile "$LINENO" "crash/defs.h" "ac_cv_header_crash_defs_h" " #define NR_CPUS 256 " if test "x$ac_cv_header_crash_defs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_CRASH_DEFS_H 1 _ACEOF else as_fn_error $? "cannot find required crash header (crash-devel may need to be installed)" "$LINENO" 5 fi done CPPFLAGS="$save_CPPFLAGS" fi else enable_crash="no" fi if test "$enable_crash" != "no"; then BUILD_CRASHMOD_TRUE= BUILD_CRASHMOD_FALSE='#' else BUILD_CRASHMOD_TRUE='#' BUILD_CRASHMOD_FALSE= fi building_docs="no" installing_prebuilt_docs="yes" # Check whether --enable-docs was given. if test "${enable_docs+set}" = set; then : enableval=$enable_docs; enable_docs=$enableval else enable_docs="prebuilt" fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_latex+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_latex"; then ac_cv_prog_have_latex="$have_latex" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_latex="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_latex" && ac_cv_prog_have_latex="no" fi fi have_latex=$ac_cv_prog_have_latex if test -n "$have_latex"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_latex" >&5 $as_echo "$have_latex" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "dvips", so it can be a program name with args. set dummy dvips; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_dvips+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_dvips"; then ac_cv_prog_have_dvips="$have_dvips" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_dvips="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_dvips" && ac_cv_prog_have_dvips="no" fi fi have_dvips=$ac_cv_prog_have_dvips if test -n "$have_dvips"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_dvips" >&5 $as_echo "$have_dvips" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "ps2pdf", so it can be a program name with args. set dummy ps2pdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_ps2pdf+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_ps2pdf"; then ac_cv_prog_have_ps2pdf="$have_ps2pdf" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_ps2pdf="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_ps2pdf" && ac_cv_prog_have_ps2pdf="no" fi fi have_ps2pdf=$ac_cv_prog_have_ps2pdf if test -n "$have_ps2pdf"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ps2pdf" >&5 $as_echo "$have_ps2pdf" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" != "xyesyesyes"; then if test "$enable_docs" = "yes"; then as_fn_error $? "cannot find all tools for building documentation" "$LINENO" 5 fi if test "$enable_docs" = "check"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build documentation, cannot find all tools" >&5 $as_echo "$as_me: WARNING: will not build documentation, cannot find all tools" >&2;} fi fi if test "$enable_docs" = "prebuilt"; then { $as_echo "$as_me:${as_lineno-$LINENO}: will only install prebuilt documentation" >&5 $as_echo "$as_me: will only install prebuilt documentation" >&6;} fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" = "xyesyesyes" -a "$enable_docs" != "no" -a "$enable_docs" != "prebuilt"; then building_docs="yes" installing_prebuilt_docs="yes" fi if test "$enable_docs" = "no"; then installing_prebuilt_docs="no" fi if test "$building_docs" = "yes"; then BUILD_DOCS_TRUE= BUILD_DOCS_FALSE='#' else BUILD_DOCS_TRUE='#' BUILD_DOCS_FALSE= fi if test "$installing_prebuilt_docs" = "yes"; then INSTALL_PREBUILT_DOCS_TRUE= INSTALL_PREBUILT_DOCS_FALSE='#' else INSTALL_PREBUILT_DOCS_TRUE='#' INSTALL_PREBUILT_DOCS_FALSE= fi building_refdocs="no" # Check whether --enable-refdocs was given. if test "${enable_refdocs+set}" = set; then : enableval=$enable_refdocs; enable_refdocs=$enableval else enable_refdocs="check" fi if test "$building_docs" = "no" -a "$enable_refdocs" = "yes" ; then as_fn_error $? "must use --enable-docs with --enable-refdocs" "$LINENO" 5 fi if test "$enable_refdocs" != "no" -a "${building_docs}" = "yes"; then building_refdocs="yes" fi if test "$building_refdocs" = "yes"; then BUILD_REFDOCS_TRUE= BUILD_REFDOCS_FALSE='#' else BUILD_REFDOCS_TRUE='#' BUILD_REFDOCS_FALSE= fi # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_xmlto+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_xmlto"; then ac_cv_prog_have_xmlto="$have_xmlto" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_xmlto="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_xmlto" && ac_cv_prog_have_xmlto="no" fi fi have_xmlto=$ac_cv_prog_have_xmlto if test -n "$have_xmlto"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_xmlto" >&5 $as_echo "$have_xmlto" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_fop+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_fop"; then ac_cv_prog_have_fop="$have_fop" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_fop="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_fop" && ac_cv_prog_have_fop="no" fi fi have_fop=$ac_cv_prog_have_fop if test -n "$have_fop"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_fop" >&5 $as_echo "$have_fop" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x${have_fop}" = "xyes"; then # Due to rhbz505364 / 830266, we must actually test-run fop, not just # hope that it works. { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if xmlto --with-fop actually works" >&5 $as_echo_n "checking to see if xmlto --with-fop actually works... " >&6; } if xmlto --with-fop pdf ${srcdir}/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: it's dead, Jim" >&5 $as_echo "it's dead, Jim" >&6; } have_fop="broken" fi rm -f dummy-tapsets.pdf fi if test "$have_fop" = "yes"; then HAVE_FOP_TRUE= HAVE_FOP_FALSE='#' else HAVE_FOP_TRUE='#' HAVE_FOP_FALSE= fi if test "$have_xmlto" = "yes"; then HAVE_XMLTO_TRUE= HAVE_XMLTO_FALSE='#' else HAVE_XMLTO_TRUE='#' HAVE_XMLTO_FALSE= fi building_htmldocs="no" # Check whether --enable-htmldocs was given. if test "${enable_htmldocs+set}" = set; then : enableval=$enable_htmldocs; building_htmldocs=$enableval else building_htmldocs="no" fi if test "$have_xmlto" = "no" -a "$building_htmldocs" = "yes"; then as_fn_error $? "xmlto required for building html documentation" "$LINENO" 5 fi if test "$building_htmldocs" = "yes"; then BUILD_HTMLDOCS_TRUE= BUILD_HTMLDOCS_FALSE='#' else BUILD_HTMLDOCS_TRUE='#' BUILD_HTMLDOCS_FALSE= fi cat > conftest.xml << 'EOF' foo Logging Tapset log logging Description baz EOF if test "x${have_xmlto}" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xmlto --stringparam support" >&5 $as_echo_n "checking for xmlto --stringparam support... " >&6; } xmlto --stringparam man.authors.section.enabled=0 html-nochunks conftest.xml >/dev/null 2>&1 if test $? = 0; then have_xmlto_stringparam="yes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest.html fi if test "$have_xmlto_stringparam" = "yes"; then XMLTO_STRINGPARAM_TRUE= XMLTO_STRINGPARAM_FALSE='#' else XMLTO_STRINGPARAM_TRUE='#' XMLTO_STRINGPARAM_FALSE= fi rm -f conftest.xml # Check whether --with-nss was given. if test "${with_nss+set}" = set; then : withval=$with_nss; fi if test "x$with_nss" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nss" >&5 $as_echo_n "checking for nss... " >&6; } if test -n "$nss_CFLAGS"; then pkg_cv_nss_CFLAGS="$nss_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_nss_CFLAGS=`$PKG_CONFIG --cflags "nss >= 3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$nss_LIBS"; then pkg_cv_nss_LIBS="$nss_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nss >= 3\""; } >&5 ($PKG_CONFIG --exists --print-errors "nss >= 3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_nss_LIBS=`$PKG_CONFIG --libs "nss >= 3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then nss_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "nss >= 3" 2>&1` else nss_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "nss >= 3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$nss_PKG_ERRORS" >&5 have_nss=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_nss=no else nss_CFLAGS=$pkg_cv_nss_CFLAGS nss_LIBS=$pkg_cv_nss_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_nss=yes $as_echo "#define HAVE_NSS 1" >>confdefs.h fi else have_nss=no fi if test "${have_nss}" = "yes"; then HAVE_NSS_TRUE= HAVE_NSS_FALSE='#' else HAVE_NSS_TRUE='#' HAVE_NSS_FALSE= fi # Check whether --with-openssl was given. if test "${with_openssl+set}" = set; then : withval=$with_openssl; fi if test "x$with_openssl" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl" >&5 $as_echo_n "checking for openssl... " >&6; } if test -n "$openssl_CFLAGS"; then pkg_cv_openssl_CFLAGS="$openssl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_openssl_CFLAGS=`$PKG_CONFIG --cflags "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$openssl_LIBS"; then pkg_cv_openssl_LIBS="$openssl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"openssl\""; } >&5 ($PKG_CONFIG --exists --print-errors "openssl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_openssl_LIBS=`$PKG_CONFIG --libs "openssl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then openssl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "openssl" 2>&1` else openssl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "openssl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$openssl_PKG_ERRORS" >&5 have_openssl=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_openssl=no else openssl_CFLAGS=$pkg_cv_openssl_CFLAGS openssl_LIBS=$pkg_cv_openssl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_openssl=yes $as_echo "#define HAVE_OPENSSL 1" >>confdefs.h fi else have_openssl=no fi if test "${have_openssl}" = "yes"; then HAVE_OPENSSL_TRUE= HAVE_OPENSSL_FALSE='#' else HAVE_OPENSSL_TRUE='#' HAVE_OPENSSL_FALSE= fi # Check whether --with-dracutstap was given. if test "${with_dracutstap+set}" = set; then : withval=$with_dracutstap; fi if test "x$with_dracutstap" != "x"; then : dracutstap="$with_dracutstap" else dracutstap=/usr/lib/dracut/modules.d/99stap fi { $as_echo "$as_me:${as_lineno-$LINENO}: using dracut module directory $dracutstap" >&5 $as_echo "$as_me: using dracut module directory $dracutstap" >&6;} # Check whether --with-dracutbindir was given. if test "${with_dracutbindir+set}" = set; then : withval=$with_dracutbindir; fi if test "x$with_dracutbindir" != "x"; then : dracutbindir="$with_dracutbindir" else dracutbindir=/sbin fi { $as_echo "$as_me:${as_lineno-$LINENO}: using dracut binary $dracutbindir" >&5 $as_echo "$as_me: using dracut binary $dracutbindir" >&6;} # Check whether --enable-server was given. if test "${enable_server+set}" = set; then : enableval=$enable_server; enable_server=$enableval else enable_server="check" fi if test "$enable_server" != "no"; then if test "x${have_nss}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap compile server, cannot find nss headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap compile server, cannot find nss headers" >&2;} fi fi if test "${have_nss}" = "yes" -a "$enable_server" != "no"; then BUILD_SERVER_TRUE= BUILD_SERVER_FALSE='#' else BUILD_SERVER_TRUE='#' BUILD_SERVER_FALSE= fi if test "${have_nss}" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compile-server client functionality will be disabled, cannot find nss development files" >&5 $as_echo "$as_me: WARNING: compile-server client functionality will be disabled, cannot find nss development files" >&2;} fi # Check whether --with-avahi was given. if test "${with_avahi+set}" = set; then : withval=$with_avahi; fi if test "x$with_avahi" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for avahi" >&5 $as_echo_n "checking for avahi... " >&6; } if test -n "$avahi_CFLAGS"; then pkg_cv_avahi_CFLAGS="$avahi_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_avahi_CFLAGS=`$PKG_CONFIG --cflags "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$avahi_LIBS"; then pkg_cv_avahi_LIBS="$avahi_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"avahi-client\""; } >&5 ($PKG_CONFIG --exists --print-errors "avahi-client") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_avahi_LIBS=`$PKG_CONFIG --libs "avahi-client" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then avahi_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "avahi-client" 2>&1` else avahi_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "avahi-client" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$avahi_PKG_ERRORS" >&5 have_avahi=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_avahi=no else avahi_CFLAGS=$pkg_cv_avahi_CFLAGS avahi_LIBS=$pkg_cv_avahi_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_avahi=yes $as_echo "#define HAVE_AVAHI 1" >>confdefs.h fi else have_avahi=no fi if test "${have_avahi}" = "yes"; then HAVE_AVAHI_TRUE= HAVE_AVAHI_FALSE='#' else HAVE_AVAHI_TRUE='#' HAVE_AVAHI_FALSE= fi if test "${have_avahi}" != "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: some compile-server functionality will be restricted, cannot find avahi development files" >&5 $as_echo "$as_me: WARNING: some compile-server functionality will be restricted, cannot find avahi development files" >&2;} fi # Check whether --with-rpm was given. if test "${with_rpm+set}" = set; then : withval=$with_rpm; else with_rpm="auto" fi if test "$with_rpm" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmtsInitIterator in -lrpm" >&5 $as_echo_n "checking for rpmtsInitIterator in -lrpm... " >&6; } if ${ac_cv_lib_rpm_rpmtsInitIterator+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmtsInitIterator (); int main () { return rpmtsInitIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpm_rpmtsInitIterator=yes else ac_cv_lib_rpm_rpmtsInitIterator=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpm_rpmtsInitIterator" >&5 $as_echo "$ac_cv_lib_rpm_rpmtsInitIterator" >&6; } if test "x$ac_cv_lib_rpm_rpmtsInitIterator" = xyes; then : $as_echo "#define HAVE_LIBRPM 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpm" have_librpm="yes" else have_librpm="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmdbNextIterator in -lrpmdb" >&5 $as_echo_n "checking for rpmdbNextIterator in -lrpmdb... " >&6; } if ${ac_cv_lib_rpmdb_rpmdbNextIterator+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpmdb $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmdbNextIterator (); int main () { return rpmdbNextIterator (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpmdb_rpmdbNextIterator=yes else ac_cv_lib_rpmdb_rpmdbNextIterator=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmdb_rpmdbNextIterator" >&5 $as_echo "$ac_cv_lib_rpmdb_rpmdbNextIterator" >&6; } if test "x$ac_cv_lib_rpmdb_rpmdbNextIterator" = xyes; then : stap_LIBS="$stap_LIBS -lrpmdb" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rpmFreeCrypto in -lrpmio" >&5 $as_echo_n "checking for rpmFreeCrypto in -lrpmio... " >&6; } if ${ac_cv_lib_rpmio_rpmFreeCrypto+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrpmio $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rpmFreeCrypto (); int main () { return rpmFreeCrypto (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rpmio_rpmFreeCrypto=yes else ac_cv_lib_rpmio_rpmFreeCrypto=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpmio_rpmFreeCrypto" >&5 $as_echo "$ac_cv_lib_rpmio_rpmFreeCrypto" >&6; } if test "x$ac_cv_lib_rpmio_rpmFreeCrypto" = xyes; then : $as_echo "#define HAVE_LIBRPMIO 1" >>confdefs.h stap_LIBS="$stap_LIBS -lc -lrpmio" have_librpmio="yes" else have_librpmio="no" fi if test "x$have_librpm" != "xyes" -a "$with_rpm" = "yes"; then as_fn_error $? "cannot find librpm" "$LINENO" 5 fi if test "x$have_librpmio" != "xyes" -a "$with_rpm" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find librpmio" >&5 $as_echo "$as_me: WARNING: cannot find librpmio" >&2;} fi fi LIBS_no_readline=$LIBS have_libreadline="no" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link readline libs" >&5 $as_echo_n "checking how to link readline libs... " >&6; } for libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$libtermcap"; then READLINE_LIBS="-lreadline" else READLINE_LIBS="-lreadline -l$libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_libreadline="yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$have_libreadline" = "yes"; then break fi done if test "$have_libreadline" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } READLINE_LIBS="" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINE_LIBS" >&5 $as_echo "$READLINE_LIBS" >&6; } $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h fi if test "$have_libreadline" = "yes"; then HAVE_LIBREADLINE_TRUE= HAVE_LIBREADLINE_FALSE='#' else HAVE_LIBREADLINE_TRUE='#' HAVE_LIBREADLINE_FALSE= fi LIBS=$LIBS_no_readline # Check whether --with-python3 was given. if test "${with_python3+set}" = set; then : withval=$with_python3; else with_python3="auto" fi if test "x$with_python3" = "xyes"; then : if test "x$PYTHON3" = "x:"; then : as_fn_error $? "python version 3 is required" "$LINENO" 5 else preferred_python=$PYTHON3 fi elif test "x$with_python3" = "xno"; then : if test "x$PYTHON" = "x:"; then : as_fn_error $? "python version 2 is required" "$LINENO" 5 else preferred_python=$PYTHON fi elif test "x$PYTHON3" != "x:"; then : preferred_python=$PYTHON3 elif test "x$PYTHON" != "x:"; then : preferred_python=$PYTHON else as_fn_error $? "neither python version 2 nor 3 found" "$LINENO" 5 fi if test $enable_translator = yes; then # Need libdwfl-capable recent elfutils http://elfutils.org/ # On modern debian/ubuntu and modern elfutils, libebl has been # merged into libdw # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=457543 save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ebl_strtabinit in -lebl" >&5 $as_echo_n "checking for ebl_strtabinit in -lebl... " >&6; } if ${ac_cv_lib_ebl_ebl_strtabinit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lebl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ebl_strtabinit (); int main () { return ebl_strtabinit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ebl_ebl_strtabinit=yes else ac_cv_lib_ebl_ebl_strtabinit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ebl_ebl_strtabinit" >&5 $as_echo "$ac_cv_lib_ebl_ebl_strtabinit" >&6; } if test "x$ac_cv_lib_ebl_ebl_strtabinit" = xyes; then : ebl_LIBS=-lebl else ebl_LIBS= fi LIBS="$save_LIBS" save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dwfl_module_getsym in -ldw" >&5 $as_echo_n "checking for dwfl_module_getsym in -ldw... " >&6; } if ${ac_cv_lib_dw_dwfl_module_getsym+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldw -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dwfl_module_getsym (); int main () { return dwfl_module_getsym (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dw_dwfl_module_getsym=yes else ac_cv_lib_dw_dwfl_module_getsym=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwfl_module_getsym" >&5 $as_echo "$ac_cv_lib_dw_dwfl_module_getsym" >&6; } if test "x$ac_cv_lib_dw_dwfl_module_getsym" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDW 1 _ACEOF LIBS="-ldw $LIBS" else as_fn_error $? "missing elfutils development headers/libraries (install elfutils-devel, libebl-dev, libdw-dev and/or libebl-devel)" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dwarf_next_unit in -ldw" >&5 $as_echo_n "checking for dwarf_next_unit in -ldw... " >&6; } if ${ac_cv_lib_dw_dwarf_next_unit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldw -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dwarf_next_unit (); int main () { return dwarf_next_unit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dw_dwarf_next_unit=yes else ac_cv_lib_dw_dwarf_next_unit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dw_dwarf_next_unit" >&5 $as_echo "$ac_cv_lib_dw_dwarf_next_unit" >&6; } if test "x$ac_cv_lib_dw_dwarf_next_unit" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDW 1 _ACEOF LIBS="-ldw $LIBS" else as_fn_error $? "elfutils, libdw too old, need 0.148+" "$LINENO" 5 fi stap_LIBS="$stap_LIBS -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf" LIBS="$save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: stap will link $stap_LIBS" >&5 $as_echo "$as_me: stap will link $stap_LIBS" >&6;} # staprun has more modest libelf needs save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_getshdrstrndx in -lelf" >&5 $as_echo_n "checking for elf_getshdrstrndx in -lelf... " >&6; } if ${ac_cv_lib_elf_elf_getshdrstrndx+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lelf $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char elf_getshdrstrndx (); int main () { return elf_getshdrstrndx (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_elf_elf_getshdrstrndx=yes else ac_cv_lib_elf_elf_getshdrstrndx=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_elf_getshdrstrndx" >&5 $as_echo "$ac_cv_lib_elf_elf_getshdrstrndx" >&6; } if test "x$ac_cv_lib_elf_elf_getshdrstrndx" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBELF 1 _ACEOF LIBS="-lelf $LIBS" else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "libelf too old, need 0.142+ See \`config.log' for more details" "$LINENO" 5; } fi staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" LIBS="$save_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: staprun will link $staprun_LIBS" >&5 $as_echo "$as_me: staprun will link $staprun_LIBS" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: stapbpf will link $stapbpf_LIBS" >&5 $as_echo "$as_me: stapbpf will link $stapbpf_LIBS" >&6;} # Before PR4037, we used to arrange to pass CFLAGS+=-m64 for a staprun # being compiled on 32-bit userspace but running against 64-bit kernels. # This is no longer necessary. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Use boost::string_ref if available ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu for ac_header in boost/utility/string_ref.hpp do : ac_fn_cxx_check_header_mongrel "$LINENO" "boost/utility/string_ref.hpp" "ac_cv_header_boost_utility_string_ref_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_utility_string_ref_hpp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BOOST_UTILITY_STRING_REF_HPP 1 _ACEOF fi done # add boost_system bits for stapdyn with dyninst 10+ saved_LIBS="$LIBS" LIBS="-lboost_system $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking need for -lboost_system library" >&5 $as_echo_n "checking need for -lboost_system library... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main() { boost::system::error_condition e(); } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yup" >&5 $as_echo "yup" >&6; } BOOST_SYSTEM_LIB="-lboost_system" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: nope" >&5 $as_echo "nope" >&6; } BOOST_SYSTEM_LIB="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check for Dyninst headers and libraries # Check whether --with-dyninst was given. if test "${with_dyninst+set}" = set; then : withval=$with_dyninst; fi case "$with_dyninst" in no) ;; ''|yes) # Try a simple-minded distro search DYNINST_CXXFLAGS="-I/usr/include/dyninst" DYNINST_LDFLAGS="-L/usr/lib64/dyninst -L/usr/lib/dyninst" # XXX both lib paths!?! # Add Dyninst libraries only if they are available if test -d "/usr/include/dyninst"; then save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TBB_runtime_interface_version in -ltbb" >&5 $as_echo_n "checking for TBB_runtime_interface_version in -ltbb... " >&6; } if ${ac_cv_lib_tbb_TBB_runtime_interface_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltbb $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TBB_runtime_interface_version (); int main () { return TBB_runtime_interface_version (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tbb_TBB_runtime_interface_version=yes else ac_cv_lib_tbb_TBB_runtime_interface_version=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tbb_TBB_runtime_interface_version" >&5 $as_echo "$ac_cv_lib_tbb_TBB_runtime_interface_version" >&6; } if test "x$ac_cv_lib_tbb_TBB_runtime_interface_version" = xyes; then : tbb_LIBS=-ltbb else tbb_LIBS= fi LIBS="$save_LIBS" DYNINST_LIBS="-lparseAPI -lsymtabAPI -linstructionAPI $tbb_LIBS -lcommon" fi ;; *) # Use paths in the user-specified prefix DYNINST_CXXFLAGS="-I$with_dyninst/include" DYNINST_LDFLAGS="-L$with_dyninst/lib/" # XXX need lib64 too? # Will assume Dyninst libraries are available as the path is specified save_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TBB_runtime_interface_version in -ltbb" >&5 $as_echo_n "checking for TBB_runtime_interface_version in -ltbb... " >&6; } if ${ac_cv_lib_tbb_TBB_runtime_interface_version+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltbb $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char TBB_runtime_interface_version (); int main () { return TBB_runtime_interface_version (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tbb_TBB_runtime_interface_version=yes else ac_cv_lib_tbb_TBB_runtime_interface_version=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tbb_TBB_runtime_interface_version" >&5 $as_echo "$ac_cv_lib_tbb_TBB_runtime_interface_version" >&6; } if test "x$ac_cv_lib_tbb_TBB_runtime_interface_version" = xyes; then : tbb_LIBS=-ltbb else tbb_LIBS= fi LIBS="$save_LIBS" DYNINST_LIBS="-lparseAPI -lsymtabAPI -linstructionAPI $tbb_LIBS -lcommon" ;; esac if test "$with_dyninst" != "no"; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking dyninst support" >&5 $as_echo "$as_me: checking dyninst support" >&6;} for ac_header in BPatch_object.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "BPatch_object.h" "ac_cv_header_BPatch_object_h" "$ac_includes_default" if test "x$ac_cv_header_BPatch_object_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BPATCH_OBJECT_H 1 _ACEOF $as_echo "#define HAVE_DYNINST 1" >>confdefs.h have_dyninst=yes { $as_echo "$as_me:${as_lineno-$LINENO}: dyninst support available" >&5 $as_echo "$as_me: dyninst support available" >&6;} fi done if test -n "$with_dyninst" -a "$have_dyninst" != "yes"; then as_fn_error $? "Dyninst does not appear to be usable" "$LINENO" 5 fi CPPFLAGS="$old_CPPFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi if test "${have_dyninst}" = "yes"; then HAVE_DYNINST_TRUE= HAVE_DYNINST_FALSE='#' else HAVE_DYNINST_TRUE='#' HAVE_DYNINST_FALSE= fi # Check whether --enable-virt was given. if test "${enable_virt+set}" = set; then : enableval=$enable_virt; enable_virt=$enableval else enable_virt="check" fi # Check whether --enable-libvirt was given. if test "${enable_libvirt+set}" = set; then : enableval=$enable_libvirt; fi if test "$enable_libvirt" != no; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libvirt" >&5 $as_echo_n "checking for libvirt... " >&6; } if test -n "$libvirt_CFLAGS"; then pkg_cv_libvirt_CFLAGS="$libvirt_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libvirt >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libvirt >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libvirt_CFLAGS=`$PKG_CONFIG --cflags "libvirt >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libvirt_LIBS"; then pkg_cv_libvirt_LIBS="$libvirt_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libvirt >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "libvirt >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libvirt_LIBS=`$PKG_CONFIG --libs "libvirt >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libvirt_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libvirt >= 1.0.2" 2>&1` else libvirt_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libvirt >= 1.0.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libvirt_PKG_ERRORS" >&5 have_libvirt=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libvirt=no else libvirt_CFLAGS=$pkg_cv_libvirt_CFLAGS libvirt_LIBS=$pkg_cv_libvirt_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libvirt=yes $as_echo "#define HAVE_LIBVIRT 1" >>confdefs.h fi fi if test "${have_libvirt}" = "yes"; then HAVE_LIBVIRT_TRUE= HAVE_LIBVIRT_FALSE='#' else HAVE_LIBVIRT_TRUE='#' HAVE_LIBVIRT_FALSE= fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 $as_echo_n "checking for libxml2... " >&6; } if test -n "$libxml2_CFLAGS"; then pkg_cv_libxml2_CFLAGS="$libxml2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libxml2_LIBS"; then pkg_cv_libxml2_LIBS="$libxml2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libxml2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libxml2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else libxml2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libxml2_PKG_ERRORS" >&5 have_libxml2=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libxml2=no else libxml2_CFLAGS=$pkg_cv_libxml2_CFLAGS libxml2_LIBS=$pkg_cv_libxml2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libxml2=yes $as_echo "#define HAVE_LIBXML2 1" >>confdefs.h fi if test "${have_libxml2}" = "yes"; then HAVE_LIBXML2_TRUE= HAVE_LIBXML2_FALSE='#' else HAVE_LIBXML2_TRUE='#' HAVE_LIBXML2_FALSE= fi if test "$enable_virt" != "no"; then if test "x${have_libvirt}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap virt support, cannot find libvirt headers" >&2;} fi if test "x${have_libxml2}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not build systemtap virt support, cannot find xml2 headers" >&5 $as_echo "$as_me: WARNING: will not build systemtap virt support, cannot find xml2 headers" >&2;} fi fi if test "${have_libvirt}" = "yes" -a "${have_libxml2}" = "yes" -a "$enable_virt" != "no"; then BUILD_VIRT_TRUE= BUILD_VIRT_FALSE='#' else BUILD_VIRT_TRUE='#' BUILD_VIRT_FALSE= fi # Check whether --with-python2-probes was given. if test "${with_python2_probes+set}" = set; then : withval=$with_python2_probes; fi have_python2_support=no if test "x$with_python2_probes" != "xno"; then : if test "x$PYTHON" != "x:"; then : for ac_prog in ${python_basename}-config python2-config python-config do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON_CONFIG="$PYTHON_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON_CONFIG=$ac_cv_path_PYTHON_CONFIG if test -n "$PYTHON_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_CONFIG" >&5 $as_echo "$PYTHON_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PYTHON_CONFIG" && break done fi if test "x$PYTHON_CONFIG" != "x"; then : PYTHON_CPPFLAGS=`$PYTHON_CONFIG --includes 2> /dev/null` PYTHON_CPPFLAGS=$PYTHON_CPPFLAGS save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON_CPPFLAGS $CPPFLAGS" { ac_cv_header_Python_h=; unset ac_cv_header_Python_h;} for ac_header in Python.h do : ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PYTHON_H 1 _ACEOF have_python2_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python2_support" = "xyes"; then : $as_echo "#define HAVE_PYTHON2_PROBES 1" >>confdefs.h else if test "x$with_python2_probes" = "xyes"; then : as_fn_error $? "python version 2 probe support requested but not found" "$LINENO" 5 fi fi if test "x$have_python2_support" = "xyes"; then HAVE_PYTHON2_PROBES_TRUE= HAVE_PYTHON2_PROBES_FALSE='#' else HAVE_PYTHON2_PROBES_TRUE='#' HAVE_PYTHON2_PROBES_FALSE= fi # Check whether --with-python3-probes was given. if test "${with_python3_probes+set}" = set; then : withval=$with_python3_probes; fi have_python3_support=no if test "x$with_python3_probes" != "xno"; then : if test "x$PYTHON3" != "x:" ; then : # Extract the first word of "${python3_basename}-config", so it can be a program name with args. set dummy ${python3_basename}-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PYTHON3_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PYTHON3_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON3_CONFIG="$PYTHON3_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON3_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PYTHON3_CONFIG=$ac_cv_path_PYTHON3_CONFIG if test -n "$PYTHON3_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3_CONFIG" >&5 $as_echo "$PYTHON3_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$PYTHON3_CONFIG" != "x"; then : PYTHON3_CPPFLAGS=`$PYTHON3_CONFIG --includes 2> /dev/null` PYTHON3_CPPFLAGS=$PYTHON3_CPPFLAGS save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON3_CPPFLAGS $CPPFLAGS" { ac_cv_header_Python_h=; unset ac_cv_header_Python_h;} for ac_header in Python.h do : ac_fn_c_check_header_mongrel "$LINENO" "Python.h" "ac_cv_header_Python_h" "$ac_includes_default" if test "x$ac_cv_header_Python_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PYTHON_H 1 _ACEOF have_python3_support=yes fi done CPPFLAGS="$save_CPPFLAGS" fi fi if test "x$have_python3_support" = "xyes"; then : $as_echo "#define HAVE_PYTHON3_PROBES 1" >>confdefs.h else if test "x$with_python3_probes" = "xyes"; then : as_fn_error $? "python version 3 probe support requested but not found" "$LINENO" 5 fi fi if test "x$have_python3_support" = "xyes"; then HAVE_PYTHON3_PROBES_TRUE= HAVE_PYTHON3_PROBES_FALSE='#' else HAVE_PYTHON3_PROBES_TRUE='#' HAVE_PYTHON3_PROBES_FALSE= fi if test "x$have_python2_support" = "xyes" -o "x$have_python3_support" = "xyes"; then HAVE_PYTHON_PROBES_TRUE= HAVE_PYTHON_PROBES_FALSE='#' else HAVE_PYTHON_PROBES_TRUE='#' HAVE_PYTHON_PROBES_FALSE= fi # Check whether --enable-monitor was given. if test "${enable_monitor+set}" = set; then : enableval=$enable_monitor; fi if test "$enable_monitor" != "no"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jsonc" >&5 $as_echo_n "checking for jsonc... " >&6; } if test -n "$jsonc_CFLAGS"; then pkg_cv_jsonc_CFLAGS="$jsonc_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_CFLAGS=`$PKG_CONFIG --cflags "json-c >= 0.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$jsonc_LIBS"; then pkg_cv_jsonc_LIBS="$jsonc_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"json-c >= 0.11\""; } >&5 ($PKG_CONFIG --exists --print-errors "json-c >= 0.11") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_jsonc_LIBS=`$PKG_CONFIG --libs "json-c >= 0.11" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then jsonc_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "json-c >= 0.11" 2>&1` else jsonc_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "json-c >= 0.11" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$jsonc_PKG_ERRORS" >&5 have_jsonc=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_jsonc=no else jsonc_CFLAGS=$pkg_cv_jsonc_CFLAGS jsonc_LIBS=$pkg_cv_jsonc_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_jsonc=yes fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ncurses" >&5 $as_echo_n "checking for ncurses... " >&6; } if test -n "$ncurses_CFLAGS"; then pkg_cv_ncurses_CFLAGS="$ncurses_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncurses_CFLAGS=`$PKG_CONFIG --cflags "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$ncurses_LIBS"; then pkg_cv_ncurses_LIBS="$ncurses_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ncurses\""; } >&5 ($PKG_CONFIG --exists --print-errors "ncurses") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_ncurses_LIBS=`$PKG_CONFIG --libs "ncurses" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then ncurses_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ncurses" 2>&1` else ncurses_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ncurses" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$ncurses_PKG_ERRORS" >&5 have_ncurses=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_ncurses=no else ncurses_CFLAGS=$pkg_cv_ncurses_CFLAGS ncurses_LIBS=$pkg_cv_ncurses_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_ncurses=yes fi if test "${have_jsonc}" = "yes" -a "${have_ncurses}" = yes; then $as_echo "#define HAVE_MONITOR_LIBS 1" >>confdefs.h fi fi if test "${have_jsonc}" = "yes" -a "${have_ncurses}" = "yes" -a "$enable_monitor" != "no"; then HAVE_MONITOR_LIBS_TRUE= HAVE_MONITOR_LIBS_FALSE='#' else HAVE_MONITOR_LIBS_TRUE='#' HAVE_MONITOR_LIBS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler .section \"?\" flags support" >&5 $as_echo_n "checking for assembler .section \"?\" flags support... " >&6; } if ${stap_cv_sectionq+:} false; then : $as_echo_n "(cached) " >&6 else old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wa,--fatal-warnings" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ asm(".section .note.foo,\"?\",\"note\"\n" ".byte 1, 2, 3\n" ".previous\n" ".section .text,\"axG\",\"progbits\",foogroup,comdat\n" ".byte 1\n" ".pushsection .note.foo,\"?\",\"note\"\n" ".byte 4, 5, 6\n" ".popsection\n" ".byte 2\n"); _ACEOF if ac_fn_c_try_compile "$LINENO"; then : stap_cv_sectionq=yes else stap_cv_sectionq=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$old_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $stap_cv_sectionq" >&5 $as_echo "$stap_cv_sectionq" >&6; } support_section_question=0 if test $stap_cv_sectionq = yes; then support_section_question=1 fi # Check whether --with-bpf was given. if test "${with_bpf+set}" = set; then : withval=$with_bpf; fi if test "x$with_bpf" != "xno"; then : ac_fn_c_check_decl "$LINENO" "BPF_PROG_TYPE_PERF_EVENT" "ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" "#include " if test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BPF_PROG_TYPE_PERF_EVENT $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : $as_echo "#define HAVE_BPF_DECLS 1" >>confdefs.h fi fi if test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" = "xyes"; then HAVE_BPF_DECLS_TRUE= HAVE_BPF_DECLS_FALSE='#' else HAVE_BPF_DECLS_TRUE='#' HAVE_BPF_DECLS_FALSE= fi ac_config_files="$ac_config_files includes/sys/sdt-config.h po/Makefile.in" ac_fn_c_check_decl "$LINENO" "BPF_PROG_TYPE_RAW_TRACEPOINT" "ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" "#include " if test "x$ac_cv_have_decl_BPF_PROG_TYPE_RAW_TRACEPOINT" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_BPF_PROG_TYPE_RAW_TRACEPOINT $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : $as_echo "#define HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT 1" >>confdefs.h fi # Check whether --with-selinux was given. if test "${with_selinux+set}" = set; then : withval=$with_selinux; fi if test "x$with_selinux" != "xno"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for selinux" >&5 $as_echo_n "checking for selinux... " >&6; } if test -n "$selinux_CFLAGS"; then pkg_cv_selinux_CFLAGS="$selinux_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_selinux_CFLAGS=`$PKG_CONFIG --cflags "libselinux" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$selinux_LIBS"; then pkg_cv_selinux_LIBS="$selinux_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libselinux\""; } >&5 ($PKG_CONFIG --exists --print-errors "libselinux") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_selinux_LIBS=`$PKG_CONFIG --libs "libselinux" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then selinux_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libselinux" 2>&1` else selinux_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libselinux" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$selinux_PKG_ERRORS" >&5 have_selinux=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_selinux=no else selinux_CFLAGS=$pkg_cv_selinux_CFLAGS selinux_LIBS=$pkg_cv_selinux_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_selinux=yes $as_echo "#define HAVE_SELINUX 1" >>confdefs.h fi else have_selinux=no fi if test "${have_selinux}" = "yes"; then HAVE_SELINUX_TRUE= HAVE_SELINUX_FALSE='#' else HAVE_SELINUX_TRUE='#' HAVE_SELINUX_FALSE= fi ac_fn_c_check_decl "$LINENO" "F_SETPIPE_SZ" "ac_cv_have_decl_F_SETPIPE_SZ" "#include " if test "x$ac_cv_have_decl_F_SETPIPE_SZ" = xyes; then : $as_echo "#define HAVE_F_SETPIPE_SZ 1" >>confdefs.h fi # Extract the first word of "javac", so it can be a program name with args. set dummy javac; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_javac+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_javac"; then ac_cv_prog_have_javac="$have_javac" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_javac="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_javac" && ac_cv_prog_have_javac="no" fi fi have_javac=$ac_cv_prog_have_javac if test -n "$have_javac"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_javac" >&5 $as_echo "$have_javac" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_have_jar+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$have_jar"; then ac_cv_prog_have_jar="$have_jar" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_jar="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_have_jar" && ac_cv_prog_have_jar="no" fi fi have_jar=$ac_cv_prog_have_jar if test -n "$have_jar"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_jar" >&5 $as_echo "$have_jar" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$have_javac" != no -a "$have_jar" != no; then echo java found, will try to configure Byteman support # Check whether --with-java was given. if test "${with_java+set}" = set; then : withval=$with_java; else with_java=/usr/lib/jvm/java fi if test ! -d "$with_java"; then with_java=no fi JAVADIR="${with_java}" # always needed to compile if test "$with_java" != "no"; then cat >>confdefs.h <<_ACEOF #define HAVE_JAVA "1" _ACEOF fi if test "$with_java" != "no"; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: will not run per-method java probing, missing byteman or java requirements" >&5 $as_echo "$as_me: WARNING: will not run per-method java probing, missing byteman or java requirements" >&2;} if false; then HAVE_JAVA_TRUE= HAVE_JAVA_FALSE='#' else HAVE_JAVA_TRUE='#' HAVE_JAVA_FALSE= fi fi # java+byteman support ENABLE_NLS="$USE_NLS" localedir="$localedir" LOCALEDIR="$localedir" # Check whether --with-extra-version was given. if test "${with_extra_version+set}" = set; then : withval=$with_extra_version; fi if test "x$with_extra_version" != "xno"; then : stap_extra_version="$with_extra_version" { $as_echo "$as_me:${as_lineno-$LINENO}: Adding extra version $stap_extra_version" >&5 $as_echo "$as_me: Adding extra version $stap_extra_version" >&6;} else stap_extra_version="" fi cat >>confdefs.h <<_ACEOF #define STAP_EXTRA_VERSION "$stap_extra_version" _ACEOF STAP_EXTRA_VERSION="$stap_extra_version" # Check whether --enable-http was given. if test "${enable_http+set}" = set; then : enableval=$enable_http; fi have_http_support=no if test "x$enable_http" = "xyes"; then : pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmicrohttpd" >&5 $as_echo_n "checking for libmicrohttpd... " >&6; } if test -n "$libmicrohttpd_CFLAGS"; then pkg_cv_libmicrohttpd_CFLAGS="$libmicrohttpd_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmicrohttpd > 0.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmicrohttpd > 0.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libmicrohttpd_CFLAGS=`$PKG_CONFIG --cflags "libmicrohttpd > 0.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libmicrohttpd_LIBS"; then pkg_cv_libmicrohttpd_LIBS="$libmicrohttpd_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmicrohttpd > 0.9.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libmicrohttpd > 0.9.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libmicrohttpd_LIBS=`$PKG_CONFIG --libs "libmicrohttpd > 0.9.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libmicrohttpd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmicrohttpd > 0.9.0" 2>&1` else libmicrohttpd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmicrohttpd > 0.9.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libmicrohttpd_PKG_ERRORS" >&5 have_libmicrohttpd=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libmicrohttpd=false else libmicrohttpd_CFLAGS=$pkg_cv_libmicrohttpd_CFLAGS libmicrohttpd_LIBS=$pkg_cv_libmicrohttpd_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libmicrohttpd=true fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid" >&5 $as_echo_n "checking for uuid... " >&6; } if test -n "$uuid_CFLAGS"; then pkg_cv_uuid_CFLAGS="$uuid_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 2.17.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 2.17.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_uuid_CFLAGS=`$PKG_CONFIG --cflags "uuid >= 2.17.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$uuid_LIBS"; then pkg_cv_uuid_LIBS="$uuid_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 2.17.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 2.17.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_uuid_LIBS=`$PKG_CONFIG --libs "uuid >= 2.17.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then uuid_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "uuid >= 2.17.0" 2>&1` else uuid_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "uuid >= 2.17.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$uuid_PKG_ERRORS" >&5 have_libuuid=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libuuid=false else uuid_CFLAGS=$pkg_cv_uuid_CFLAGS uuid_LIBS=$pkg_cv_uuid_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libuuid=true fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcurl" >&5 $as_echo_n "checking for libcurl... " >&6; } if test -n "$libcurl_CFLAGS"; then pkg_cv_libcurl_CFLAGS="$libcurl_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libcurl_CFLAGS=`$PKG_CONFIG --cflags "libcurl >= 7.19.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$libcurl_LIBS"; then pkg_cv_libcurl_LIBS="$libcurl_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_libcurl_LIBS=`$PKG_CONFIG --libs "libcurl >= 7.19.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then libcurl_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libcurl >= 7.19.7" 2>&1` else libcurl_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libcurl >= 7.19.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$libcurl_PKG_ERRORS" >&5 have_libcurl=false elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } have_libcurl=false else libcurl_CFLAGS=$pkg_cv_libcurl_CFLAGS libcurl_LIBS=$pkg_cv_libcurl_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libcurl=true fi if test "x$have_libmicrohttpd" = "xtrue" -a "x$have_libuuid" = "xtrue" -a "x$have_libcurl" = "xtrue" -a "x$have_jsonc" = "xyes" -a "x$have_nss" = "xyes" -a "x$have_openssl" = "xyes" -a "x$have_cxx0x" = "xno"; then : have_http_support=yes fi fi if test "x$have_http_support" = "xyes"; then : $as_echo "#define HAVE_HTTP_SUPPORT 1" >>confdefs.h else if test "x$enable_http" = "xyes"; then : as_fn_error $? "http service support requested but not found" "$LINENO" 5 fi fi if test "x$have_http_support" = "xyes"; then HAVE_HTTP_SUPPORT_TRUE= HAVE_HTTP_SUPPORT_FALSE='#' else HAVE_HTTP_SUPPORT_TRUE='#' HAVE_HTTP_SUPPORT_FALSE= fi if test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"; then NEED_BASE_CLIENT_CODE_TRUE= NEED_BASE_CLIENT_CODE_FALSE='#' else NEED_BASE_CLIENT_CODE_TRUE='#' NEED_BASE_CLIENT_CODE_FALSE= fi if test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"; then : $as_echo "#define NEED_BASE_CLIENT_CODE 1" >>confdefs.h fi stap_prefix=$prefix test "$stap_prefix" = NONE && stap_prefix=$ac_default_prefix cat >>confdefs.h <<_ACEOF #define STAP_PREFIX "$stap_prefix" _ACEOF STAP_PREFIX="$stap_prefix" stap_libexecdir=$libexecdir test "$stap_libexecdir" = '${exec_prefix}/libexec' && stap_libexecdir=$stap_prefix/libexec pkglibexecdir="$stap_libexecdir/$PACKAGE" ac_config_headers="$ac_config_headers config.h:config.in" ac_config_files="$ac_config_files Makefile doc/Makefile man/Makefile man/cs/Makefile doc/beginners/Makefile doc/SystemTap_Tapset_Reference/Makefile man/stap.1 man/stappaths.7 man/systemtap-service.8 man/cs/stap.1 man/cs/stappaths.7 man/cs/systemtap.8 initscript/config.systemtap initscript/config.stap-server initscript/systemtap initscript/stap-server initscript/99stap/module-setup.sh initscript/99stap/install initscript/99stap/check" subdirs="$subdirs testsuite" if test $enable_translator = "yes"; then ac_config_files="$ac_config_files run-stap" fi ac_config_files="$ac_config_files dtrace" ac_config_files="$ac_config_files stapdyn/Makefile" ac_config_files="$ac_config_files java/Makefile" ac_config_files="$ac_config_files java/stapbm" ac_config_files="$ac_config_files java/org/systemtap/byteman/helper/HelperSDT.java" ac_config_files="$ac_config_files python/Makefile" ac_config_files="$ac_config_files staprun/Makefile" ac_config_files="$ac_config_files stapbpf/Makefile" ac_config_files="$ac_config_files httpd/Makefile httpd/docker/Makefile" ac_config_files="$ac_config_files staprun/run-staprun" ac_config_files="$ac_config_files staprun/guest/stapshd" ac_config_files="$ac_config_files staprun/guest/stapsh-daemon" ac_config_files="$ac_config_files staprun/guest/stapsh@.service" ac_config_files="$ac_config_files stap-exporter/Makefile" # Setup "shadow" directory doc/beginners that has the basic directories setup for # xmlto in one directory (through directory links if necessary). # It would be nice to use AC_CONFIG_LINKS, but automake complains when # the src is a directory and not a file. ac_config_commands="$ac_config_commands doc/beginners" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_TRANSLATOR_TRUE}" && test -z "${BUILD_TRANSLATOR_FALSE}"; then as_fn_error $? "conditional \"BUILD_TRANSLATOR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_CRASHMOD_TRUE}" && test -z "${BUILD_CRASHMOD_FALSE}"; then as_fn_error $? "conditional \"BUILD_CRASHMOD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INSTALL_PREBUILT_DOCS_TRUE}" && test -z "${INSTALL_PREBUILT_DOCS_FALSE}"; then as_fn_error $? "conditional \"INSTALL_PREBUILT_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_REFDOCS_TRUE}" && test -z "${BUILD_REFDOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_REFDOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then as_fn_error $? "conditional \"HAVE_FOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_HTMLDOCS_TRUE}" && test -z "${BUILD_HTMLDOCS_FALSE}"; then as_fn_error $? "conditional \"BUILD_HTMLDOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XMLTO_STRINGPARAM_TRUE}" && test -z "${XMLTO_STRINGPARAM_FALSE}"; then as_fn_error $? "conditional \"XMLTO_STRINGPARAM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_NSS_TRUE}" && test -z "${HAVE_NSS_FALSE}"; then as_fn_error $? "conditional \"HAVE_NSS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_OPENSSL_TRUE}" && test -z "${HAVE_OPENSSL_FALSE}"; then as_fn_error $? "conditional \"HAVE_OPENSSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_SERVER_TRUE}" && test -z "${BUILD_SERVER_FALSE}"; then as_fn_error $? "conditional \"BUILD_SERVER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_AVAHI_TRUE}" && test -z "${HAVE_AVAHI_FALSE}"; then as_fn_error $? "conditional \"HAVE_AVAHI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBREADLINE_TRUE}" && test -z "${HAVE_LIBREADLINE_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBREADLINE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DYNINST_TRUE}" && test -z "${HAVE_DYNINST_FALSE}"; then as_fn_error $? "conditional \"HAVE_DYNINST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBVIRT_TRUE}" && test -z "${HAVE_LIBVIRT_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBVIRT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBXML2_TRUE}" && test -z "${HAVE_LIBXML2_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBXML2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_VIRT_TRUE}" && test -z "${BUILD_VIRT_FALSE}"; then as_fn_error $? "conditional \"BUILD_VIRT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON2_PROBES_TRUE}" && test -z "${HAVE_PYTHON2_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON2_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON3_PROBES_TRUE}" && test -z "${HAVE_PYTHON3_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON3_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PYTHON_PROBES_TRUE}" && test -z "${HAVE_PYTHON_PROBES_FALSE}"; then as_fn_error $? "conditional \"HAVE_PYTHON_PROBES\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_MONITOR_LIBS_TRUE}" && test -z "${HAVE_MONITOR_LIBS_FALSE}"; then as_fn_error $? "conditional \"HAVE_MONITOR_LIBS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_BPF_DECLS_TRUE}" && test -z "${HAVE_BPF_DECLS_FALSE}"; then as_fn_error $? "conditional \"HAVE_BPF_DECLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SELINUX_TRUE}" && test -z "${HAVE_SELINUX_FALSE}"; then as_fn_error $? "conditional \"HAVE_SELINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_JAVA_TRUE}" && test -z "${HAVE_JAVA_FALSE}"; then as_fn_error $? "conditional \"HAVE_JAVA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_HTTP_SUPPORT_TRUE}" && test -z "${HAVE_HTTP_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"HAVE_HTTP_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEED_BASE_CLIENT_CODE_TRUE}" && test -z "${NEED_BASE_CLIENT_CODE_FALSE}"; then as_fn_error $? "conditional \"NEED_BASE_CLIENT_CODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by systemtap $as_me 4.6, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ systemtap config.status 4.6 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "includes/sys/sdt-config.h") CONFIG_FILES="$CONFIG_FILES includes/sys/sdt-config.h" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/cs/Makefile") CONFIG_FILES="$CONFIG_FILES man/cs/Makefile" ;; "doc/beginners/Makefile") CONFIG_FILES="$CONFIG_FILES doc/beginners/Makefile" ;; "doc/SystemTap_Tapset_Reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/SystemTap_Tapset_Reference/Makefile" ;; "man/stap.1") CONFIG_FILES="$CONFIG_FILES man/stap.1" ;; "man/stappaths.7") CONFIG_FILES="$CONFIG_FILES man/stappaths.7" ;; "man/systemtap-service.8") CONFIG_FILES="$CONFIG_FILES man/systemtap-service.8" ;; "man/cs/stap.1") CONFIG_FILES="$CONFIG_FILES man/cs/stap.1" ;; "man/cs/stappaths.7") CONFIG_FILES="$CONFIG_FILES man/cs/stappaths.7" ;; "man/cs/systemtap.8") CONFIG_FILES="$CONFIG_FILES man/cs/systemtap.8" ;; "initscript/config.systemtap") CONFIG_FILES="$CONFIG_FILES initscript/config.systemtap" ;; "initscript/config.stap-server") CONFIG_FILES="$CONFIG_FILES initscript/config.stap-server" ;; "initscript/systemtap") CONFIG_FILES="$CONFIG_FILES initscript/systemtap" ;; "initscript/stap-server") CONFIG_FILES="$CONFIG_FILES initscript/stap-server" ;; "initscript/99stap/module-setup.sh") CONFIG_FILES="$CONFIG_FILES initscript/99stap/module-setup.sh" ;; "initscript/99stap/install") CONFIG_FILES="$CONFIG_FILES initscript/99stap/install" ;; "initscript/99stap/check") CONFIG_FILES="$CONFIG_FILES initscript/99stap/check" ;; "run-stap") CONFIG_FILES="$CONFIG_FILES run-stap" ;; "dtrace") CONFIG_FILES="$CONFIG_FILES dtrace" ;; "stapdyn/Makefile") CONFIG_FILES="$CONFIG_FILES stapdyn/Makefile" ;; "java/Makefile") CONFIG_FILES="$CONFIG_FILES java/Makefile" ;; "java/stapbm") CONFIG_FILES="$CONFIG_FILES java/stapbm" ;; "java/org/systemtap/byteman/helper/HelperSDT.java") CONFIG_FILES="$CONFIG_FILES java/org/systemtap/byteman/helper/HelperSDT.java" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; "staprun/Makefile") CONFIG_FILES="$CONFIG_FILES staprun/Makefile" ;; "stapbpf/Makefile") CONFIG_FILES="$CONFIG_FILES stapbpf/Makefile" ;; "httpd/Makefile") CONFIG_FILES="$CONFIG_FILES httpd/Makefile" ;; "httpd/docker/Makefile") CONFIG_FILES="$CONFIG_FILES httpd/docker/Makefile" ;; "staprun/run-staprun") CONFIG_FILES="$CONFIG_FILES staprun/run-staprun" ;; "staprun/guest/stapshd") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapshd" ;; "staprun/guest/stapsh-daemon") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapsh-daemon" ;; "staprun/guest/stapsh@.service") CONFIG_FILES="$CONFIG_FILES staprun/guest/stapsh@.service" ;; "stap-exporter/Makefile") CONFIG_FILES="$CONFIG_FILES stap-exporter/Makefile" ;; "doc/beginners") CONFIG_COMMANDS="$CONFIG_COMMANDS doc/beginners" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "run-stap":F) chmod +x run-stap ;; "dtrace":F) chmod +x dtrace ;; "java/stapbm":F) chmod +x java/stapbm ;; "staprun/run-staprun":F) chmod +x staprun/run-staprun ;; "staprun/guest/stapshd":F) chmod +x staprun/guest/stapshd ;; "staprun/guest/stapsh-daemon":F) chmod +x staprun/guest/stapsh-daemon ;; "doc/beginners":C) rm -f $ac_abs_top_builddir/doc/beginners/en-US $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite && mkdir -p $ac_abs_top_builddir/doc/beginners/build/en-US && ln -s $ac_abs_top_srcdir/doc/SystemTap_Beginners_Guide/en-US $ac_abs_top_builddir/doc/beginners/en-US && ln -s $ac_abs_top_srcdir/testsuite $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test "${prefix}" = "/usr/local"; then { $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 $as_echo "$as_me: " >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: For a private or temporary build of systemtap, we recommend" >&5 $as_echo "$as_me: For a private or temporary build of systemtap, we recommend" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: configuring with a prefix. For example, try" >&5 $as_echo "$as_me: configuring with a prefix. For example, try" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&5 $as_echo "$as_me: $0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: Running systemtap uninstalled, entirely out of the build tree," >&5 $as_echo "$as_me: Running systemtap uninstalled, entirely out of the build tree," >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: is not supported." >&5 $as_echo "$as_me: is not supported." >&6;} fi systemtap-4.6/configure.ac000066400000000000000000001147531414446751200157250ustar00rootroot00000000000000dnl configure.ac --- autoconf input file for systemtap dnl Process this file with autoconf to produce a configure script. AC_INIT([systemtap], 4.6, systemtap@sourceware.org, systemtap) dnl ^^^ see also NEWS, systemtap.spec, testsuite/configure.ac dnl doc/SystemTap_Beginners_Guide/en-US/Book_Info.xml dnl Get the target arch for libHelperSDT.so AC_CANONICAL_TARGET AC_PREREQ(2.63) dnl We don't maintain a ChangeLog, which makes us non-GNU -> foreign. AM_INIT_AUTOMAKE([no-dist foreign]) AM_MAINTAINER_MODE m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) AC_USE_SYSTEM_EXTENSIONS AC_PROG_MKDIR_P AC_SUBST(MKDIR_P) AC_PROG_LN_S AC_PROG_CC AC_PROG_CXX AC_PROG_CPP AM_PROG_AR AM_PROG_CC_C_O AC_PROG_RANLIB AC_OBJEXT AC_EXEEXT AC_PROG_INSTALL AC_PROG_MAKE_SET AC_SUBST(CFLAGS) AC_SUBST(CXXFLAGS) AC_SYS_LARGEFILE AC_CHECK_FUNCS(ppoll) AC_CHECK_FUNCS(openat) AM_GNU_GETTEXT(external) AM_GNU_GETTEXT_VERSION([0.19.4]) # We want the 'PYTHON' varible to be python version 2. We also want # our custom 'PYTHON3' varible to be python version 3. # # Note that the python2/python3 code was inspired by code in the # 'abrt' configure: # # # First, figure out what version of python is in the executable named # 'python'. On most systems that is python version 2, but on arch # linux that is python version 3. AC_PATH_PROG([PYTHON_UNKNOWN], [python], [no]) if test "x$PYTHON_UNKNOWN" != "xno"; then # OK, we found 'python'. What version is it? AC_CACHE_CHECK([whether $PYTHON_UNKNOWN is version 2 or 3], [ac_cv_python_unknown_version], [ac_cv_python_unknown_version=`$PYTHON_UNKNOWN -c "import sys; sys.stdout.write(sys.version[[:3]][[0]])"`]) fi # Now we'll update the _AM_PYTHON_INTERPRETER_LIST variable (which # AM_PATH_PYTHON uses) to only be version 2 versions of python. Note # that the m4_define happens when autoconf is run, but the # PLAIN_PYTHON_INTERPRETER variable expansion will happen when the # user runs configure. # # Note that for python2, we prefer an executable named 'python2' over # one just named 'python'. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x2"; then PLAIN_PYTHON_INTERPRETER=python else PLAIN_PYTHON_INTERPRETER=python2 fi m4_define([_AM_PYTHON_INTERPRETER_LIST], [python2 $PLAIN_PYTHON_INTERPRETER python2.7 python2.6]) # Now we can call AM_PATH_PYTHON to find python version 2.6+ (and # version 2 only). AM_PATH_PYTHON([2.6], [], [:]) python_basename=$(basename "$PYTHON") AC_DEFINE_UNQUOTED([PYTHON_BASENAME], "${python_basename}", [Base name of the python2 interpreter binary.]) if test "x$PYTHON" != "x:"; then AC_DEFINE([PYTHON_EXISTS], [], [The python2 interpreter binary exists.]) fi # AM_PATH_PYTHON defines 'pyexecdir'. Make sure the python and # pyexecdir variables get sent down to the subconfigure in the # testsuite directory. AS_VAR_APPEND([ac_configure_args], [" python='$PYTHON' pyexecdir='$pyexecdir'"]) # Now let's try to find python version 3. if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then AC_PATH_PROG([PYTHON3], [python]) else AC_PATH_PROGS([PYTHON3], [python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0], [:]) fi python3_basename=$(basename "$PYTHON3") AC_DEFINE_UNQUOTED([PYTHON3_BASENAME], "${python3_basename}", [Base name of the python3 interpreter binary.]) # If we found python version 3, set up the other variables for python # version 3 that AM_PATH_PYTHON sets up for python version 2. if test "x$PYTHON3" != "x:"; then AC_DEFINE([PYTHON3_EXISTS], [], [The python3 interpreter binary exists.]) AC_CACHE_CHECK([for python3 version], [ac_cv_python3_version], [ac_cv_python3_version=`$PYTHON3 -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) AC_SUBST([PYTHON3_VERSION], [$ac_cv_python3_version]) AC_SUBST([PYTHON3_PREFIX], ['${prefix}']) AC_SUBST([PYTHON3_EXEC_PREFIX], ['${exec_prefix}']) AC_CACHE_CHECK([for python3 platform], [ac_cv_python3_platform], [ac_cv_python3_platform=`$PYTHON3 -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON3_PLATFORM], [$ac_cv_python3_platform]) AC_CACHE_CHECK([for python3 script directory], [ac_cv_python3_dir], [ac_cv_python3_dir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(0,0,prefix='$PYTHON3_PREFIX'))"`]) AC_SUBST([python3dir], [$ac_cv_python3_dir]) AC_CACHE_CHECK([for python3 extension module directory], [ac_cv_py3execdir], [ac_cv_py3execdir=`$PYTHON3 -c "import distutils.sysconfig; print(distutils.sysconfig.get_python_lib(1,0,prefix='$PYTHON3_EXEC_PREFIX'))"`]) AC_SUBST([py3execdir], [$ac_cv_py3execdir]) fi # Make sure the python3 and py3execdir variables get sent down to # the subconfigure in the testsuite directory. AS_VAR_APPEND([ac_configure_args], [" python3='$PYTHON3' py3execdir='$ac_cv_py3execdir'"]) dnl Handle the prologues option. dnl dnl If the user didn't specify --enable-prologues/--disable-prologues dnl and the x86 system has a version of gcc less than version 4, dnl automatically enable prologues. if test "${enable_prologues+set}" != set; then AC_MSG_CHECKING([to see if prologue searching should be the default]) if { echo '#if __i386__ == 1 && __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_prologues=yes AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi AC_ARG_ENABLE([prologues], AS_HELP_STRING([--enable-prologues], [make -P prologue-searching default]), [ if test "$enable_prologues" = yes; then AC_DEFINE([ENABLE_PROLOGUES],[],[make -P prologue-searching default]) fi]) dnl Handle the disable-sdt-probes option. dnl dnl Default to --disable-sdt-probes if --enable-sdt-probes/--disable-prologues dnl was not specified and the gcc version is less than version 4, if test "${enable_sdt_probes+set}" != set; then AC_MSG_CHECKING([to see if sdt probes should be the default]) if { echo '#if __GNUC__ < 4' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then enable_sdt_probes=no AC_MSG_RESULT([no]) else AC_MSG_RESULT([yes]) fi fi AC_ARG_ENABLE([sdt-probes], [AS_HELP_STRING([--disable-sdt-probes], [disable process.mark probes in stap, staprun, stapio])]) AS_IF([test "x$enable_sdt_probes" != xno], [ AC_DEFINE([ENABLE_SDT_PROBES], [1], [Define to 1 to enable process.mark probes in stap, staprun, stapio.]) ]) dnl We're now requiring *some* C++11, using RHEL6 (gcc 4.4.7) as a baseline. dnl This is too strict about __cplusplus for gcc < 4.7, so we have a manual fallback. AX_CXX_COMPILE_STDCXX(11, noext, optional) have_cxx0x="no" AS_IF([test "x$HAVE_CXX11" != x1],[ AC_LANG_PUSH(C++) AX_CHECK_COMPILE_FLAG([-std=c++0x], [ AC_MSG_NOTICE([Compiling with -std=c++0x]) CXX="$CXX -std=c++0x" HAVE_CXX11=1 have_cxx0x="yes" ], [ AC_MSG_ERROR([A compiler with C++11 support is required.]) ]) AC_LANG_POP(C++) ]) dnl Some versions of dyninst (10.1) need -faligned-new dnl If -faligned-new available, pass it in AC_LANG_PUSH(C++) AX_CHECK_COMPILE_FLAG([-faligned-new], ALIGNEDNEW="-faligned-new", ALIGNEDNEW="") AC_LANG_POP(C++) AC_SUBST(ALIGNEDNEW) dnl Carry forward some empty PIE*FLAGS so we don't have to modify dnl all the Makefile.am's just now. AC_SUBST(PIELDFLAGS) AC_SUBST(PIECFLAGS) AC_SUBST(PIECXXFLAGS) dnl Handle optional debuginfod support. If not specified by the user, dnl use it if present. AC_ARG_WITH([debuginfod], AC_HELP_STRING([--with-debuginfod], [Enable debuginfo lookups with debuginfod (auto/yes/no)]), [], [with_debuginfod=auto]) AC_MSG_CHECKING([whether to use debuginfod]) AC_MSG_RESULT([$with_debuginfod]) if test "x$with_debuginfod" != xno; then PKG_CHECK_MODULES([debuginfod], [libdebuginfod >= 0.179], [AC_DEFINE([HAVE_LIBDEBUGINFOD], [1], [Define to 1 if debuginfod is enabled.])], [if test "x$with_debuginfod" = xyes; then AC_MSG_ERROR(["--with-debuginfod was given, but libdebuginfod is missing or unusable."]) else AC_MSG_WARN([libdebuginfod is missing or unusable; some features may be unavailable.]) fi]) else AC_MSG_WARN([debuginfod support disabled; some features may be unavailable.]) fi dnl Handle optional sqlite support. If enabled/disabled by the user, dnl do the right thing. If not specified by the user, use it if dnl present. AC_ARG_ENABLE([sqlite], AS_HELP_STRING([--enable-sqlite], [build with sqlite support]), [], dnl ACTION-IF-GIVEN [enable_sqlite=check]) dnl ACTION-IF-NOT-GIVEN sqlite3_LIBS= AS_IF([test "x$enable_sqlite" != xno], [PKG_CHECK_MODULES([sqlite3], [sqlite3 > 3.7], [AC_DEFINE([HAVE_LIBSQLITE3], [1], [Define to 1 if you have the 'sqlite3' library (-lsqlite3).])], [if test "x$enable_sqlite" != xcheck; then AC_MSG_FAILURE([--enable-sqlite was given, but test for sqlite > 3.7 failed]) fi])]) dnl Handle the option to only build runtime AC_ARG_ENABLE([translator], AS_HELP_STRING([--disable-translator], [build only runtime utilities]), [], [enable_translator="yes"]) AM_CONDITIONAL([BUILD_TRANSLATOR], [test "$enable_translator" = "yes"]) dnl Handle the option to build the crash extension AC_ARG_ENABLE([crash], AS_HELP_STRING([--enable-crash@<:@=DIRECTORY@:>@], [enable crash extension (default is disabled). Optional DIRECTORY is the path to the crash header file (needed if installed in a non-standard location).]), [if test "$enable_crash" != "no"; then dnl Handle custom install dir (if needed) save_CPPFLAGS="$CPPFLAGS" if test "$enable_crash" != "yes"; then staplog_CPPFLAGS=-I$enable_crash CPPFLAGS="${staplog_CPPFLAGS} $CPPFLAGS" AC_SUBST([staplog_CPPFLAGS]) fi AC_CHECK_HEADERS([crash/defs.h], [], [AC_MSG_ERROR([cannot find required crash header (crash-devel may need to be installed)])], [ #define NR_CPUS 256 ]) CPPFLAGS="$save_CPPFLAGS" fi], [enable_crash="no"]) AM_CONDITIONAL([BUILD_CRASHMOD], [test "$enable_crash" != "no"]) dnl Handle the option to build the documentation dnl --enable-docs=check checks for LaTeX et al. and decides accordingly building_docs="no" dnl Handle the option to install the prebuilt PDFs and man pages. dnl Automatically turned on if --enable-docs is on or if --enable-docs=prebuilt. installing_prebuilt_docs="yes" AC_ARG_ENABLE([docs], AS_HELP_STRING([--enable-docs], [enable building documentation (default to only installing prebuilt docs).]), [enable_docs=$enableval], [enable_docs="prebuilt"]) AC_CHECK_PROG(have_latex, latex, yes, no) AC_CHECK_PROG(have_dvips, dvips, yes, no) AC_CHECK_PROG(have_ps2pdf, ps2pdf, yes, no) if test "x${have_latex}${have_dvips}${have_ps2pdf}" != "xyesyesyes"; then if test "$enable_docs" = "yes"; then AC_MSG_ERROR([cannot find all tools for building documentation]) fi if test "$enable_docs" = "check"; then AC_MSG_WARN([will not build documentation, cannot find all tools]) fi fi if test "$enable_docs" = "prebuilt"; then AC_MSG_NOTICE([will only install prebuilt documentation]) fi if test "x${have_latex}${have_dvips}${have_ps2pdf}" = "xyesyesyes" -a "$enable_docs" != "no" -a "$enable_docs" != "prebuilt"; then building_docs="yes" installing_prebuilt_docs="yes" fi if test "$enable_docs" = "no"; then installing_prebuilt_docs="no" fi AM_CONDITIONAL([BUILD_DOCS], [test "$building_docs" = "yes"]) AM_CONDITIONAL([INSTALL_PREBUILT_DOCS], [test "$installing_prebuilt_docs" = "yes"]) dnl Handle the option to build the reference documentation building_refdocs="no" AC_ARG_ENABLE([refdocs], AS_HELP_STRING([--enable-refdocs], [enable building reference documentation (default on if other documentation built).]), [enable_refdocs=$enableval], [enable_refdocs="check"]) if test "$building_docs" = "no" -a "$enable_refdocs" = "yes" ; then AC_MSG_ERROR([must use --enable-docs with --enable-refdocs]) fi if test "$enable_refdocs" != "no" -a "${building_docs}" = "yes"; then building_refdocs="yes" fi AM_CONDITIONAL([BUILD_REFDOCS], [test "$building_refdocs" = "yes"]) AC_CHECK_PROG(have_xmlto, xmlto, yes, no) AC_CHECK_PROG(have_fop, fop, yes, no) if test "x${have_fop}" = "xyes"; then # Due to rhbz505364 / 830266, we must actually test-run fop, not just # hope that it works. AC_MSG_CHECKING([to see if xmlto --with-fop actually works]) if xmlto --with-fop pdf ${srcdir}/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([it's dead, Jim]) have_fop="broken" fi rm -f dummy-tapsets.pdf fi AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = "yes"]) AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = "yes"]) dnl Handle the option to build the html documentation building_htmldocs="no" AC_ARG_ENABLE([htmldocs], AS_HELP_STRING([--enable-htmldocs], [enable building html documentation (default off).]), [building_htmldocs=$enableval], [building_htmldocs="no"]) if test "$have_xmlto" = "no" -a "$building_htmldocs" = "yes"; then AC_MSG_ERROR([xmlto required for building html documentation]) fi AM_CONDITIONAL([BUILD_HTMLDOCS], [test "$building_htmldocs" = "yes"]) dnl There is a strange bug in older versions of xmlto when generating pdf. dnl https://bugzilla.redhat.com/show_bug.cgi?id=526273 dnl So make sure to have a chapter title starting with L plus an refentry. dnl This will make sure the xmlto pdf support test fails on buggy versions. cat > conftest.xml << 'EOF' foo Logging Tapset log logging Description baz EOF if test "x${have_xmlto}" = "xyes"; then AC_MSG_CHECKING([for xmlto --stringparam support]) xmlto --stringparam man.authors.section.enabled=0 html-nochunks conftest.xml >/dev/null 2>&1 if test $? = 0; then have_xmlto_stringparam="yes" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi rm -f conftest.html fi AM_CONDITIONAL([XMLTO_STRINGPARAM], [test "$have_xmlto_stringparam" = "yes"]) rm -f conftest.xml dnl See if we have the nss/nspr headers and libraries AC_ARG_WITH([nss], AS_HELP_STRING([--without-nss], [Do not use NSS even if present])) AS_IF([test "x$with_nss" != "xno"], [ PKG_CHECK_MODULES([nss], [nss >= 3], [have_nss=yes AC_DEFINE([HAVE_NSS], [1], [Define to 1 if you have the nss libraries.]) ], [have_nss=no]) ], [have_nss=no]) AM_CONDITIONAL([HAVE_NSS], [test "${have_nss}" = "yes"]) dnl See if we have the openssl headers and libraries AC_ARG_WITH([openssl], AS_HELP_STRING([--without-openssl], [Do not use OPENSSL even if present])) AS_IF([test "x$with_openssl" != "xno"], [ PKG_CHECK_MODULES([openssl], [openssl], [have_openssl=yes AC_DEFINE([HAVE_OPENSSL], [1], [Define to 1 if you have the openssl libraries.]) ], [have_openssl=no]) ], [have_openssl=no]) AM_CONDITIONAL([HAVE_OPENSSL], [test "${have_openssl}" = "yes"]) dnl Handle dracut directory configuration. Note we hard-code /usr by default, dnl instead of $prefix, because dracut is a system service that doesn't listen dnl at relocatable directories. AC_ARG_WITH([dracutstap], AS_HELP_STRING([--with-dracutstap=DIR], [Install dracut module files in DIR])) AS_IF([test "x$with_dracutstap" != "x"],[dracutstap="$with_dracutstap"], [dracutstap=/usr/lib/dracut/modules.d/99stap]) AC_MSG_NOTICE([using dracut module directory $dracutstap]) AC_SUBST(dracutstap) dnl PR20850 Fix the boot time probing feature for fedora too. Typical rhel dnl location is /sbin, typical fedora location is /usr/bin. AC_ARG_WITH([dracutbindir], AS_HELP_STRING([--with-dracutbindir=DIR], [Use the dracut binary located in DIR])) AS_IF([test "x$with_dracutbindir" != "x"],[dracutbindir="$with_dracutbindir"], [dracutbindir=/sbin]) AC_MSG_NOTICE([using dracut binary $dracutbindir]) AC_SUBST(dracutbindir) dnl Handle the option to build the compile server. AC_ARG_ENABLE([server], AS_HELP_STRING([--enable-server], [enable building of stap-server (default on if nss etc. found).]), [enable_server=$enableval], [enable_server="check"]) if test "$enable_server" != "no"; then dnl See if we have enough libraries and tools to build the compile server if test "x${have_nss}" != "xyes"; then AC_MSG_WARN([will not build systemtap compile server, cannot find nss headers]) fi fi AM_CONDITIONAL([BUILD_SERVER], [test "${have_nss}" = "yes" -a "$enable_server" != "no"]) if test "${have_nss}" != "yes"; then AC_MSG_WARN([compile-server client functionality will be disabled, cannot find nss development files]) fi dnl See if we have the avahi libraries and headers AC_ARG_WITH([avahi], AS_HELP_STRING([--without-avahi], [Do not use Avahi even if present])) AS_IF([test "x$with_avahi" != "xno"], [ PKG_CHECK_MODULES([avahi], [avahi-client], [have_avahi=yes AC_DEFINE([HAVE_AVAHI], [1], [Define to 1 if you have the avahi libraries.]) ], [have_avahi=no]) ], [have_avahi=no]) AM_CONDITIONAL([HAVE_AVAHI], [test "${have_avahi}" = "yes"]) if test "${have_avahi}" != "yes"; then AC_MSG_WARN([some compile-server functionality will be restricted, cannot find avahi development files]) fi dnl Look for librpm. AC_ARG_WITH([rpm], [AS_HELP_STRING([--with-rpm], [query rpm database for missing debuginfos])], [], [with_rpm="auto"]) if test "$with_rpm" != "no"; then AC_CHECK_LIB(rpm, rpmtsInitIterator, [ AC_DEFINE([HAVE_LIBRPM],[1],[have librpm]) stap_LIBS="$stap_LIBS -lc -lrpm" have_librpm="yes"], [have_librpm="no"]) dnl explicit -lrpmdb is a separate requirement on some older librpms AC_CHECK_LIB(rpmdb, rpmdbNextIterator, [ stap_LIBS="$stap_LIBS -lrpmdb"]) AC_CHECK_LIB(rpmio, rpmFreeCrypto, [ AC_DEFINE([HAVE_LIBRPMIO],[1],[have librpmio]) stap_LIBS="$stap_LIBS -lc -lrpmio" have_librpmio="yes"], [have_librpmio="no"]) if test "x$have_librpm" != "xyes" -a "$with_rpm" = "yes"; then AC_MSG_ERROR([cannot find librpm]) fi if test "x$have_librpmio" != "xyes" -a "$with_rpm" = "yes"; then AC_MSG_WARN([cannot find librpmio]) fi fi dnl Look for readline. dnl dnl First save the orignal value of LIBS. LIBS_no_readline=$LIBS dnl Check how for readline presence and how to link with it. On some dnl systems you need to add a termcap compatible library. have_libreadline="no" AC_MSG_CHECKING([how to link readline libs]) for libtermcap in "" tinfo ncursesw ncurses curses termcap; do if test -z "$libtermcap"; then READLINE_LIBS="-lreadline" else READLINE_LIBS="-lreadline -l$libtermcap" fi LIBS="$READLINE_LIBS $LIBS_no_readline" AC_LINK_IFELSE( [AC_LANG_CALL([],[readline])], [have_libreadline="yes"]) if test "$have_libreadline" = "yes"; then break fi done if test "$have_libreadline" = "no"; then AC_MSG_RESULT([none]) READLINE_LIBS="" else AC_MSG_RESULT([$READLINE_LIBS]) AC_DEFINE(HAVE_LIBREADLINE, [1], [Define if you have the readline library (-lreadline).]) fi AC_SUBST([READLINE_LIBS]) AM_CONDITIONAL([HAVE_LIBREADLINE], [test "$have_libreadline" = "yes"]) dnl End of readline checks: restore LIBS LIBS=$LIBS_no_readline dnl Allow user to choose python3 for /usr/bin/dtrace AC_ARG_WITH([python3], AS_HELP_STRING([--with-python3],[prefer python version 3]), [], [with_python3="auto"]) AS_IF([test "x$with_python3" = "xyes"], [AS_IF([test "x$PYTHON3" = "x:"], [AC_MSG_ERROR([python version 3 is required])], [AC_SUBST(preferred_python,[$PYTHON3])])], [test "x$with_python3" = "xno"], [AS_IF([test "x$PYTHON" = "x:"], [AC_MSG_ERROR([python version 2 is required])], [AC_SUBST(preferred_python,[$PYTHON])])], [test "x$PYTHON3" != "x:"], [AC_SUBST(preferred_python,[$PYTHON3])], [test "x$PYTHON" != "x:"], [AC_SUBST(preferred_python,[$PYTHON])], [AC_MSG_ERROR([neither python version 2 nor 3 found])]) if test $enable_translator = yes; then # Need libdwfl-capable recent elfutils http://elfutils.org/ # On modern debian/ubuntu and modern elfutils, libebl has been # merged into libdw # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=457543 save_LIBS="$LIBS" AC_CHECK_LIB(ebl, ebl_strtabinit,[ebl_LIBS=-lebl],[ebl_LIBS=]) LIBS="$save_LIBS" save_LIBS="$LIBS" AC_CHECK_LIB(dw, dwfl_module_getsym,[],[ AC_MSG_ERROR([missing elfutils development headers/libraries (install elfutils-devel, libebl-dev, libdw-dev and/or libebl-devel)])], [-Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf]) AC_CHECK_LIB(dw, dwarf_next_unit,[],[ AC_MSG_ERROR([elfutils, libdw too old, need 0.148+])], [-Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf]) stap_LIBS="$stap_LIBS -Wl,--start-group -ldw $ebl_LIBS -Wl,--end-group -lelf" LIBS="$save_LIBS" fi AC_SUBST(stap_LIBS) AC_MSG_NOTICE([stap will link $stap_LIBS]) # staprun has more modest libelf needs save_LIBS="$LIBS" dnl this will only succeed with elfutils 0.142+ AC_CHECK_LIB(elf,elf_getshdrstrndx,[],[ AC_MSG_FAILURE([libelf too old, need 0.142+])]) staprun_LIBS="$staprun_LIBS -lelf" stapbpf_LIBS="$stapbpf_LIBS -lelf" LIBS="$save_LIBS" AC_SUBST(staprun_LIBS) AC_SUBST(stapbpf_LIBS) AC_MSG_NOTICE([staprun will link $staprun_LIBS]) AC_MSG_NOTICE([stapbpf will link $stapbpf_LIBS]) # Before PR4037, we used to arrange to pass CFLAGS+=-m64 for a staprun # being compiled on 32-bit userspace but running against 64-bit kernels. # This is no longer necessary. AC_LANG_PUSH(C++) # Use boost::string_ref if available AC_CHECK_HEADERS([boost/utility/string_ref.hpp]) # add boost_system bits for stapdyn with dyninst 10+ saved_LIBS="$LIBS" LIBS="-lboost_system $LIBS" AC_MSG_CHECKING([need for -lboost_system library]) AC_LINK_IFELSE([AC_LANG_SOURCE([ #include int main() { boost::system::error_condition e(); } ])],[AC_MSG_RESULT([yup]) BOOST_SYSTEM_LIB="-lboost_system" ],[AC_MSG_RESULT([nope]) BOOST_SYSTEM_LIB="" ]) LIBS="$saved_LIBS" AC_SUBST(BOOST_SYSTEM_LIB) AC_LANG_POP(C++) # Check for Dyninst headers and libraries AC_ARG_WITH([dyninst], AS_HELP_STRING([--with-dyninst=DIRECTORY], [find dyninst headers/libraries in DIRECTORY])) case "$with_dyninst" in no) ;; ''|yes) # Try a simple-minded distro search DYNINST_CXXFLAGS="-I/usr/include/dyninst" DYNINST_LDFLAGS="-L/usr/lib64/dyninst -L/usr/lib/dyninst" # XXX both lib paths!?! # Add Dyninst libraries only if they are available if test -d "/usr/include/dyninst"; then save_LIBS="$LIBS" AC_CHECK_LIB(tbb, TBB_runtime_interface_version, [tbb_LIBS=-ltbb],[tbb_LIBS=]) LIBS="$save_LIBS" DYNINST_LIBS="-lparseAPI -lsymtabAPI -linstructionAPI $tbb_LIBS -lcommon" fi ;; *) # Use paths in the user-specified prefix DYNINST_CXXFLAGS="-I$with_dyninst/include" DYNINST_LDFLAGS="-L$with_dyninst/lib/" # XXX need lib64 too? # Will assume Dyninst libraries are available as the path is specified save_LIBS="$LIBS" AC_CHECK_LIB(tbb, TBB_runtime_interface_version, [tbb_LIBS=-ltbb],[tbb_LIBS=]) LIBS="$save_LIBS" DYNINST_LIBS="-lparseAPI -lsymtabAPI -linstructionAPI $tbb_LIBS -lcommon" ;; esac if test "$with_dyninst" != "no"; then AC_LANG_PUSH(C++) old_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $DYNINST_CXXFLAGS" AC_MSG_NOTICE([checking dyninst support]) AC_CHECK_HEADERS([BPatch_object.h], [ AC_SUBST(DYNINST_CXXFLAGS) AC_SUBST(DYNINST_LDFLAGS) AC_SUBST(DYNINST_LIBS) AC_DEFINE([HAVE_DYNINST],[1],[Define to 1 if Dyninst is enabled]) have_dyninst=yes AC_MSG_NOTICE([dyninst support available])]) if test -n "$with_dyninst" -a "$have_dyninst" != "yes"; then AC_MSG_ERROR([Dyninst does not appear to be usable]) fi CPPFLAGS="$old_CPPFLAGS" AC_LANG_POP(C++) fi AM_CONDITIONAL([HAVE_DYNINST], [test "${have_dyninst}" = "yes"]) dnl Check for the libvirt and libxml2 devel packages AC_ARG_ENABLE([virt], AS_HELP_STRING([--enable-virt], [enable building of stapvirt support (default on if libvirt etc. found).]), [enable_virt=$enableval], [enable_virt="check"]) dnl We require libvirt >= 1.0.2 because stapvirt relies on the dnl virDomainOpenChannel function, which was implemented in 1.0.2. AC_ARG_ENABLE([libvirt], AS_HELP_STRING([--disable-libvirt], [Do not use libvirt even if present])) if test "$enable_libvirt" != no; then PKG_CHECK_MODULES([libvirt], [libvirt >= 1.0.2], [ have_libvirt=yes AC_DEFINE([HAVE_LIBVIRT],[1],[Define to 1 if libvirt development libraries are installed]) ], [have_libvirt=no]) fi AM_CONDITIONAL([HAVE_LIBVIRT], [test "${have_libvirt}" = "yes"]) PKG_CHECK_MODULES([libxml2], [libxml-2.0], [ have_libxml2=yes AC_DEFINE([HAVE_LIBXML2],[1],[Define to 1 if libxml2 development libraries are installed]) ], [have_libxml2=no]) AM_CONDITIONAL([HAVE_LIBXML2], [test "${have_libxml2}" = "yes"]) if test "$enable_virt" != "no"; then dnl See if we have enough libraries and tools to build the virt server if test "x${have_libvirt}" != "xyes"; then AC_MSG_WARN([will not build systemtap virt support, cannot find libvirt headers]) fi if test "x${have_libxml2}" != "xyes"; then AC_MSG_WARN([will not build systemtap virt support, cannot find xml2 headers]) fi fi AM_CONDITIONAL([BUILD_VIRT], [test "${have_libvirt}" = "yes" -a "${have_libxml2}" = "yes" -a "$enable_virt" != "no"]) dnl Handle the option to build python2 probe support AC_ARG_WITH([python2-probes], AS_HELP_STRING([--without-python2-probes], [Disable building python version 2 probe support, even if it is available])) have_python2_support=no AS_IF([test "x$with_python2_probes" != "xno"], [dnl First, check to make sure we have the 'python-config' script. AS_IF([test "x$PYTHON" != "x:"], [AC_PATH_PROGS([PYTHON_CONFIG], [${python_basename}-config python2-config python-config])]) AS_IF([test "x$PYTHON_CONFIG" != "x"], [dnl Use the 'python-config' script to find the python dnl include directories. PYTHON_CPPFLAGS=`$PYTHON_CONFIG --includes 2> /dev/null` AC_SUBST([PYTHON_CPPFLAGS], [$PYTHON_CPPFLAGS]) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON_CPPFLAGS $CPPFLAGS" dnl Now make sure we can find the python 2 Python.h file. We dnl need to clear the cached result, since this might be a dnl cached result from the python 3 header file (since they dnl share the same name). AS_UNSET([ac_cv_header_Python_h]) AC_CHECK_HEADERS([Python.h], [have_python2_support=yes]) CPPFLAGS="$save_CPPFLAGS"])]) AS_IF([test "x$have_python2_support" = "xyes"], [AC_DEFINE([HAVE_PYTHON2_PROBES], [1], [Define to 1 to enable python version 2 probe support in systemtap.])], [AS_IF([test "x$with_python2_probes" = "xyes"], [AC_MSG_ERROR([python version 2 probe support requested but not found])]) ]) AM_CONDITIONAL([HAVE_PYTHON2_PROBES], [test "x$have_python2_support" = "xyes"]) dnl Handle the option to build python3 probe support AC_ARG_WITH([python3-probes], AS_HELP_STRING([--without-python3-probes], [Disable building python version 3 probe support, even if it is available])) have_python3_support=no AS_IF([test "x$with_python3_probes" != "xno"], [dnl First, check to make sure we have the 'python3-config' script. AS_IF([test "x$PYTHON3" != "x:" ], [AC_PATH_PROG([PYTHON3_CONFIG], [${python3_basename}-config])]) AS_IF([test "x$PYTHON3_CONFIG" != "x"], [dnl Use the 'python3-config' script to find the python dnl include directories. PYTHON3_CPPFLAGS=`$PYTHON3_CONFIG --includes 2> /dev/null` AC_SUBST([PYTHON3_CPPFLAGS], [$PYTHON3_CPPFLAGS]) save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$PYTHON3_CPPFLAGS $CPPFLAGS" dnl Now make sure we can find the python 3 Python.h dnl file. However, we've got a problem. AC_CHECK_HEADERS dnl was called above for the python 2 version of dnl Python.h. But, autoconf doesn't really know the dnl difference between the two files, since they both have dnl the same name. So, we'll unset the cache variable. AS_UNSET([ac_cv_header_Python_h]) AC_CHECK_HEADERS([Python.h], [have_python3_support=yes]) CPPFLAGS="$save_CPPFLAGS"])]) AS_IF([test "x$have_python3_support" = "xyes"], [AC_DEFINE([HAVE_PYTHON3_PROBES], [1], [Define to 1 to enable python version 3 probe support in systemtap.])], [AS_IF([test "x$with_python3_probes" = "xyes"], [AC_MSG_ERROR([python version 3 probe support requested but not found])]) ]) AM_CONDITIONAL([HAVE_PYTHON3_PROBES], [test "x$have_python3_support" = "xyes"]) dnl We want either (or both) python probe support. AM_CONDITIONAL([HAVE_PYTHON_PROBES], [test "x$have_python2_support" = "xyes" -o "x$have_python3_support" = "xyes"]) AC_ARG_ENABLE([monitor], AS_HELP_STRING([--disable-monitor],[Disable monitor])) if test "$enable_monitor" != "no"; then dnl Check for presence of json-c and ncurses for use in monitor mode PKG_CHECK_MODULES([jsonc], [json-c >= 0.11], [have_jsonc=yes], [have_jsonc=no]) PKG_CHECK_MODULES([ncurses], [ncurses], [have_ncurses=yes], [have_ncurses=no]) if test "${have_jsonc}" = "yes" -a "${have_ncurses}" = yes; then AC_DEFINE([HAVE_MONITOR_LIBS],[1],[Define to 1 if json-c and ncurses libraries are installed]) fi fi AM_CONDITIONAL([HAVE_MONITOR_LIBS], [test "${have_jsonc}" = "yes" -a "${have_ncurses}" = "yes" -a "$enable_monitor" != "no"]) AC_CACHE_CHECK([for assembler .section "?" flags support], stap_cv_sectionq, [ old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wa,--fatal-warnings" AC_COMPILE_IFELSE([AC_LANG_SOURCE([asm(".section .note.foo,\"?\",\"note\"\n" ".byte 1, 2, 3\n" ".previous\n" ".section .text,\"axG\",\"progbits\",foogroup,comdat\n" ".byte 1\n" ".pushsection .note.foo,\"?\",\"note\"\n" ".byte 4, 5, 6\n" ".popsection\n" ".byte 2\n");])], stap_cv_sectionq=yes, stap_cv_sectionq=no) CFLAGS="$old_CFLAGS"]) AC_SUBST(support_section_question) support_section_question=0 if test $stap_cv_sectionq = yes; then support_section_question=1 fi AC_ARG_WITH([bpf], AS_HELP_STRING([--without-bpf],[Do not try to build BPF components])) dnl Allow --without-bpf to disable this autodetection, as some kernels dnl have some headers but missing some decls like __NR_bpf. Too hard dnl to detect all the prereqs here. AS_IF([test "x$with_bpf" != "xno"], [ AC_CHECK_DECLS([BPF_PROG_TYPE_PERF_EVENT], [AC_DEFINE([HAVE_BPF_DECLS], [1], [Define to 1 if you have the necessary declarations in bpf.h])], [], [#include ]) ]) AM_CONDITIONAL(HAVE_BPF_DECLS, [test "x$ac_cv_have_decl_BPF_PROG_TYPE_PERF_EVENT" = "xyes"]) AC_CONFIG_FILES([includes/sys/sdt-config.h po/Makefile.in]) dnl determine whether BPF raw tracepoints are available AC_CHECK_DECLS([BPF_PROG_TYPE_RAW_TRACEPOINT], [AC_DEFINE([HAVE_BPF_PROG_TYPE_RAW_TRACEPOINT], [1], [Define to 1 if you have the necessary declarations in bpf.h])], [], [#include ]) dnl Optional libselinux support allows stapdyn to check dnl for booleans that would prevent Dyninst from working. AC_ARG_WITH([selinux], AS_HELP_STRING([--without-selinux], [Do not use libselinux even if present])) AS_IF([test "x$with_selinux" != "xno"], [ PKG_CHECK_MODULES([selinux], [libselinux], [have_selinux=yes AC_DEFINE([HAVE_SELINUX], [1], [Define to 1 if you have the SELinux libraries.]) ], [have_selinux=no]) ], [have_selinux=no]) AM_CONDITIONAL([HAVE_SELINUX], [test "${have_selinux}" = "yes"]) dnl Used in monitor mode. Only available on kernel versions >= 2.6.35 AC_CHECK_DECL([F_SETPIPE_SZ], [AC_DEFINE(HAVE_F_SETPIPE_SZ,[1], Define to 1 if F_SETPIPE_SZ is available.)], [], [#include ]) dnl Handle java+byteman support AC_CHECK_PROG(have_javac, javac, yes, no) AC_CHECK_PROG(have_jar, jar, yes, no) if test "$have_javac" != no -a "$have_jar" != no; then echo java found, will try to configure Byteman support AC_ARG_WITH([java], [AS_HELP_STRING([--with-java=DIRECTORY], [Specify JDK directory to compile libHelperSDT.so against (default is /usr/lib/jvm/java)])], [], [with_java=/usr/lib/jvm/java]) dnl don't use AC_CHECK_FILE here, as that blocks cross-compiling if test ! -d "$with_java"; then with_java=no fi AC_SUBST(JAVADIR, "${with_java}") # always needed to compile if test "$with_java" != "no"; then AC_DEFINE_UNQUOTED(HAVE_JAVA, "1", [Flag indicating that libHelperSDT.so is available (can be found in PKGLIBDIR)]) fi AM_CONDITIONAL([HAVE_JAVA], [test "$with_java" != "no"]) else AC_MSG_WARN([will not run per-method java probing, missing byteman or java requirements]) AM_CONDITIONAL([HAVE_JAVA],false) fi # java+byteman support AC_SUBST(ENABLE_NLS, "$USE_NLS") AC_SUBST(localedir, "$localedir") AC_SUBST(LOCALEDIR, "$localedir") AC_ARG_WITH([extra-version], AS_HELP_STRING([--with-extra-version=STRING], [Add STRING to stap -V version])) AS_IF([test "x$with_extra_version" != "xno"], [ stap_extra_version="$with_extra_version" AC_MSG_NOTICE([Adding extra version $stap_extra_version])], [ stap_extra_version=""]) AC_DEFINE_UNQUOTED(STAP_EXTRA_VERSION, "$stap_extra_version", [extra stap version code]) AC_SUBST(STAP_EXTRA_VERSION, "$stap_extra_version") dnl Handle the option to build httpd web compilation service AC_ARG_ENABLE([http], AS_HELP_STRING([--enable-http], [Enable building http web compilation service, if possible])) have_http_support=no dnl (default off) AS_IF([test "x$enable_http" = "xyes"], [dnl Do we have the microhttpd library? PKG_CHECK_MODULES([libmicrohttpd], [libmicrohttpd > 0.9.0], [have_libmicrohttpd=true], [have_libmicrohttpd=false]) dnl Do we have the uuid library? PKG_CHECK_MODULES([uuid], [uuid >= 2.17.0], [have_libuuid=true], [have_libuuid=false]) dnl Do we have the curl library? PKG_CHECK_MODULES([libcurl], [libcurl >= 7.19.7], [have_libcurl=true], [have_libcurl=false]) dnl If we have all of the libraries, the json-c and nss libraries, dnl and full C++11 support, we could build the httpd web dnl compilation service. AS_IF([test "x$have_libmicrohttpd" = "xtrue" -a "x$have_libuuid" = "xtrue" -a "x$have_libcurl" = "xtrue" -a "x$have_jsonc" = "xyes" -a "x$have_nss" = "xyes" -a "x$have_openssl" = "xyes" -a "x$have_cxx0x" = "xno"], [have_http_support=yes])]) AS_IF([test "x$have_http_support" = "xyes"], [AC_DEFINE([HAVE_HTTP_SUPPORT], [1], [Define to 1 to enable http web service support in systemtap.])], [AS_IF([test "x$enable_http" = "xyes"], [AC_MSG_ERROR([http service support requested but not found])]) ]) AM_CONDITIONAL([HAVE_HTTP_SUPPORT], [test "x$have_http_support" = "xyes"]) dnl NEED_BASE_CLIENT_CODE is defined when we have either HAVE_NSS dnl or HAVE_HTTP_SUPPORT. AM_CONDITIONAL([NEED_BASE_CLIENT_CODE], [test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"]) AS_IF([test "x$have_http_support" = "xyes" -o "x$have_nss" = "xyes"], [ AC_DEFINE([NEED_BASE_CLIENT_CODE], [1], [Define to 1 if the base client code is needed.]) ]) dnl This is here mainly to make sure that configure --prefix=... changes dnl the config.h files so files depending on it are recompiled dnl prefix is passed through indirectly in the Makefile.am AM_CPPFLAGS. dnl Formerly: Don't use this directly (when not given it is set to NONE). dnl Currently: inline autoconf's later defaulting stap_prefix=$prefix test "$stap_prefix" = NONE && stap_prefix=$ac_default_prefix AC_DEFINE_UNQUOTED(STAP_PREFIX, "$stap_prefix", [configure prefix location]) AC_SUBST(STAP_PREFIX, "$stap_prefix") dnl compute a fully expanded $pkglibexecdir for substitution here and there stap_libexecdir=$libexecdir test "$stap_libexecdir" = '${exec_prefix}/libexec' && stap_libexecdir=$stap_prefix/libexec AC_SUBST(pkglibexecdir, "$stap_libexecdir/$PACKAGE") AC_CONFIG_HEADERS([config.h:config.in]) dnl XXX: we'd like fully expanded path names for the @macros@ in there, dnl not like exec_prefix=${prefix} AC_CONFIG_FILES([Makefile doc/Makefile man/Makefile man/cs/Makefile \ doc/beginners/Makefile doc/SystemTap_Tapset_Reference/Makefile \ man/stap.1 man/stappaths.7 man/systemtap-service.8 \ man/cs/stap.1 man/cs/stappaths.7 man/cs/systemtap.8 \ initscript/config.systemtap initscript/config.stap-server \ initscript/systemtap initscript/stap-server \ initscript/99stap/module-setup.sh \ initscript/99stap/install \ initscript/99stap/check ]) AC_CONFIG_SUBDIRS(testsuite) if test $enable_translator = "yes"; then AC_CONFIG_FILES([run-stap], [chmod +x run-stap]) fi AC_CONFIG_FILES([dtrace], [chmod +x dtrace]) AC_CONFIG_FILES(stapdyn/Makefile) AC_CONFIG_FILES(java/Makefile) AC_CONFIG_FILES([java/stapbm], [chmod +x java/stapbm]) AC_CONFIG_FILES(java/org/systemtap/byteman/helper/HelperSDT.java) AC_CONFIG_FILES(python/Makefile) AC_CONFIG_FILES(staprun/Makefile) AC_CONFIG_FILES(stapbpf/Makefile) AC_CONFIG_FILES([httpd/Makefile httpd/docker/Makefile]) AC_CONFIG_FILES([staprun/run-staprun], [chmod +x staprun/run-staprun]) AC_CONFIG_FILES([staprun/guest/stapshd], [chmod +x staprun/guest/stapshd]) AC_CONFIG_FILES([staprun/guest/stapsh-daemon], [chmod +x staprun/guest/stapsh-daemon]) AC_CONFIG_FILES([staprun/guest/stapsh@.service]) AC_CONFIG_FILES(stap-exporter/Makefile) dnl AC_CONFIG_FILES([macros.systemtap]) dnl ^^^ not that one, because we want to expand $vars etc. to fqdn's, dnl so we do the mapping in the Makefile.am # Setup "shadow" directory doc/beginners that has the basic directories setup for # xmlto in one directory (through directory links if necessary). # It would be nice to use AC_CONFIG_LINKS, but automake complains when # the src is a directory and not a file. AC_CONFIG_COMMANDS([doc/beginners], [rm -f $ac_abs_top_builddir/doc/beginners/en-US $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite && mkdir -p $ac_abs_top_builddir/doc/beginners/build/en-US && ln -s $ac_abs_top_srcdir/doc/SystemTap_Beginners_Guide/en-US $ac_abs_top_builddir/doc/beginners/en-US && ln -s $ac_abs_top_srcdir/testsuite $ac_abs_top_builddir/doc/beginners/build/en-US/testsuite]) AC_OUTPUT if test "${prefix}" = "/usr/local"; then AC_MSG_NOTICE([]) AC_MSG_NOTICE([For a private or temporary build of systemtap, we recommend]) AC_MSG_NOTICE([configuring with a prefix. For example, try]) AC_MSG_NOTICE([$0 $ac_configure_args --prefix=$HOME/systemtap-${PACKAGE_VERSION}-$$]) AC_MSG_NOTICE([Running systemtap uninstalled, entirely out of the build tree,]) AC_MSG_NOTICE([is not supported.]) fi systemtap-4.6/coveragedb.cxx000066400000000000000000000243631414446751200162610ustar00rootroot00000000000000// coveragedb.cxx // Copyright (C) 2007 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "parse.h" #include "coveragedb.h" #include "elaborate.h" #include "tapsets.h" #include "session.h" #include "util.h" #ifdef HAVE_LIBSQLITE3 #include #include #include using namespace std; void print_coverage_info(systemtap_session &s) { // print out used probes clog << _("---- used probes-----") << endl; for (unsigned i=0; i used_probe_list; s.probes[i]->collect_derivation_chain(used_probe_list); for (unsigned j=0; jlocations.size(); ++k) clog << _("probe: ") << used_probe_list[j]->locations[k]->components.front()->tok->location << endl; } clog << "----" << endl; // for each probe print used and unused variables for (unsigned j=0; jlocals.size(); ++j) { clog << _("local: ") << s.probes[i]->locals[j]->tok->location << endl; } for (unsigned j=0; junused_locals.size(); ++j) { clog << _("unused_local: ") << s.probes[i]->unused_locals[j]->tok->location << endl; } } // print out unused probes clog << _("---- unused probes----- ") << endl; for (unsigned i=0; i unused_probe_list; s.unused_probes[i]->collect_derivation_chain(unused_probe_list); for (unsigned j=0; jlocations.size(); ++k) clog << _("probe: ") << unused_probe_list[j]->locations[k]->components.front()->tok->location << endl; } } // print out used functions clog << _("---- used functions----- ") << endl; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { clog << "function: " << it->second->tok->location << " " << it->second->name << endl; } // print out unused functions clog << _("---- unused functions----- ") << endl; for (unsigned i=0; itok->location << " " << s.unused_functions[i]->name << endl; } // print out used globals clog << _("---- used globals----- ") << endl; for (unsigned i=0; itok->location << " " << s.globals[i]->name << endl; } // print out unused globals clog << _("---- unused globals----- ") << endl; for (unsigned i=0; itok->location << " " << s.unused_globals[i]->name << endl; } } bool has_table(sqlite3 *db, const char * table) { int rc, rows, columns; char *errmsg; char **results = NULL; ostringstream command; command << "SELECT name FROM sqlite_master " << "WHERE type='table' AND name='" << table << "'"; rc = sqlite3_get_table(db, command.str().c_str(), &results, &rows, &columns, &errmsg); if(rc != SQLITE_OK) { cerr << _("Error in statement: ") << command.str() << " [" << errmsg << "]." << endl; } sqlite3_free_table(results); return (rows !=0); } bool has_index(sqlite3 *db, const char * index) { int rc, rows, columns; char *errmsg; char **results = NULL; ostringstream command; command << "SELECT name FROM sqlite_master " << "WHERE type='index' AND name='" << index << "'"; rc = sqlite3_get_table(db, command.str().c_str(), &results, &rows, &columns, &errmsg); if(rc != SQLITE_OK) { cerr << _("Error in statement: ") << command.str() << " [" << errmsg << "]." << endl; } sqlite3_free_table(results); return (rows !=0); } void sql_stmt(sqlite3 *db, const char* stmt) { char *errmsg; int ret; // cerr << "sqlite: " << stmt << endl; ret = sqlite3_exec(db, stmt, 0, 0, &errmsg); if(ret != SQLITE_OK) { cerr << _("Error in statement: ") << stmt << " [" << errmsg << "]." << endl; } } void enter_element(sqlite3 *db, coverage_element &x) { ostringstream command; command << "insert or ignore into counts values ('" << x.file << "', '" << x.line << "', '" << x.col << "', '" << x.type << "','" << x.name << "', '" << x.parent <<"'," << "'0', '0')"; sql_stmt(db, command.str().c_str()); } void increment_element(sqlite3 *db, coverage_element &x) { ostringstream command; // make sure value in table command << "insert or ignore into counts values ('" << x.file << "', '" << x.line << "', '" << x.col << "', '" << x.type << "','" << x.name << "', '" << x.parent <<"'," << "'0', '0'); " // increment appropriate value << "update counts set compiled=compiled+" << x.compiled << " where (" << "file=='" << x.file << "' and " << "line=='" << x.line << "' and " << "col=='" << x.col << "' and " << "type=='" << x.type << "' and " << "name=='" << x.name << "')"; sql_stmt(db, command.str().c_str()); } void sql_update_used_probes(sqlite3 *db, systemtap_session &s) { // update database used probes for (unsigned i=0; i used_probe_list; s.probes[i]->collect_derivation_chain(used_probe_list); for (unsigned j=0; jlocations.size(); ++k){ struct source_loc place = used_probe_list[j]->locations[k]->components.front()->tok->location; coverage_element x(place); x.type = db_type_probe; x.name = used_probe_list[j]->locations[k]->str(); x.compiled = 1; increment_element(db, x); } } // for each probe update used and unused variables for (unsigned j=0; jlocals.size(); ++j) { struct source_loc place = s.probes[i]->locals[j]->tok->location; coverage_element x(place); x.type = db_type_local; x.name = s.probes[i]->locals[j]->tok->content; x.compiled = 1; increment_element(db, x); } for (unsigned j=0; junused_locals.size(); ++j) { struct source_loc place = s.probes[i]->unused_locals[j]->tok->location; coverage_element x(place); x.type = db_type_local; x.name = s.probes[i]->unused_locals[j]->tok->content; x.compiled = 0; increment_element(db, x); } } } void sql_update_unused_probes(sqlite3 *db, systemtap_session &s) { // update database unused probes for (unsigned i=0; i unused_probe_list; s.unused_probes[i]->collect_derivation_chain(unused_probe_list); for (unsigned j=0; jlocations.size(); ++k) { struct source_loc place = unused_probe_list[j]->locations[k]->components.front()->tok->location; coverage_element x(place); x.type = db_type_probe; x.name = unused_probe_list[j]->locations[k]->str(); x.compiled = 0; increment_element(db, x); } } } } void sql_update_used_functions(sqlite3 *db, systemtap_session &s) { // update db used functions for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { struct source_loc place = it->second->tok->location; coverage_element x(place); x.type = db_type_function; x.name = it->second->name; x.compiled = 1; increment_element(db, x); } } void sql_update_unused_functions(sqlite3 *db, systemtap_session &s) { // update db unused functions for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_function; x.name = s.unused_functions[i]->name; x.compiled = 0; increment_element(db, x); } } void sql_update_used_globals(sqlite3 *db, systemtap_session &s) { // update db used globals for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_global; x.name = s.globals[i]->name; x.compiled = 1; increment_element(db, x); } } void sql_update_unused_globals(sqlite3 *db, systemtap_session &s) { // update db unused globals for (unsigned i=0; itok->location; coverage_element x(place); x.type = db_type_global; x.name = s.unused_globals[i]->name; x.compiled = 0; increment_element(db, x); } } void update_coverage_db(systemtap_session &s) { sqlite3 *db; int rc; string filename(s.data_path + "/" + s.kernel_release + ".db"); rc = sqlite3_open(filename.c_str(), &db); if( rc ){ cerr << "Can't open database: " << sqlite3_errmsg(db) << endl; sqlite3_close(db); return; } // lock the database sql_stmt(db, "begin"); string create_table("create table counts (" "file text, line integer, col integer, " "type text, name text, parent text, " "compiled integer, executed integer)"); string create_index("create unique index tokens on counts (file, line, col, " "type, name)"); // make sure the table is there if (!has_table(db, "counts")) sql_stmt(db, create_table.c_str()); // make sure the index is there if (!has_index(db, "tokens")) sql_stmt(db, create_index.c_str()); sql_update_used_probes(db, s); sql_update_unused_probes(db, s); sql_update_used_functions(db, s); sql_update_unused_functions(db, s); sql_update_used_globals(db, s); sql_update_unused_globals(db, s); // unlock the database and close database sql_stmt(db, "commit"); sqlite3_close(db); } #endif /* HAVE_LIBSQLITE3 */ /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/coveragedb.h000066400000000000000000000035501414446751200157010ustar00rootroot00000000000000// coveragedb.cxx // Copyright (C) 2007 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef COVERAGEDB_H #define COVERAGEDB_H #include "session.h" #include "staptree.h" #include /* tuples: file, line number, column, type of object, name values: number of times object "pulled_in", number of times "removed", times executed if (compiled == 0) object never compiled if (compiled > 0) object compiled The following are not currently implemented. if (executed == 0) never executed if (executed > 0) executed Want to make sure that the data base accurately reflects testing. 1) atomic updates, either commit all or none of information 2) only update coverage db compile info, if compile successful 3) only update coverage db execute info, if instrumentation run suscessfully Would like to have something that looks for interesting features in db: list which things are not compile list which things are not exectuted ratio of compiled/total (overall, by file, by line) ratio of executed/total (overall, by file, by line) */ enum db_type { db_type_probe = 1, db_type_function = 2, db_type_local = 3, db_type_global = 4, }; class coverage_element { public: std::string file; int line; int col; int type; std::string name; std::string parent; int compiled; int executed; coverage_element(): line(0), col(0), compiled(0), executed(0) {} coverage_element(source_loc &place): file(place.file->name), line(place.line), col(place.column), type(0), compiled(0), executed(0) {} }; void print_coverage_info(systemtap_session &s); void update_coverage_db(systemtap_session &s); #endif /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/csclient.cxx000066400000000000000000000242251414446751200157610ustar00rootroot00000000000000/* Compile server client functions Copyright (C) 2010-2018 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ // Completely disable the client if NSS is not available. #include "config.h" #include "session.h" #include "cscommon.h" #include "csclient.h" #include "client-nss.h" #ifdef HAVE_HTTP_SUPPORT #include "client-http.h" #endif #include "util.h" #include "stap-probe.h" #include #include extern "C" { #include #include #include } using namespace std; client_backend * nss_get_client_backend (systemtap_session &s) { // Use the correct backend. #ifdef HAVE_HTTP_SUPPORT if (! s.http_servers.empty()) return new http_client_backend (s); #endif #if HAVE_NSS return new nss_client_backend (s); #endif return NULL; } int compile_server_client::passes_0_4 () { // Use the correct backend. backend = nss_get_client_backend (s); if (backend == NULL) { clog << _("Using a compile server backend failed.") << endl; return 1; } PROBE1(stap, client__start, &s); // arguments parsed; get down to business if (s.verbose || ! s.auto_server_msgs.empty ()) clog << _("Using a compile server.") << endl; struct tms tms_before; times (& tms_before); struct timeval tv_before; gettimeofday (&tv_before, NULL); // Create the request package. int rc = initialize (); assert_no_interrupts(); if (rc != 0) goto done; rc = create_request (); assert_no_interrupts(); if (rc != 0) goto done; rc = backend->package_request (); assert_no_interrupts(); if (rc != 0) goto done; // Submit it to the server. rc = backend->find_and_connect_to_server (); assert_no_interrupts(); if (rc != 0) goto done; // Unpack and process the response. rc = backend->unpack_response (); assert_no_interrupts(); if (rc != 0) goto done; rc = process_response (); done: struct tms tms_after; times (& tms_after); unsigned _sc_clk_tck = sysconf (_SC_CLK_TCK); struct timeval tv_after; gettimeofday (&tv_after, NULL); #define TIMESPRINT "in " << \ (tms_after.tms_cutime + tms_after.tms_utime \ - tms_before.tms_cutime - tms_before.tms_utime) * 1000 / (_sc_clk_tck) << "usr/" \ << (tms_after.tms_cstime + tms_after.tms_stime \ - tms_before.tms_cstime - tms_before.tms_stime) * 1000 / (_sc_clk_tck) << "sys/" \ << ((tv_after.tv_sec - tv_before.tv_sec) * 1000 + \ ((long)tv_after.tv_usec - (long)tv_before.tv_usec) / 1000) << "real ms." if (rc == 0) { // Save the module, if necessary. if (s.last_pass == 4) s.save_module = true; // Copy module to the current directory. if (! pending_interrupts) { if (s.save_module) { string module_src_path = s.tmpdir + "/" + s.module_filename(); string module_dest_path = s.module_filename(); copy_file (module_src_path, module_dest_path, s.verbose >= 3); // Also copy the module signature, it it exists. module_src_path += ".sgn"; if (file_exists (module_src_path)) { module_dest_path += ".sgn"; copy_file(module_src_path, module_dest_path, s.verbose >= 3); } } // Print the name of the module if (s.last_pass == 4) { cout << s.module_filename() << endl; } } } // syntax errors, if any, are already printed if (s.verbose) { string ws = s.winning_server; if (ws == "") ws = "?"; clog << _("Passes: via server ") << ws << " " << getmemusage() << TIMESPRINT << endl; } if (rc && !s.dump_mode) { clog << _("Passes: via server failed. Try again with another '-v' option.") << endl; } PROBE1(stap, client__end, &s); return rc; } // Initialize a client/server session. int compile_server_client::initialize () { int rc = 0; // Create a temporary directory to package things in. client_tmpdir = s.tmpdir + "/client"; rc = create_dir (client_tmpdir.c_str ()); if (rc != 0) { const char* e = strerror (errno); clog << _("ERROR: cannot create temporary directory (\"") << client_tmpdir << "\"): " << e << endl; return rc; } backend->set_tmpdir(client_tmpdir); return backend->initialize(); } // Create the request package. int compile_server_client::create_request () { // Add the current protocol version. int rc = backend->add_protocol_version (CURRENT_CS_PROTOCOL_VERSION); if (rc != 0) return rc; // Add the script file or script option if (s.script_file != "") { if (s.script_file == "-") { // Copy the script from stdin string packaged_script_dir = client_tmpdir + "/script"; rc = create_dir (packaged_script_dir.c_str ()); if (rc != 0) { const char* e = strerror (errno); clog << _("ERROR: cannot create temporary directory ") << packaged_script_dir << ": " << e << endl; return rc; } if (s.stdin_script.str().empty()) s.stdin_script << cin.rdbuf(); rc = write_to_file(packaged_script_dir + "/-", s.stdin_script.str()); if (rc != 0) return rc; // Let the backend know the file is there. rc = backend->add_tmpdir_file ("script/-"); if (rc != 0) return rc; // Name the script in the stap cmd arguments. rc = backend->add_cmd_arg ("script/-"); if (rc != 0) return rc; } else { // Add the script. rc = backend->include_file_or_directory ("script", s.script_file); if (rc != 0) return rc; } } // Add -I paths. Skip the default directory. if (s.include_arg_start != -1) { unsigned limit = s.include_path.size (); for (unsigned i = s.include_arg_start; i < limit; ++i) { rc = backend->add_cmd_arg ("-I"); if (rc != 0) return rc; rc = backend->include_file_or_directory ("tapset", s.include_path[i]); if (rc != 0) return rc; } } // Add other options. rc = add_cmd_args (); if (rc != 0) return rc; // Add the sysinfo. rc = backend->add_sysinfo (); if (rc != 0) return rc; // Add localization data rc = add_localization_variables(); // Add the machine owner key (MOK) fingerprints, if needed. if (! s.mok_fingerprints.empty()) { ostringstream fingerprints; vector::const_iterator it; for (it = s.mok_fingerprints.begin(); it != s.mok_fingerprints.end(); it++) backend->add_mok_fingerprint(*it); rc = backend->finalize_mok_fingerprints(); if (rc != 0) return rc; } return rc; } int compile_server_client::process_response () { // Pick up the results of running stap on the server. string filename = backend->server_tmpdir + "/rc"; int stap_rc; int rc = read_from_file (filename, stap_rc); if (rc != 0) return rc; rc = stap_rc; if (s.last_pass >= 4) { // The server should have returned a module. string filespec = s.tmpdir + "/*.ko"; if (s.verbose >= 3) clog << _F("Searching \"%s\"\n", filespec.c_str()); glob_t globbuf; int r = glob(filespec.c_str (), 0, NULL, & globbuf); if (r != GLOB_NOSPACE && r != GLOB_ABORTED && r != GLOB_NOMATCH) { if (globbuf.gl_pathc > 1) clog << _("Incorrect number of modules in server response") << endl; else { assert (globbuf.gl_pathc == 1); string modname = globbuf.gl_pathv[0]; if (s.verbose >= 3) clog << _(" found ") << modname << endl; // If a module name was not specified by the user, then set it to // be the one generated by the server. if (! s.save_module) { vector components; tokenize (modname, components, "/"); s.module_name = components.back (); s.module_name.erase(s.module_name.size() - 3); } // If a uprobes.ko module was returned, then make note of it. string uprobes_ko; if (backend->server_version < "1.6") uprobes_ko = s.tmpdir + "/server/uprobes.ko"; else uprobes_ko = s.tmpdir + "/uprobes/uprobes.ko"; if (file_exists (uprobes_ko)) { s.need_uprobes = true; s.uprobes_path = uprobes_ko; } } } else if (s.have_script) { if (rc == 0) { clog << _("No module was returned by the server.") << endl; rc = 1; } } globfree (& globbuf); } // If the server returned a MOK certificate, copy it to the user's // current directory. string server_MOK_public_cert = backend->server_tmpdir + "/" MOK_PUBLIC_CERT_NAME; if (file_exists (server_MOK_public_cert)) { string dst = MOK_PUBLIC_CERT_NAME; copy_file (server_MOK_public_cert, dst, (s.verbose >= 3)); } // Output stdout and stderr. filename = backend->server_tmpdir + "/stdout"; flush_to_stream (filename, cout); filename = backend->server_tmpdir + "/stderr"; flush_to_stream (filename, clog); return rc; } // Add the arguments specified on the command line to the server request // package, as appropriate. int compile_server_client::add_cmd_args () { // stap arguments to be passed to the server. int rc = 0; unsigned limit = s.server_args.size(); for (unsigned i = 0; i < limit; ++i) { rc = backend->add_cmd_arg (s.server_args[i]); if (rc != 0) return rc; } // Script arguments. limit = s.args.size(); if (limit > 0) { rc = backend->add_cmd_arg ("--"); if (rc != 0) return rc; for (unsigned i = 0; i < limit; ++i) { rc = backend->add_cmd_arg (s.args[i]); if (rc != 0) return rc; } } return rc; } // Add the localization variables to the server request // package. int compile_server_client::add_localization_variables() { const set &locVars = localization_variables(); /* Note: We don't have to check for the contents of the environment * variables here, since they will be checked extensively on the * server. */ for (auto it = locVars.begin(); it != locVars.end(); it++) { char* var = getenv((*it).c_str()); if (var) backend->add_localization_variable(*it, var); } return backend->finalize_localization_variables(); } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/csclient.h000066400000000000000000000043471414446751200154110ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2010-2018 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef CSCLIENT_H #define CSCLIENT_H #include "cscommon.h" #include "nss-server-info.h" #include class client_backend { public: client_backend (systemtap_session &s) : s(s) {} ~client_backend () {} void set_tmpdir (std::string &tmpdir) { client_tmpdir = tmpdir; } virtual int initialize () = 0; virtual int package_request () = 0; virtual int find_and_connect_to_server () = 0; virtual int unpack_response () = 0; virtual int add_protocol_version (const std::string &version) = 0; virtual int add_sysinfo () = 0; virtual int include_file_or_directory (const std::string &subdir, const std::string &path, const bool add_arg = true) = 0; virtual int add_tmpdir_file (const std::string &path) = 0; virtual int add_cmd_arg (const std::string &arg) = 0; virtual void add_localization_variable(const std::string &var, const std::string &value) = 0; virtual int finalize_localization_variables() = 0; virtual void add_mok_fingerprint(const std::string &fingerprint) = 0; virtual int finalize_mok_fingerprints() = 0; #if HAVE_NSS virtual void fill_in_server_info (compile_server_info &info) = 0; virtual int trust_server_info (const compile_server_info &info) = 0; #endif std::string server_tmpdir; cs_protocol_version server_version; protected: systemtap_session &s; std::string client_tmpdir; }; class compile_server_client { public: compile_server_client (systemtap_session &s) : s(s), backend(NULL) {} int passes_0_4 (); private: // Client/server session methods. int initialize (); int create_request (); int process_response (); // Client/server utility methods. int add_cmd_args (); int add_localization_variables(); void show_server_compatibility () const; systemtap_session &s; client_backend *backend; std::string client_tmpdir; }; // Return the appropriate client backend for the current session. client_backend *nss_get_client_backend (systemtap_session &s); #endif // CSCLIENT_H systemtap-4.6/cscommon.cxx000066400000000000000000000060441414446751200157720ustar00rootroot00000000000000/* Compile-server and client common functions Copyright (C) 2011 Red Hat Inc. This file is part of systemtap, and is free software. You can redistribute it and/or modify it under the terms of the GNU General Public License (GPL); either version 2, or (at your option) any later version. */ #include "config.h" // Disable the code in this file if NSS is not available #if HAVE_NSS #include "util.h" #include "cscommon.h" #include #include #include #include #include #include #include extern "C" { #include } using namespace std; cs_protocol_version::~cs_protocol_version () { assert (this->v); free ((void*)this->v); } const cs_protocol_version & cs_protocol_version::operator= (const char *v) { if (this->v) free ((void *)this->v); this->v = strdup (v); return *this; } bool cs_protocol_version::operator< (const cs_protocol_version &that) const { // Compare the levels of each version in turn. vector these_tokens; tokenize (this->v, these_tokens, "."); vector those_tokens; tokenize (that.v, those_tokens, "."); unsigned this_limit = these_tokens.size (); unsigned that_limit = those_tokens.size (); unsigned i; for (i = 0; i < this_limit && i < that_limit; ++i) { char *e; unsigned long this_level = strtoul (these_tokens[i].c_str (), & e, 0); assert (! *e); unsigned long that_level = strtoul (those_tokens[i].c_str (), & e, 0); assert (! *e); if (this_level > that_level) return false; if (this_level < that_level) return true; } // If the other version has more components, then this one is less than that one. if (i < that_limit) { assert (i == this_limit); return true; } // This version is greater than or equal to that one. return false; } int read_from_file (const string &fname, cs_protocol_version &data) { // C++ streams may not set errno in the even of a failure. However if we // set it to 0 before each operation and it gets set during the operation, // then we can use its value in order to determine what happened. string dataStr; errno = 0; ifstream f (fname.c_str ()); if (! f.good ()) { clog << _F("Unable to open file '%s' for reading: ", fname.c_str()); goto error; } // Read the data; errno = 0; f >> dataStr; if (f.fail ()) { clog << _F("Unable to read from file '%s': ", fname.c_str()); goto error; } data = dataStr.c_str (); // NB: not necessary to f.close (); return 0; // Success error: if (errno) clog << strerror (errno) << endl; else clog << _("unknown error") << endl; return 1; // Failure } string get_cert_serial_number (const CERTCertificate *cert) { ostringstream serialNumber; serialNumber << hex << setfill('0') << right; for (unsigned i = 0; i < cert->serialNumber.len; ++i) { if (i > 0) serialNumber << ':'; serialNumber << setw(2) << (unsigned)cert->serialNumber.data[i]; } return serialNumber.str (); } #endif /* HAVE_NSS */ systemtap-4.6/cscommon.h000066400000000000000000000045511414446751200154200ustar00rootroot00000000000000// Common functions and macros used by the compile-server and its client. #ifndef CSCOMMON_H #define CSCOMMON_H 1 #define MOK_PUBLIC_CERT_NAME "signing_key.x509" #define MOK_PUBLIC_CERT_FILE "/" MOK_PUBLIC_CERT_NAME #if HAVE_NSS extern "C" { #include #include } #endif // Versioning system for the protocol used for communication between the compile-server and client. // The original version is 1.0. After that, we use the systemtap release number. // // By Policy: // - All servers are backward compatible with clients. Servers adapt to the protocol version // of the client. // - All clients are backward compatible with servers. Clients adapt to the protocol version // of the server. Warnings are issued for servers lacking features. // // Features: // Version 1.0 // Original version // Versions 1.6 and higher // Client: // - Passes localization variables to the server in the file client_tmpdir + "/locale" // - Looks for the uprobes module in server_response + "/uprobes" // - No longer needs to remove stap's "Keeping temporary directory ..." message from // the server's stderr response. // - Looks for 'version' tag in server's avahi record and does not automatically connect to // an incompatible server. Also prefers newer servers over older ones. // Server: // - Applies localization variables passed from the client to stap during translation. // - Looks for the uprobes module in server_response + "/uprobes" // - Uses --tmpdir to specify temp directory to be used by stap, instead of -k, in order to // avoid parsing error messages in search of stap's randomly-generated temp dir. // - Advertises its protocol version using a 'version' tag in avahi. // #define CURRENT_CS_PROTOCOL_VERSION VERSION struct cs_protocol_version { cs_protocol_version (const char *v = "1.0") : v(0) { *this = v; } ~cs_protocol_version (); const cs_protocol_version &operator= (const char *v); bool operator< (const cs_protocol_version &that) const; const char *v; }; #if HAVE_NSS struct thread_arg { PRFileDesc *tcpSocket; CERTCertificate *cert; SECKEYPrivateKey *privKey; PRNetAddr addr; }; extern int read_from_file (const std::string &fname, cs_protocol_version &data); extern std::string get_cert_serial_number (const CERTCertificate *cert); #endif #endif // CSCOMMON_H systemtap-4.6/depcomp000077500000000000000000000560161414446751200150110ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: systemtap-4.6/doc/000077500000000000000000000000001414446751200141715ustar00rootroot00000000000000systemtap-4.6/doc/.gitignore000066400000000000000000000001251414446751200161570ustar00rootroot00000000000000*.gls *.ilg *.aux *.glo *.idx *.log *.lot *.out *.pdf *.toc *.dvi _region_.* langref systemtap-4.6/doc/.latex2html-init000066400000000000000000000021161414446751200172170ustar00rootroot00000000000000$CUSTOM_TITLES = 1; $CUSTOM_TITLES_LENGTH = 6; # modified version of make_long_title # does not include the section number in the title (name) of the file sub custom_title_hook { local($_)= @_; local($num_words) = $CUSTOM_TITLES_LENGTH; #RRM: scan twice for short words, due to the $4 overlap # Cannot use \b , else words break at accented letters $_ =~ s/(^|\s)\s*($GENERIC_WORDS)(\'|(\s))/$4/ig; $_ =~ s/(^|\s)\s*($GENERIC_WORDS)(\'|(\s))/$4/ig; #remove leading numbering, unless that's all there is. local($sec_num); if (!(/^\d+(\.\d*)*\s*$/)&&(s/^\s*(\d+(\.\d*)*)\s*/$sec_num=$1;''/e)) { $num_words-- }; &remove_markers; s/<[^>]*>//g; #remove tags #revert entities, etc. to TeX-form... s/([\200-\377])/"\&#".ord($1).";"/eg; $_ = &revert_to_raw_tex($_); # get $LONG_TITLES number of words from what remains $_ = &get_first_words($_, $num_words) if ($num_words); # ...and cleanup accents, spaces and punctuation $_ = join('', (0 ? $sec_num : ''), $_); s/\\\W\{?|\}//g; s/\s/_/g; s/\W/_/g; s/__+/_/g; s/_+$//; $_; } systemtap-4.6/doc/Language_Reference_Guide/000077500000000000000000000000001414446751200210075ustar00rootroot00000000000000systemtap-4.6/doc/Language_Reference_Guide/Makefile000066400000000000000000000006731414446751200224550ustar00rootroot00000000000000#Makefile for Language_Reference_Guide XML_LANG = en-US DOCNAME = Language_Reference_Guide PRODUCT = Fedora BRAND = fedora CHUNK_SECTION_DEPTH=1 #OTHER_LANGS = as-IN bn-IN de-DE es-ES fr-FR gu-IN hi-IN it-IT ja-JP kn-IN ko-KR ml-IN mr-IN or-IN pa-IN pt-BR ru-RU si-LK ta-IN te-IN zh-CN zh-TW # Extra Parameters start here # Extra Parameters stop here COMMON_CONFIG = /usr/share/publican include $(COMMON_CONFIG)/make/Makefile.common systemtap-4.6/doc/Language_Reference_Guide/README000066400000000000000000000016541414446751200216750ustar00rootroot00000000000000This is an automated source build of the Language Reference Guide, used to build it in Publican. To build the source, run: bash publicanize-langref.sh This will copy the LaTeX source of the Language Reference Guide and convert it to DocBook XML. You can now build it in pdf, html, etc using Publican. The main source of the Language Reference Guide is in: ../langref.tex As such, any revisions to this document should be applied to ../langref.tex, not to the source in this directory. IMPORTANT: The publicanize-langref.sh script uses latexml to create the raw XML files from langref.tex first before cleaning it up for Publican. You will need LaTeXML along with all its required perl modules to use publicanize-langref.sh. For more information on building from source, downloading, and installing LaTeXML, refer to the following URLs: http://dlmf.nist.gov/LaTeXML/download.html http://dlmf.nist.gov/LaTeXML/install.html systemtap-4.6/doc/Language_Reference_Guide/en-US/000077500000000000000000000000001414446751200217365ustar00rootroot00000000000000systemtap-4.6/doc/Language_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000006121414446751200250750ustar00rootroot00000000000000 Robb Romans IBM Documentation robb@linux.vnet.ibm.com systemtap-4.6/doc/Language_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000042401414446751200243250ustar00rootroot00000000000000 Language Reference Guide A guide to the constructs and syntax used in SystemTap scripts Fedora 10 1 1 The SystemTap Language Reference Guide is a comprehensive reference of the language constructs and syntax used in SystemTap scripts. It is suitable for users who have intermediate to advanced knowledge of SystemTap. For other available SystemTap documentation, refer to . Logo Copyright © 2007 Red Hat Inc., Copyright © 2007 IBM Corp., Copyright © 2007 Intel Corporation. This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. The GNU Free Documentation License is available from or by writing to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. systemtap-4.6/doc/Language_Reference_Guide/en-US/Language_Reference_Guide.ent000066400000000000000000000001071414446751200272620ustar00rootroot00000000000000 systemtap-4.6/doc/Language_Reference_Guide/en-US/Preface.xml000066400000000000000000000011171414446751200240250ustar00rootroot00000000000000 Preface systemtap-4.6/doc/Language_Reference_Guide/en-US/Revision_History.xml000066400000000000000000000011031414446751200257720ustar00rootroot00000000000000 Revision History 1.0 systemtap-4.6/doc/Language_Reference_Guide/en-US/images/000077500000000000000000000000001414446751200232035ustar00rootroot00000000000000systemtap-4.6/doc/Language_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271414446751200246620ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.6/doc/Language_Reference_Guide/publicanize-langref.sh000077500000000000000000000204551414446751200252750ustar00rootroot00000000000000#!/bin/bash #this script converts the langref.tex source for the Language Reference Guide into #DocBook XML. the conversion is done thru latexml, a utility that comes with dblatex-0.2.7. #the output xml file of latexml is pretty dirty, so this script is needed to further clean it up. #copy latex file to here cp ../langref.tex . #convert it to raw xml latexml langref.tex --dest=Language_Reference_Guide.xml #remove excess whitespace sed -i -e 's/^\s*//g' Language_Reference_Guide.xml sed -i -e 's///g' Language_Reference_Guide.xml cat Language_Reference_Guide.xml | perl -p -e 'undef $/;s|\n<\?latexml options="twoside,english" class="article"\?>\n<\?latexml package="geometry"\?>\n<\?latexml RelaxNGSchema="LaTeXML"\?>\n<\?latexml RelaxNGSchema="LaTeXML"\?>\n\nSystemTap Language Reference|<\!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]>\n\n|msg' | perl -p -e 'undef $/;s|\n

This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.

\n
\n\n

Copyright © 2007 Red Hat Inc.\nCopyright © 2007 IBM Corp.\nCopyright © 2007 Intel Corporation.

\n
\n\n

Permission is granted to copy, distribute and/or modify this document\nunder the terms of the GNU Free Documentation License, Version 1.2\nor any later version published by the Free Software Foundation;\nwith no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

\n
\n\n

The GNU Free Documentation License is available from\nhttp://www.gnu.org/licenses/fdl.html or by writing to\nthe Free Software Foundation, Inc., 51 Franklin Street,\nFifth Floor, Boston, MA 02110-1301, USA.

\n
||msg' | #fix up screens perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n||msg' | perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n||msg' | #fix up index tags perl -p -e 'undef $/;s|\nIndex\n||msg' | #needed later, for TABLES! perl -p -e 'undef $/;s|\n||msg' > clean.xml #further fix up headers! perl -p -i -e 's|<\?latexml searchpaths="[^>]*>\n||g' clean.xml #change main tags sed -i -e 's/<\/document>/<\/book>/g' clean.xml #more fixup for screen tags perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #clean section tags sed -i -e 's/
/<\/chapter>/g' clean.xml #change subsection and subsubsection tags to section sed -i -e 's//<\/section>/g' clean.xml sed -i -e 's//<\/section>/g' clean.xml #remove with sed -i -e 's///g' clean.xml sed -i -e 's/<\/para>//g' clean.xml sed -i -e 's/

//g' clean.xml sed -i -e 's/<\/p>/<\/para>/g' clean.xml #properly convert xrefs sed -i -e 's//indexterm>/g' clean.xml perl -p -i -e 's///g' clean.xml sed -i -e 's///g' clean.xml sed -i -e 's/<\/indexphrase>/<\/primary>/g' clean.xml #convert s sed -i -e 's/emph>/emphasis>/g' clean.xml #convert itemizedlists and listitems, dependent on successful exec of "fix up screens" perl routines sed -i -e 's///g' clean.xml sed -i -e 's///g' clean.xml sed -i -e 's/<\/itemize>/<\/itemizedlist>/g' clean.xml sed -i -e 's/<\/item>/<\/listitem>/g' clean.xml #convert orderedlists and their respective listitems perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #TRICKY: this perl expression takes all occurences of # http://sourceware.org/systemtap/wiki/HomePage # and replaces the string with "/>". from jfearn # note: [^"]* means "any number of occurences of characters that are NOT quotes # note: () groups strings/an expression together, which can be called later as $1 when replacing perl -p -i -e 's|([^<]*|$1/>|g' clean.xml #now, convert s sed -i -e 's/ accordingly; bold is , typewriter is perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml #weird remainders, defaulting them to command perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml perl -p -i -e 's|([^<]*)|$1|g' clean.xml sed -i -e 's///g' clean.xml #TABLES! #the first expression is quite dirty, since it assumes that all tables have 3 columns. dunno yet how to #automagicize this, since the orig XML doesn't have any attribute that specifies columns per table sed -i -e 's///g' clean.xml sed -i -e 's/tabular>/tgroup>/g' clean.xml perl -p -i -e 's|)|
]*>||g' clean.xml perl -p -i -e 's|]*>||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml perl -p -i -e 's|||g' clean.xml #remove "About this guide" section #perl -p -i -e 'undef $/;s|
\nAbout this guide||msg' clean.xml #finalize: copy clean.xml to en-US, then deletes it cp clean.xml en-US/Language_Reference_Guide.xml #delete excess files rm langref.tex rm clean.xml rm Language_Reference_Guide.xml systemtap-4.6/doc/Makefile.am000066400000000000000000000017471414446751200162360ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap docs ## process this file with automake to produce Makefile.in AUTOMAKE_OPTIONS = subdir-objects PDF_FILES = tutorial.pdf langref.pdf DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SUBDIRS = SystemTap_Tapset_Reference beginners if BUILD_DOCS all-local: $(PDF_FILES) clean-local: rm -f *.pdf *.out *.log *.aux *.toc *.lot *.idx *.glo *.dvi install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) $(INSTALL_DATA) $(PDF_FILES) $(DOC_INSTALL_DIR) uninstall-local: @list='$(PDF_FILES)'; for p in $$list; do \ echo " rm -f '$(DOC_INSTALL_DIR)/$$p'"; \ rm -f "$(DOC_INSTALL_DIR)/$$p"; \ done endif SUFFIXES = ps pdf dvi ps tex .ps.pdf: ps2pdf -r600 $< .dvi.ps: dvips -t letter -o $@ $< .tex.dvi: pwd=`pwd`; cd $(srcdir); \ latex -output-directory=$$pwd $<; \ touch $*.glo; \ makeindex $*.glo -s nomencl.ist -o $*.gls; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $< systemtap-4.6/doc/Makefile.in000066400000000000000000000463121414446751200162440ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap docs VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALIGNEDNEW = @ALIGNEDNEW@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ DYNINST_LIBS = @DYNINST_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ debuginfod_CFLAGS = @debuginfod_CFLAGS@ debuginfod_LIBS = @debuginfod_LIBS@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ AUTOMAKE_OPTIONS = subdir-objects PDF_FILES = tutorial.pdf langref.pdf DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SUBDIRS = SystemTap_Tapset_Reference beginners SUFFIXES = ps pdf dvi ps tex all: all-recursive .SUFFIXES: .SUFFIXES: ps pdf dvi ps tex .dvi .pdf .ps .tex $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-am: all-am check: check-recursive @BUILD_DOCS_FALSE@all-local: all-am: Makefile all-local installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILD_DOCS_FALSE@clean-local: @BUILD_DOCS_FALSE@uninstall-local: @BUILD_DOCS_FALSE@install-data-hook: clean: clean-recursive clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ check check-am clean clean-generic clean-local cscopelist-am \ ctags ctags-am distclean distclean-generic distclean-tags dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile @BUILD_DOCS_TRUE@all-local: $(PDF_FILES) @BUILD_DOCS_TRUE@clean-local: @BUILD_DOCS_TRUE@ rm -f *.pdf *.out *.log *.aux *.toc *.lot *.idx *.glo *.dvi @BUILD_DOCS_TRUE@install-data-hook: @BUILD_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_DOCS_TRUE@ $(INSTALL_DATA) $(PDF_FILES) $(DOC_INSTALL_DIR) @BUILD_DOCS_TRUE@uninstall-local: @BUILD_DOCS_TRUE@ @list='$(PDF_FILES)'; for p in $$list; do \ @BUILD_DOCS_TRUE@ echo " rm -f '$(DOC_INSTALL_DIR)/$$p'"; \ @BUILD_DOCS_TRUE@ rm -f "$(DOC_INSTALL_DIR)/$$p"; \ @BUILD_DOCS_TRUE@ done .ps.pdf: ps2pdf -r600 $< .dvi.ps: dvips -t letter -o $@ $< .tex.dvi: pwd=`pwd`; cd $(srcdir); \ latex -output-directory=$$pwd $<; \ touch $*.glo; \ makeindex $*.glo -s nomencl.ist -o $*.gls; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $<; \ latex -output-directory=$$pwd $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.6/doc/SystemTap_Beginners_Guide/000077500000000000000000000000001414446751200212335ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/.gitignore000066400000000000000000000000041414446751200232150ustar00rootroot00000000000000tmp systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/000077500000000000000000000000001414446751200221625ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Appendix.xml000066400000000000000000000010311414446751200244470ustar00rootroot00000000000000 Full Version of Advanced Scripts This appendix contains the full versions of all scripts discussed in . systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Array-Operations.xml000066400000000000000000001170401414446751200261060ustar00rootroot00000000000000
Array Operations in SystemTap array operations associative arrays operations associative arrays This section enumerates some of the most commonly used array operations in SystemTap.
Assigning an Associated Value array operations assigning associated values assigning associated values array operations values, assignment of array operations Use = to set an associated value to indexed unique pairs, as in: array_name[index_expression] = value shows a very basic example of how to set an explicit associated value to a unique key. You can also use a handler function as both your index_expression and value. For example, you can use arrays to set a timestamp as the associated value to a process name (which you wish to use as your unique key), as in: assigning associated values array operations associating timestamps to process names array operations assigning associated values associating timestamps to process names operations assigning associated values associating timestamps to process names assigning associated values associating timestamps to process names array operations associating timestamps to process names assigning associated values array operations timestamps, association thereof to process names assigning associated values array operations Associating Timestamps to Process Names foo[tid()] = gettimeofday_s() Whenever an event invokes the statement in , SystemTap returns the appropriate tid() value (that is, the ID of a thread, which is then used as the unique key). At the same time, SystemTap also uses the function gettimeofday_s() to set the corresponding timestamp as the associated value to the unique key defined by the function tid(). This creates an array composed of key pairs containing thread IDs and timestamps. In this same example, if tid() returns a value that is already defined in the array foo, the operator will discard the original associated value to it, and replace it with the current timestamp from gettimeofday_s().
Reading Values From Arrays reading values from arrays array operations array operations reading values from arrays operations reading values from arrays You can also read values from an array the same way you would read the value of a variable. To do so, include the array_name[index_expression] statement as an element in a mathematical expression. For example: reading values from arrays array operations using arrays in simple computations array operations reading values from arrays using arrays in simple computations operations reading values from arrays using arrays in simple computations using arrays in simple computations reading values from arrays array operations algebraic formulas using arrays reading values from arrays array operations array operations reading values from arrays computing for timestamp deltas operations reading values from arrays computing for timestamp deltas computing for timestamp deltas reading values from arrays array operations reading values from arrays computing for timestamp deltas array operations timestamp deltas, computing for reading values from arrays array operations Using Array Values in Simple Computations delta = gettimeofday_s() - foo[tid()] This example assumes that the array foo was built using the construct in (from ). This sets a timestamp that will serve as a reference point, to be used in computing for delta. The construct in computes a value for the variable delta by subtracting the associated value of the key tid() from the current gettimeofday_s(). The construct does this by reading the value of tid() from the array. This particular construct is useful for determining the time between two events, such as the start and completion of a read operation. reading values from arrays array operations empty unique keys array operations reading values from arrays empty unique keys operations reading values from arrays empty unique keys empty unique keys reading values from arrays array operations Note If the index_expression cannot find the unique key, it returns a value of 0 (for numerical operations, such as ) or a null/empty string value (for string operations) by default.
Incrementing Associated Values array operations incrementing associated values incrementing associated values array operations operations incrementing associated values Use ++ to increment the associated value of a unique key in an array, as in: array_name[index_expression] ++ Again, you can also use a handler function for your index_expression. For example, if you wanted to tally how many times a specific process performed a read to the virtual file system (using the event vfs.read), you can use the following probe: incrementing associated values array operations tallying virtual file system reads (VFS reads) array operations incrementing associated values tallying virtual file system reads (VFS reads) operations incrementing associated values tallying virtual file system reads (VFS reads) tallying virtual file system reads (VFS reads) incrementing associated values array operations VFS reads, tallying of incrementing associated values array operations vfsreads.stp probe vfs.read { reads[execname()] ++ } In , the first time that the probe returns the process name gnome-terminal (that is, the first time gnome-terminal performs a VFS read), that process name is set as the unique key gnome-terminal with an associated value of 1. The next time that the probe returns the process name gnome-terminal, SystemTap increments the associated value of gnome-terminal by 1. SystemTap performs this operation for all process names as the probe returns them.
Processing Multiple Elements in an Array multiple elements in an array array operations array operations multiple elements in an array operations multiple elements in an array array operations processing multiple elements in an array processing multiple elements in an array array operations operations processing multiple elements in an array Once you've collected enough information in an array, you will need to retrieve and process all elements in that array to make it useful. Consider : the script collects information about how many VFS reads each process performs, but does not specify what to do with it. The obvious means for making useful is to print the key pairs in the array reads, but how? array operations processing multiple elements in an array foreach operations processing multiple elements in an array foreach processing multiple elements in an array foreach array operations foreach processing multiple elements in an array array operations array operations processing multiple elements in an array iterations, processing elements in an array as operations processing multiple elements in an array iterations, processing elements in an array as iterations, processing elements in an array as processing multiple elements in an array array operations The best way to process all key pairs in an array (as an iteration) is to use the foreach statement. Consider the following example: array operations processing multiple elements in an array cumulative virtual file system reads, tallying operations processing multiple elements in an array cumulative virtual file system reads, tallying cumulative virtual file system reads, tallying processing multiple elements in an array array operations processing multiple elements in an array cumulative virtual file system reads, tallying array operations virtual file system reads (cumulative), tallying processing multiple elements in an array array operations cumulative-vfsreads.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { foreach (count in reads) printf("%s : %d \n", count, reads[count]) } In the second probe of , the foreach statement uses the variable count to reference each iteration of a unique key in the array reads. The reads[count] array statement in the same probe retrieves the associated value of each unique key. Given what we know about the first probe in , the script prints VFS-read statistics every 3 seconds, displaying names of processes that performed a VFS-read along with a corresponding VFS-read count. array operations processing multiple elements in an array limiting the output of foreach operations processing multiple elements in an array limiting the output of foreach processing multiple elements in an array limiting the output of foreach array operations limiting the output of foreach processing multiple elements in an array array operations array operations processing multiple elements in an array ordering the output of foreach operations processing multiple elements in an array ordering the output of foreach processing multiple elements in an array ordering the output of foreach array operations ordering the output of foreach processing multiple elements in an array array operations Now, remember that the foreach statement in prints all iterations of process names in the array, and in no particular order. You can instruct the script to process the iterations in a particular order by using + (ascending) or - (descending). In addition, you can also limit the number of iterations the script needs to process with the limit value option. For example, consider the following replacement probe: probe timer.s(3) { foreach (count in reads- limit 10) printf("%s : %d \n", count, reads[count]) } This foreach statement instructs the script to process the elements in the array reads in descending order (of associated value). The limit 10 option instructs the foreach to only process the first ten iterations (that is, print the first 10, starting with the highest value).
Clearing/Deleting Arrays and Array Elements array operations deleting arrays and array elements operations deleting arrays and array elements array operations clearing arrays/array elements operations clearing arrays/array elements clearing arrays/array elements array operations Sometimes, you may need to clear the associated values in array elements, or reset an entire array for re-use in another probe. in allows you to track how the number of VFS reads per process grows over time, but it does not show you the number of VFS reads each process makes per 3-second period. array operations clearing arrays/array elements delete operator operations clearing arrays/array elements delete operator clearing arrays/array elements array operations delete operator delete operator clearing arrays/array elements array operations To do that, you will need to clear the values accumulated by the array. You can accomplish this using the delete operator to delete elements in an array, or an entire array. Consider the following example: array operations clearing arrays/array elements virtual file system reads (non-cumulative), tallying operations clearing arrays/array elements virtual file system reads (non-cumulative), tallying clearing arrays/array elements array operations virtual file system reads (non-cumulative), tallying virtual file system reads (non-cumulative), tallying clearing arrays/array elements array operations noncumulative-vfsreads.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { foreach (count in reads) printf("%s : %d \n", count, reads[count]) delete reads } In , the second probe prints the number of VFS reads each process made within the probed 3-second period only. The delete reads statement clears the reads array within the probe. Note array operations clearing arrays/array elements multiple array operations within the same probe operations clearing arrays/array elements multiple array operations within the same probe clearing arrays/array elements array operations multiple array operations within the same probe multiple array operations within the same probe clearing arrays/array elements array operations You can have multiple array operations within the same probe. Using the examples from and , you can track the number of VFS reads each process makes per 3-second period and tally the cumulative VFS reads of those same processes. Consider the following example: global reads, totalreads probe vfs.read { reads[execname()] ++ totalreads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads-) printf("%s : %d \n", count, reads[count]) delete reads } probe end { printf("TOTALS\n") foreach (total in totalreads-) printf("%s : %d \n", total, totalreads[total]) } In this example, the arrays reads and totalreads track the same information, and are printed out in a similar fashion. The only difference here is that reads is cleared every 3-second period, whereas totalreads keeps growing.
Using Arrays in Conditional Statements array operations conditional statements, using arrays in operations conditional statements, using arrays in conditional statements, using arrays in array operations if/else statements, using arrays in array operations You can also use associative arrays in if statements. This is useful if you want to execute a subroutine once a value in the array matches a certain condition. Consider the following example: vfsreads-print-if-1kb.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads-) if (reads[count] >= 1024) printf("%s : %dkB \n", count, reads[count]/1024) else printf("%s : %dB \n", count, reads[count]) } Every three seconds, prints out a list of all processes, along with how many times each process performed a VFS read. If the associated value of a process name is equal or greater than 1024, the if statement in the script converts and prints it out in kB. Testing for Membership array operations conditional statements, using arrays in testing for array membership operations conditional statements, using arrays in testing for array membership conditional statements, using arrays in array operations testing for array membership testing for array membership conditional statements, using arrays in array operations membership (in array), testing for conditional statements, using arrays in array operations You can also test whether a specific unique key is a member of an array. Further, membership in an array can be used in if statements, as in: if([index_expression] in array_name) statement To illustrate this, consider the following example: vfsreads-stop-on-stapio2.stp global reads probe vfs.read { reads[execname()] ++ } probe timer.s(3) { printf("=======\n") foreach (count in reads+) printf("%s : %d \n", count, reads[count]) if(["stapio"] in reads) { printf("stapio read detected, exiting\n") exit() } } The if(["stapio"] in reads) statement instructs the script to print stapio read detected, exiting once the unique key stapio is added to the array reads.
Computing for Statistical Aggregates statistical aggregates array operations aggregates (statistical) array operations array operations computing for statistical aggregates operations computing for statistical aggregates computing for statistical aggregates array operations Statistical aggregates are used to collect statistics on numerical values where it is important to accumulate new data quickly and in large volume (that is, storing only aggregated stream statistics). Statistical aggregates can be used in global variables or as elements in an array. array operations computing for statistical aggregates adding values to statistical aggregates operations computing for statistical aggregates adding values to statistical aggregates computing for statistical aggregates array operations adding values to statistical aggregates adding values to statistical aggregates computing for statistical aggregates array operations To add value to a statistical aggregate, use the operator <<< value. need more examples of supported rvalues, for example, length, count, and what each one does. stat-aggregates.stp global reads probe vfs.read { reads[execname()] <<< $count } array operations computing for statistical aggregates count (operator) operations computing for statistical aggregates count (operator) computing for statistical aggregates array operations count (operator) count operator computing for statistical aggregates array (operator) In , the operator <<< $count stores the amount returned by $count to the associated value of the corresponding execname() in the reads array. Remember, these values are stored; they are not added to the associated values of each unique key, nor are they used to replace the current associated values. In a manner of speaking, think of it as having each unique key (execname()) having multiple associated values, accumulating with each probe handler run. Note In the context of , count returns the amount of data read by the returned execname() to the virtual file system. array operations computing for statistical aggregates extracting data collected by statistical aggregates operations computing for statistical aggregates extracting data collected by statistical aggregates computing for statistical aggregates array operations extracting data collected by statistical aggregates extracting data collected by statistical aggregates computing for statistical aggregates array operations integer extractors computing for statistical aggregates array operations To extract data collected by statistical aggregates, use the syntax format @extractor(variable/array index expression). extractor can be any of the following integer extractors: count array operations computing for statistical aggregates @count (integer extractor) operations computing for statistical aggregates @count (integer extractor) computing for statistical aggregates array operations @count (integer extractor) @count (integer extractor) computing for statistical aggregates array operations Returns the number of all values stored into the variable/array index expression. Given the sample probe in , the expression @count(reads[execname()]) will return how many values are stored in each unique key in array reads. sum array operations computing for statistical aggregates @sum (integer extractor) operations computing for statistical aggregates @sum (integer extractor) computing for statistical aggregates array operations @sum (integer extractor) @sum (integer extractor) computing for statistical aggregates array operations Returns the sum of all values stored into the variable/array index expression. Again, given sample probe in , the expression @sum(reads[execname()]) will return the total of all values stored in each unique key in array reads. min array operations computing for statistical aggregates @min (integer extractor) operations computing for statistical aggregates @min (integer extractor) computing for statistical aggregates array operations @min (integer extractor) @min (integer extractor) computing for statistical aggregates array operations Returns the smallest among all the values stored in the variable/array index expression. max array operations computing for statistical aggregates @max (integer extractor) operations computing for statistical aggregates @max (integer extractor) computing for statistical aggregates array operations @max (integer extractor) @max (integer extractor) computing for statistical aggregates array operations Returns the largest among all the values stored in the variable/array index expression. avg array operations computing for statistical aggregates @avg (integer extractor) operations computing for statistical aggregates @avg (integer extractor) computing for statistical aggregates array operations @avg (integer extractor) @avg (integer extractor) computing for statistical aggregates array operations Returns the average of all values stored in the variable/array index expression. When using statistical aggregates, you can also build array constructs that use multiple index expressions (to a maximum of 5). This is helpful in capturing additional contextual information during a probe. For example: Multiple Array Indexes global reads probe vfs.read { reads[execname(),pid()] <<< 1 } probe timer.s(3) { foreach([var1,var2] in reads) printf("%s (%d) : %d \n", var1, var2, @count(reads[var1,var2])) } In , the first probe tracks how many times each process performs a VFS read. What makes this different from earlier examples is that this array associates a performed read to both a process name and its corresponding process ID. The second probe in demonstrates how to process and print the information collected by the array reads. Note how the foreach statement uses the same number of variables (that is, var1 and var2) contained in the first instance of the array reads from the first probe.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Arrays.xml000066400000000000000000000217731414446751200241570ustar00rootroot00000000000000
Associative Arrays arrays associative arrays associative arrays introduction SystemTap also supports the use of associative arrays. While an ordinary variable represents a single value, associative arrays can represent a collection of values. Simply put, an associative array is a collection of unique keys; each key in the array has a value associated with it. associative arrays introduction key pairs key pairs introduction arrays associative arrays introduction unique keys unique keys introduction arrays associative arrays introduction associated values associated values introduction arrays associative arrays introduction index expression index expression introduction arrays Since associative arrays are normally processed in multiple probes (as we will demonstrate later), they should be declared as global variables in the SystemTap script. The syntax for accessing an element in an associative array is similar to that of awk, and is as follows: associative arrays introduction syntax syntax introduction arrays format introduction arrays array_name[index_expression] Here, the array_name is any arbitrary name the array uses. The index_expression is used to refer to a specific unique key in the array. To illustrate, let us try to build an array named foo that specifies the ages of three people tom, dick, and harry (which are unique keys). To assign them the ages (associated values) of 23, 24, and 25 respectively, we'd use the following array statements: associative arrays introduction example example introduction arrays Basic Array Statements foo["tom"] = 23 foo["dick"] = 24 foo["harry"] = 25 You can specify up to nine index expressions in an array statement, each one delimited by a comma (,). This is useful if you wish to have a key that contains multiple pieces of information. The following line from uses 5 elements for the key: process ID, executable name, user ID, parent process ID, and string "W". It associates the value of devname with that key. device[pid(),execname(),uid(),ppid(),"W"] = devname Important All associate arrays must be declared as global, regardless of whether the associate array is used in one or multiple probes.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Author_Group.xml000066400000000000000000000013071414446751200253230ustar00rootroot00000000000000 Red Hat, Inc. Don Domingo Engineering Services and Operations Content Services ddomingo@redhat.com William Cohen Engineering Services and Operations Performance Tools wcohen@redhat.com systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Book_Info.xml000066400000000000000000000024431414446751200245540ustar00rootroot00000000000000 %BOOK_ENTITIES; ]> SystemTap Beginners Guide Introduction to SystemTap 4.6 SystemTap 4.6 2 This guide provides basic instructions on how to use SystemTap to monitor different subsystems of a Linux system in finer detail. Logo &YEAR; &HOLDER; systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Chapter.xml000066400000000000000000000010641414446751200242730ustar00rootroot00000000000000 Test This is a test paragraph
Section 1 Test Test of a section
Section 2 Test Test of a section
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/000077500000000000000000000000001414446751200251045ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Conventions.xml000066400000000000000000000201341414446751200301330ustar00rootroot00000000000000
Document Conventions This manual uses several conventions to highlight certain words and phrases and draw attention to specific pieces of information. In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later include the Liberation Fonts set by default.
Typographic Conventions Four typographic conventions are used to call attention to specific words and phrases. These conventions, and the circumstances they apply to, are as follows. Mono-spaced Bold Used to highlight system input, including shell commands, file names and paths. Also used to highlight keys and key combinations. For example:
To see the contents of the file my_next_bestselling_novel in your current working directory, enter the cat my_next_bestselling_novel command at the shell prompt and press Enter to execute the command.
The above includes a file name, a shell command and a key, all presented in mono-spaced bold and all distinguishable thanks to context. Key combinations can be distinguished from an individual key by the plus sign that connects each part of a key combination. For example:
Press Enter to execute the command. Press CtrlAltF2 to switch to a virtual terminal.
The first example highlights a particular key to press. The second example highlights a key combination: a set of three keys pressed simultaneously. If source code is discussed, class names, methods, functions, variable names and returned values mentioned within a paragraph will be presented as above, in mono-spaced bold. For example:
File-related classes include filesystem for file systems, file for files, and dir for directories. Each class has its own associated set of permissions.
Proportional Bold This denotes words or phrases encountered on a system, including application names; dialog-box text; labeled buttons; check-box and radio-button labels; menu titles and submenu titles. For example:
Choose SystemPreferencesMouse from the main menu bar to launch Mouse Preferences. In the Buttons tab, select the Left-handed mouse check box and click Close to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand). To insert a special character into a gedit file, choose ApplicationsAccessoriesCharacter Map from the main menu bar. Next, choose SearchFind… from the Character Map menu bar, type the name of the character in the Search field and click Next. The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the Copy button. Now switch back to your document and choose EditPaste from the gedit menu bar.
The above text includes application names; system-wide menu names and items; application-specific menu names; and buttons and text found within a GUI interface, all presented in proportional bold and all distinguishable by context. Mono-spaced Bold Italic or Proportional Bold Italic Whether mono-spaced bold or proportional bold, the addition of italics indicates replaceable or variable text. Italics denotes text you do not input literally or displayed text that changes depending on circumstance. For example:
To connect to a remote machine using ssh, type ssh username@domain.name at a shell prompt. If the remote machine is example.com and your username on that machine is john, type ssh john@example.com. The mount -o remount file-system command remounts the named file system. For example, to remount the /home file system, the command is mount -o remount /home. To see the version of a currently installed package, use the rpm -q package command. It will return a result as follows: package-version-release.
Note the words in bold italics above: username, domain.name, file-system, package, version and release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed by the system. Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and important term. For example:
Publican is a DocBook publishing system.
Pull-quote Conventions Terminal output and source code listings are set off visually from the surrounding text. Output sent to a terminal is set in mono-spaced roman and presented thus: books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs Source-code listings are also set in mono-spaced roman but add syntax highlighting as follows:
Notes and Warnings Finally, we use three visual styles to draw attention to information that might otherwise be overlooked. Notes are tips, shortcuts or alternative approaches to the task at hand. Ignoring a note should have no negative consequences, but you might miss out on a trick that makes your life easier. Important boxes detail things that are easily missed: configuration changes that only apply to the current session, or services that need restarting before an update will apply. Ignoring a box labeled “Important” will not cause data loss but may cause irritation and frustration. Warnings should not be ignored. Ignoring warnings will most likely cause data loss.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Feedback.xml000066400000000000000000000006121414446751200273110ustar00rootroot00000000000000
We Need Feedback! feedback contact information for this manual You should over ride this by creating your own local Feedback.xml file.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Legal_Notice.xml000066400000000000000000000010221414446751200301460ustar00rootroot00000000000000 Copyright &YEAR; &HOLDER; This material may only be distributed subject to the terms and conditions set forth in the GNU Free Documentation License (GFDL), V1.2 or later (the latest version is presently available at http://www.gnu.org/licenses/fdl.txt). systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Program_Listing.xml000066400000000000000000000012301414446751200307220ustar00rootroot00000000000000 package org.jboss.book.jca.ex1; import javax.naming.InitialContext; public class ExClient { public static void main(String args[]) throws Exception { InitialContext iniCtx = new InitialContext(); Object ref = iniCtx.lookup("EchoBean"); EchoHome home = (EchoHome) ref; Echo echo = home.create(); System.out.println("Created Echo"); System.out.println("Echo.echo('Hello') = " + echo.echo("Hello")); } } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/Revision_History.xml000066400000000000000000000011121414446751200311400ustar00rootroot00000000000000 Revision History 3.0-0 Mon Mar 12 2012 Jeff Fearn jfearn@redhat.com Publican 3.0 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/000077500000000000000000000000001414446751200256745ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/brand.css000066400000000000000000000004261414446751200274760ustar00rootroot00000000000000/*headings*/ h1, h2, h3, h4, h5, h6, div.producttitle, div.subtitle, div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib, .title, .titlepage .edition, .titlepage .releaseinfo { color: #336699; } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/common.css000066400000000000000000000611111414446751200276760ustar00rootroot00000000000000* { widows: 4 !important; orphans: 4 !important; } body, h1, h2, h3, h4, h5, h6, pre, li, div { line-height: 1.29em; } body { background-color: white; margin:0 auto; font-family: "liberation sans", "Myriad ", "Bitstream Vera Sans", "Lucida Grande", "Luxi Sans", "Trebuchet MS", helvetica, verdana, arial, sans-serif; font-size: 14px; max-width: 770px; color: black; } body.toc_embeded { /*for web hosting system only*/ margin-left: 300px; } object.toc, iframe.toc { /*for web hosting system only*/ border-style: none; position: fixed; width: 290px; height: 99.99%; top: 0; left: 0; z-index: 100; border-style: none; border-right:1px solid #999; } /* Hide web menu */ body.notoc { margin-left: 3em; } iframe.notoc { border-style:none; border: none; padding: 0px; position:fixed; width: 21px; height: 29px; top: 0px; left:0; overflow: hidden; margin: 0px; margin-left: -3px; } /* End hide web menu */ /* desktop styles */ body.desktop { margin-left: 26em; } body.desktop .book > .toc { display:block; width:24em; height:99.99%; position:fixed; overflow:auto; top:0px; left:0px; /* padding-left:1em; */ background-color:#EEEEEE; font-size: 12px; } body.pdf { max-width: 100%; } .toc { line-height:1.35em; } .toc .glossary, .toc .chapter, .toc .appendix { margin-top:1em; } .toc .part { margin-top:1em; display:block; } span.glossary, span.appendix { display:block; margin-top:0.5em; } div { padding-top:0px; } div.section { page-break-inside: avoid; } p, div.para { padding-top: 0px; margin-top: 1em; padding-bottom: 0px; margin-bottom: 1em; } div.formalpara { padding-top: 0px; margin-top: 1em; padding-bottom: 0px; margin-bottom: 1em; } .varlistentry div.para { page-break-before: avoid; } /*Links*/ a { outline: none; } a:link { text-decoration: none; border-bottom: 1px dotted ; color:#3366cc; } body.pdf a:link { word-wrap: break-word; } a:visited { text-decoration:none; border-bottom: 1px dotted ; color:#003366; } div.longdesc-link { float:right; color:#999; } .toc a, .qandaset a { font-weight:normal; border:none; } .toc a:hover, .qandaset a:hover { border-bottom: 1px dotted; } /*headings*/ h1, h2, h3, h4, h5, h6 { color: #336699; margin-top: 0px; margin-bottom: 0px; background-color: transparent; margin-bottom: 0px; margin-top: 20px; page-break-inside: avoid; page-break-after: avoid; word-wrap: break-word; } h1 { font-size: 22px; } .titlepage h1.title { text-align:left; } .book > .titlepage h1.title { text-align: center; } .article > .titlepage h1.title, .article > .titlepage h2.title { text-align: center; } .set .titlepage > div > div > h1.title { text-align: center; } .part > .titlepage h1.title { text-align: center; font-size: 24px; } div.producttitle { margin-top: 0px; margin-bottom: 20px; font-size: 48px; font-weight: bold; /* background: #003d6e url(../images/h1-bg.png) top left repeat-x; */ color: #336699; text-align: center; padding-top: 12px; } .titlepage .corpauthor { margin-top: 1em; text-align: center; } .section h1.title { font-size: 18px; padding: 0px; color: #336699; text-align: left; background: white; } h2 { font-size: 20px; margin-top: 30px; } .book div.subtitle, .book h2.subtitle, .book h3.subtitle { margin-top: 1em; margin-bottom: 1em; font-size: 18px; text-align: center; } div.subtitle { color: #336699; font-weight: bold; } h1.legalnotice { font-size: 24px; } .preface > div > div > div > h2.title, .preface > div > div > div > h1.title { margin-top: 1em; font-size: 24px; } .appendix h2 { font-size: 24px; } h3 { font-size: 14px; padding-top:0px; padding-bottom: 0px; margin-bottom: 0px; } h4 { font-size: 14px; padding-top:0px; padding-bottom:0px; } h5 { font-size: 14px; } h6 { font-size: 14px; margin-bottom: 0px; } .abstract h6 { margin-top:1em; margin-bottom:.5em; font-size: 24px; } .index > div > div > div > h2.title { font-size: 24px; } .chapter > div > div > div > h2.title { font-size: 24px; } .section > div > div > div > h2.title { font-size: 21px; page-break-inside: avoid; page-break-before: avoid; page-break-after: avoid; } .section > div > div > div > h3.title { font-size: 17px; } /*element rules*/ hr { border-collapse: collapse; border-style:none; border-top: 1px dotted #ccc; width:100%; } /* web site rules */ ul.languages, .languages li { display:inline; padding:0px; } .languages li a { padding:0px .5em; text-decoration: none; } .languages li p, .languages li div.para { display:inline; } .languages li a:link, .languages li a:visited { color:#444; } .languages li a:hover, .languages li a:focus, .languages li a:active { color:black; } ul.languages { display:block; background-color:#eee; padding:.5em; } /*supporting stylesheets*/ /*unique to the webpage only*/ .books { position:relative; } .versions li { width:100%; clear:both; display:block; } a.version { font-size: 20px; text-decoration:none; width:100%; display:block; padding:1em 0px .2em 0px; clear:both; } a.version:before { content:"Version"; font-size: smaller; } a.version:visited, a.version:link { color:#666; } a.version:focus, a.version:hover { color:black; } .books { display:block; position:relative; clear:both; width:100%; } .books li { display:block; width:200px; float:left; position:relative; clear: none ; } .books .html { width:170px; display:block; } .books .pdf { position:absolute; left:170px; top:0px; font-size: smaller; } .books .pdf:link, .books .pdf:visited { color:#555; } .books .pdf:hover, .books .pdf:focus { color:#000; } .books li a { text-decoration:none; } .books li a:hover { color:black; } /*products*/ .products li { display: block; width:300px; float:left; } .products li a { width:300px; padding:.5em 0px; } .products ul { clear:both; } /*revision history*/ .revhistory { display:block; } .revhistory table { background-color:transparent; border-color:#fff; padding:0px; margin: 0; border-collapse:collapse; border-style:none; } .revhistory td { text-align :left; padding:0px; border: none; border-top: 1px solid #fff; font-weight: bold; } .revhistory .simplelist td { font-weight: normal; } .revhistory .simplelist { margin-bottom: 1.5em; margin-left: 1em; } .revhistory table th { display: none; } /*credits*/ .authorgroup div { clear:both; text-align: center; } div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib { margin: 0px; padding: 0px; margin-top: 12px; font-size: 14px; font-weight: bold; color: #336699; } div.editedby { margin-top: 15px; margin-bottom: -0.8em; } div.authorgroup .author, div.authorgroup.editor, div.authorgroup.translator, div.authorgroup.othercredit, div.authorgroup.contrib { display: block; font-size: 14px; page-break-inside: avoid; } .revhistory .author { display: inline; } .othercredit h3 { padding-top: 1em; } .othercredit { margin:0px; padding:0px; } .releaseinfo { clear: both; } .copyright { margin-top: 1em; } /* qanda sets */ .answer { margin-bottom:1em; border-bottom:1px dotted #ccc; } .qandaset .toc { border-bottom:1px dotted #ccc; } .question { font-weight:bold; } .answer .data, .question .data { padding-left: 2.6em; } .answer .label, .question .label { float:left; font-weight:bold; } /* inline syntax highlighting */ .perl_Alert { color: #0000ff; } .perl_BaseN { color: #007f00; } .perl_BString { color: #5C3566; } .perl_Char { color: #ff00ff; } .perl_Comment { color: #888888; } .perl_DataType { color: #0000ff; } .perl_DecVal { color: #00007f; } .perl_Error { color: #ff0000; } .perl_Float { color: #00007f; } .perl_Function { color: #007f00; } .perl_IString { color: #5C3566; } .perl_Keyword { color: #002F5D; } .perl_Operator { color: #ffa500; } .perl_Others { color: #b03060; } .perl_RegionMarker { color: #96b9ff; } .perl_Reserved { color: #9b30ff; } .perl_String { color: #5C3566; } .perl_Variable { color: #0000ff; } .perl_Warning { color: #0000ff; } /*Lists*/ ul { list-style-image: url("../images/dot.png"); list-style-type: circle; padding-left: 1.6em; } ul ul { list-style-image: url("../images/dot2.png"); list-style-type: circle; } ol.1 { list-style-type: decimal; } ol.a, ol ol { list-style-type: lower-alpha; } ol.i { list-style-type: lower-roman; } ol.A { list-style-type: upper-alpha; } ol.I { list-style-type: upper-roman; } dt { font-weight:bold; margin-bottom:0px; padding-bottom:0px; } dd { margin:0px; margin-left:2em; padding-top:0px; } li { padding-top: 0px; margin-top: 0px; padding-bottom: 0px; /* margin-bottom: 16px; */ } /*images*/ img { display:block; margin: 2em 0; max-width: 100%; } .inlinemediaobject, .inlinemediaobject img, .inlinemediaobject object { display:inline; margin:0px; overflow: hidden; } .figure { margin-top: 1em; width: 100%; } .figure img, .mediaobject img { display:block; margin: 0em; page-break-inside: avoid; } .figure .title { margin-bottom:2em; padding:0px; } /*document modes*/ .confidential { background-color:#900; color:White; padding:.5em .5em; text-transform:uppercase; text-align:center; } .longdesc-link { display:none; } .longdesc { display:none; } .prompt { padding:0px .3em; } /*user interface styles*/ .screen .replaceable { } .guibutton, .guilabel { font-family: "liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight: bold; } .example { background-color: #ffffff; border-left: 3px solid #aaaaaa; padding-top: 1px; padding-bottom: 0.1em; padding-left: 1em; } .equation { border-left: 3px solid #aaaaaa; background-color: #ffffff; padding-top: 1px; padding-bottom: 0.1em; padding-left: 1em; } .equation-contents { margin-left: 4em; } div.title { margin-bottom: 1em; font-weight: 14px; font-weight: bold; color: #336699; page-break-inside: avoid; page-break-after: avoid; word-wrap: break-word; } .example-contents { background-color: #ffffff; } .example-contents .para { /* padding: 10px;*/ } /*terminal/console text*/ .computeroutput, .option { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } .replaceable { font-style: italic; } .command, .filename, .keycap, .classname, .literal { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } /* no bold in toc */ .toc * { font-weight: inherit; } .toc H1 { font-weight: bold; } div.programlisting { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } pre { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; display:block; background-color: #f5f5f5; color: #000000; /* border: 1px solid #aaaaaa; */ margin-bottom: 1em; padding:.5em 1em; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ font-size: 0.9em; border-style:none; box-shadow: 0 2px 5px #AAAAAA inset; -moz-box-shadow: 0 2px 5px #AAAAAA inset; -webkit-box-shadow: 0 2px 5px #AAAAAA inset; -o-box-shadow: 0 2px 5px #AAAAAA inset; } body.pdf pre { border: 1px solid #AAAAAA; box-shadow: none; -moz-box-shadow: none; -webkit-box-shadow: none; -o-box-shadow: none; } pre .replaceable, pre .keycap { } code { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; white-space: pre-wrap; word-wrap: break-word; font-weight:bold; } .parameter code { display: inline; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } code.email { font-weight: normal; font-family: "liberation sans", "Myriad ", "Bitstream Vera Sans", "Lucida Grande", "Luxi Sans", "Trebuchet MS", helvetica, verdana, arial, sans-serif; } /*Notifications*/ div.warning:before { content:url(../images/warning.png); padding-left: 5px; } div.note:before { content:url(../images/note.png); padding-left: 5px; } div.important:before { content:url(../images/important.png); padding-left: 5px; } div.warning, div.note, div.important { color: black; margin: 0px; padding: 0px; background: none; background-color: white; margin-bottom: 1em; border-bottom: 1px solid #aaaaaa; page-break-inside: avoid; } div.admonition_header p { margin: 0px; padding: 0px; color: #eeeeec; padding-top: 0px; padding-bottom: 0px; height: 1.4em; line-height: 1.4em; font-size: 17px; display:inline; } div.admonition_header { background-origin:content-box; clear: both; margin: 0px; padding: 0px; margin-top: -40px; padding-left: 58px; line-height: 1.0px; font-size: 1.0px; } div.warning div.admonition_header { background: url(../images/red.png) top left repeat-x; background-color: #590000; background: -webkit-linear-gradient(#a40000,#590000); background: linear-gradient(#a40000,#590000); } div.note div.admonition_header { background: url(../images/green.png) top right repeat-x; background-color: #597800; background: -webkit-linear-gradient(#769f00,#597800); background: linear-gradient(#769f00,#597800); } div.important div.admonition_header { background: url(../images/yellow.png) top right repeat-x; background-color: #a6710f; background: -webkit-linear-gradient(#d08e13,#a6710f); background: linear-gradient(#d08e13,#a6710f); } div.warning p:first-child, div.warning div.para:first-child, div.note p:first-child, div.note div.para:first-child, div.important p:first-child, div.important div.para:first-child { padding: 0px; margin: 0px; } div.admonition { border: none; border-left: 1px solid #aaaaaa; border-right: 1px solid #aaaaaa; padding:0px; margin:0px; padding-top: 1.5em; padding-bottom: 1em; padding-left: 2em; padding-right: 1em; background-color: #eeeeec; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /*Page Title*/ #title { display:block; height:45px; padding-bottom:1em; margin:0px; } #title a.left{ display:inline; border:none; } #title a.left img{ border:none; float:left; margin:0px; margin-top:.7em; } #title a.right { padding-bottom:1em; } #title a.right img { border:none; float:right; margin:0px; margin-top:.7em; } /*Table*/ div.table { /* page-break-inside: avoid; */ } table { border: 1px solid #444; width:100%; border-collapse:collapse; table-layout: fixed; word-wrap: break-word; } table.blockquote, table.simplelist, .calloutlist table { border-style: none; } table th { text-align:left; background-color:#6699cc; padding:.3em .5em; color:white; } table td { padding:.15em .5em; } table tr.even td { background-color:#f5f5f5; } tr:nth-child(even) { background-color: #eeeeee; } table th p:first-child, table td p:first-child, table li p:first-child, table th div.para:first-child, table td div.para:first-child, table li div.para:first-child { margin-top:0px; padding-top:0px; display:inline; } th, td { border-style:none; vertical-align: top; /* border: 1px solid #000; */ } .blockquote td, .simplelist th, .simplelist td { border: none; } table table td { border-bottom:1px dotted #aaa; background-color:white; padding:.6em 0px; } table table { border:1px solid white; } td.remarkval { color:#444; } td.fieldval { font-weight:bold; } .lbname, .lbtype, .lbdescr, .lbdriver, .lbhost { color:white; font-weight:bold; background-color:#999; width:120px; } td.remarkval { width:230px; } td.tname { font-weight:bold; } th.dbfield { width:120px; } th.dbtype { width:70px; } th.dbdefault { width:70px; } th.dbnul { width:70px; } th.dbkey { width:70px; } span.book { margin-top:4em; display:block; font-size: 11pt; } span.book a{ font-weight:bold; } span.chapter { display:block; } table.simplelist td, .calloutlist table td { border-style: none; } table.lt-4-cols.lt-7-rows td { border: none; } /*to simplify layout*/ table.lt-4-cols.gt-14-rows tr:nth-child(odd) { background-color: #fafafa; } /* to keep simple but stripe rows */ .gt-8-cols td { border-left: 1px solid #ccc; } .gt-8-cols td:first-child { border-left: 0; } /* to apply vertical lines to differentiate columns*/ /*Breadcrumbs*/ #breadcrumbs ul li.first:before { content:" "; } #breadcrumbs { color:#900; padding:3px; margin-bottom:25px; } #breadcrumbs ul { margin-left:0; padding-left:0; display:inline; border:none; } #breadcrumbs ul li { margin-left:0; padding-left:2px; border:none; list-style:none; display:inline; } #breadcrumbs ul li:before { content:"\0020 \0020 \0020 \00BB \0020"; color:#333; } dl { margin-top: 0px; margin-left: 28px; } .toc dl { margin-left: 10px; } /*index*/ .glossary h3, .index h3 { font-size: 20px; color:#aaa; margin:0px; } .indexdiv { margin-bottom:1em; } .glossary dt, .index dt { color:#444; padding-top:.5em; } .glossary dl dl dt, .index dl dl dt { color:#777; font-weight:normal; padding-top:0px; } .index dl dl dt:before { content:"- "; color:#ccc; } /*changes*/ .footnote { font-size: 10px; margin: 0px; color: #222; } .footnotes { margin-bottom: 60px; } table .footnote { } sup { margin:0px; padding:0px; font-size: 10px; padding-left:0px; } .footnote { position:relative; } .footnote sup { color: black; left: .4em; } .footnote a:link, .footnote a:visited { text-decoration:none; border: none; } .footnote .para sup { /* position:absolute; */ vertical-align:text-bottom; } a.footnote { padding-right: 0.5em; text-decoration:none; border: none; } .footnote sup a:link, .footnote sup a:visited { color:#92917d; text-decoration:none; } .footnote:hover sup a { text-decoration:none; } .footnote p,.footnote div.para { padding-left:1em; } .footnote a:link, .footnote a:visited before{ color:#00537c; } .footnote a:hover { } /**/ .pdf-break { page-break-before: always; } div.legalnotice { page-break-before: always; } div.abstract { page-break-before: always; /* page-break-after: always;*/ } div.chapter { page-break-before: always; } div.titlepage, div.titlepage > div, div.titlepage > div > div { page-break-inside: avoid; page-break-after: avoid; } div.preface, div.part { page-break-before: always; } div.appendix { page-break-before: always; } div.section { page-break-inside: auto; page-break-before: auto; page-break-after: auto; } dt.varlistentry { page-break-inside: avoid; page-break-after: avoid; } dd { page-break-before: avoid; } div.note .replaceable, div.important .replaceable, div.warning .replaceable, div.note .keycap, div.important .keycap, div.warning .keycap { } ul li p:last-child, ul li para:last-child { margin-bottom:0px; padding-bottom:0px; } /*document navigation*/ .docnav a, .docnav strong { border:none; text-decoration:none; font-weight:normal; } .docnav { list-style:none; margin:0px; padding:0px; position:relative; width:100%; padding-bottom:2em; padding-top:1em; height:2.5em; line-height:2.5em; /* border-top:1px dotted #ccc; background-color: rgba(240, 240, 240, 0.9); -webkitbox-shadow: 0px .15em .5em rgba(0,0,0,0.2); -moz-box-shadow: 0px .15em .5em rgba(0,0,0,0.2); box-shadow: 0px .15em .5em rgba(0,0,0,0.2); */ } .docnav li { list-style:none; margin:0px; padding:0px; display:inline; font-size: 14px; } .docnav li:before { content:" "; } .docnav li.previous, .docnav li.next { position:absolute; top:1.5em; } .docnav li.up, .docnav li.home { margin:0px 1.5em; } .docnav.top li.home { color: #336699; font-size: 22pt; font-weight: bold; } .docnav li.previous { left:0px; text-align:left; } .docnav li.next { right:0px; text-align:right; } .docnav li.previous strong, .docnav li.next strong { height: 17px; display: block; } .docnav { margin:0 auto; text-align:center; } .docnav li.next a strong { background: url(../images/stock-go-forward.png) right 120% no-repeat; padding-top:3px; padding-bottom:4px; padding-right:28px; } .docnav li.previous a strong { background: url(../images/stock-go-back.png) left 120% no-repeat; padding-top:3px; padding-bottom:4px; padding-left:28px; padding-right:0.5em; } .docnav li.home a strong { background: url(../images/stock-home.png) top left no-repeat; padding:5px; padding-left:28px; } .docnav li.up a strong { background: url(../images/stock-go-up.png) top left no-repeat; padding:5px; padding-left:28px; } .docnav a:link, .docnav a:visited { color:#666; } .docnav a:hover, .docnav a:focus, .docnav a:active { color:black; } .docnav a { max-width: 10px; overflow:hidden; } .docnav a:link strong { text-decoration:none; } .docnav { margin:0 auto; text-align:center; } ul.docnav { margin-bottom: 1em; } /* Reports */ .reports ul { list-style:none; margin:0px; padding:0px; } .reports li{ margin:0px; padding:0px; } .reports li.odd { background-color: #eeeeee; margin:0px; padding:0px; } .reports dl { display:inline; margin:0px; padding:0px; float:right; margin-right: 17em; margin-top:-1.3em; } .reports dt { display:inline; margin:0px; padding:0px; } .reports dd { display:inline; margin:0px; padding:0px; padding-right:.5em; } .reports h2, .reports h3{ display:inline; padding-right:.5em; font-size: 14px; font-weight:normal; } .reports div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0px; margin-top:-1.3em; padding:0px; border:none; } /*uniform*/ body.results, body.reports { max-width:57em ; padding:0px; } /*Progress Bar*/ div.progress { display:block; float:left; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; height:1em; } div.progress span { height:1em; float:left; } div.progress span.translated { background:#6c3 url(../images/shine.png) top left repeat-x; } div.progress span.fuzzy { background:#ff9f00 url(../images/shine.png) top left repeat-x; } /*Results*/ .results ul { list-style:none; margin:0px; padding:0px; } .results li{ margin:0px; padding:0px; } .results li.odd { background-color: #eeeeee; margin:0px; padding:0px; } .results dl { display:inline; margin:0px; padding:0px; float:right; margin-right: 17em; margin-top:-1.3em; } .results dt { display:inline; margin:0px; padding:0px; } .results dd { display:inline; margin:0px; padding:0px; padding-right:.5em; } .results h2, .results h3 { display:inline; padding-right:.5em; font-size: 14px; font-weight:normal; } .results div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0px; margin-top:-1.3em; padding:0px; border:none; } /* Dirty EVIL Mozilla hack for round corners */ pre { -moz-border-radius:11px; -webkit-border-radius:11px; border-radius: 11px; /* page-break-inside: avoid; */ } .example { -moz-border-radius:0px; -webkit-border-radius:0px; border-radius: 0px; page-break-inside: avoid; } /* move these invisible fields out of the flow */ .example > a:first-child, .table > a:first-child { float: left; } .package, .citetitle { font-style: italic; } .titlepage .edition, .titlepage .releaseinfo { color: #336699; background-color: transparent; margin-top: 1em; margin-bottom: 1em; font-size: 20px; font-weight: bold; text-align: center; } span.remark { background-color: #ff00ff; } .draft { background-image: url(../images/watermark-draft.png); background-repeat: repeat-y; background-position: center; } .foreignphrase { font-style: inherit; } dt { clear:both; page-break-inside: avoid; page-break-after: avoid; } dt img { border-style: none; max-width: 112px; } dt object { max-width: 112px; } dt .inlinemediaobject, dt object { display: inline; float: left; margin-bottom: 1em; padding-right: 1em; width: 112px; } dl:after { display: block; clear: both; content: ""; } .toc dd { padding-bottom: 0px; margin-bottom: 1em; padding-left: 1.3em; margin-left: 0px; } div.toc > dl > dt { padding-bottom: 0px; margin-bottom: 0px; margin-top: 1em; } .strikethrough { text-decoration: line-through; } .underline { text-decoration: underline; } .calloutlist img, .callout { padding: 0px; margin: 0px; width: 12pt; display: inline; vertical-align: middle; } li.step > a:first-child { display: block; } .stepalternatives { list-style-image: none; list-style-type: upper-alpha; } .task { /* page-break-inside: avoid; */ } .added { background-color: #99ff99; } .changed { background-color: #ffff77; } .deleted { background-color: #ff4455; text-decoration: line-through; } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/default.css000066400000000000000000000001231414446751200300260ustar00rootroot00000000000000@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/epub.css000066400000000000000000000021101414446751200273330ustar00rootroot00000000000000/*headings*/ h1, h2, h3, h4, h5, h6, div.producttitle, div.subtitle, div.author div.author, div.translator div.translator, div.othercredit div.othercredit, div.editor div.editor, div.contrib div.contrib, .title, .titlepage .edition { } div.para { margin-top: 1em; } /* inline syntax highlighting */ .perl_Alert { color: #0000ff; } .perl_BaseN { color: #007f00; } .perl_BString { color: #5C3566; } .perl_Char { color: #ff00ff; } .perl_Comment { color: #888888; } .perl_DataType { color: #0000ff; } .perl_DecVal { color: #00007f; } .perl_Error { color: #ff0000; } .perl_Float { color: #00007f; } .perl_Function { color: #007f00; } .perl_IString { color: #5C3566; } .perl_Keyword { color: #002F5D; } .perl_Operator { color: #ffa500; } .perl_Others { color: #b03060; } .perl_RegionMarker { color: #96b9ff; } .perl_Reserved { color: #9b30ff; } .perl_String { color: #5C3566; } .perl_Variable { color: #0000ff; } .perl_Warning { color: #0000ff; } b, strong { font-weight: bolder; } code.command { font-family: monospace; font-weight: bolder; } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/css/print.css000066400000000000000000000003001414446751200275330ustar00rootroot00000000000000@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); #tocframe { display: none; } body.toc_embeded { margin-left: 30px; } .producttitle { color: #336699; } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/000077500000000000000000000000001414446751200263515ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.png000066400000000000000000000013211414446751200272140ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<NIDATX͗=haS U3j\䒎-p A2v| "n.N.mn Jq.dXEPg^LK;}<{{3#LP ?7dzEIH (} &i$%eJ)"~ `A3o _d\ۙF{LKmԶW ,7o/ "!"!^&\̵91qRO+KL{Նh3vn'O=eJ)?/YS\8˔R)>`棗$ld_q 8iN٢ >m^dz$f#Ӻ~U-,j`)O.ޝ/Ԥ I5@}Xܸvģe|?V y'w9ãc$PXj 4~<@(R 4vX]LPX]BV3 f@au cT=|]f*+LMgz⹭# W7׵ȶ޲s;2P^miSHȴpl$dS _ ?B1UhfTb&IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/1.svg000066400000000000000000000024721414446751200272370ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.png000066400000000000000000000017741414446751200273100ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<yIDATX͗oU?ve+ ]RvK4/֠M!`"`[JD @i>!lڊ$,ՈhXIj1XP)}Ι{=Wh)%dI^&GZ%;: M4ZL#(Z(֧( ;xЫH@A" gԾ{`V,P<ʉhLρAZH%%e ,c_^ʖE + Yrzӷ7ܳ܆k  0fP0xk{ W}ʵ_us~+o _d)u29"j#u!>8m{@\kum9^ӛM..c˃au$^$XMۖܗ%v9;w4Qp/q(Q8[Sཏ/{ x才冤}#E6v΍LbȣUOD2ĜeoٸYp,w\Ԅr!_L[cR2 lN]ELR 4vv~Z T\ UZb6y--| =jXnλٸ#d lLJ^x R}q۸8G@"ȅ&ػs;O&SE6.KFM㜉^g!ܐ̧8#All6̟sbUs[c~Gu1Up 8oJH m+@ZH՜zV+'B.O$wܖQI!Jv5[Mv/ҏf'JIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/10.svg000066400000000000000000000056661414446751200273270ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.png000066400000000000000000000014571414446751200273070ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗OhAƿl" =hI4-ḎIēA^'ZRRP1TB.J(*!l:eLv7ɶi>7;o9)W:(ĊGh{xGEpReipYfs3KW1y󜓻Vn<Ȁn}J p2i;jLv-^8K8O  ^WP]Ln6_vBٴ (fkUbv9tېJ.`X/jws ^ 6Ҕv:v:9 ȫQVCPN0.O?tqWB>φaJLpɎ.FaS@0>z\x|'D)kmoSX ' )V148v:A6, amӃp;x>{ok.72r/Qc5\+ms/W./Wp+|/FW6C` 3o?͗+I@Vߏc@\U7I =3 l̀R (cT85M:8`r9},%:4*)3]e1'? ŌSN&Md*Qj6X.o?&Z׬qN4IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/11.svg000066400000000000000000000040521414446751200273140ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/12.png000066400000000000000000000017721414446751200273100ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<wIDATX͗[hTWe1 Z`,FHC6K;XHKQ B@P_l}(ޠւ/4i^%FSm'hLdwf<9\OZ^쵅֚LBf8TXa,E LzТZtہTcT`iB@qq;ntrBJ66IOZLy*mJ[ eZɯq!"h_Ӝ`ɟcDHU&!dcS6Ŀ܎o 'vl  -d Q'E@$ؤ,('߽yЏr^ŇwJywםכ[ Q6ue^c BՍ%y0ڰAnGٹ6JkjaϪV#'l:.^p.{x,sns/d>zW-fKy̛GV'@%(Yj^8++?~5ZÎ9zO5rat˜}݉?7ߺy'Qlo6n systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.png000066400000000000000000000020451414446751200273030ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]hUMkjڄeJ6cӚZD,'XTuC/Ap M]b8݅0DGpsmZX%vic%=NjlIW}?99J)J 쀽cgo=B"&Jd?J:7g !Q`{qǔ{U ?tV'Oy_I4tߥvEd`OW_?VIl",lKC~fo^1@I6n?+&h;%?w:o(,dا?:>j9o|nN!Ȏ >nN}LLcq## zsWGZ3f86x)7D^ݹQ]$9Trǣ{8вW2Kq7Eɻ/睗X@8c3p=<õf AB3x*||x7>uO?}Bb|z]q~ Wo7+P"d*?B@ZkE&!{чosuazw(lke 8|Pxw.҉n`x|#Y6q+eyn 0x=td2^ F,OüK2o A\,Nd>|Y׉[{AKC; RdҾ}8 6 ɶliJ8'4D8W?\=L(l=Q^!IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/13.svg000066400000000000000000000075731414446751200273310ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/14.png000066400000000000000000000016361414446751200273110ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]HSa4t4[VaMLjHfQ:&Ⱦn uj7B7%u%&6ufb"ҌX#Jp|8_myPJJ1)u*lir@h58 B[Pù@DoN+0;:V%q来L:%`j.`X(X}uemczl<,/a摸$hUpUrSCw6ğ\,/f2dXO '[cvtڣ}p Z :ش.FFUNIi_bU.Z+N>|笥}(N+ VKun4Vu systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.png000066400000000000000000000017531414446751200273120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<hIDATXW]HSQ5o͜E-"aΨ("{J=(67 ,"^Ĵ)[(۬M==zw{VL?osνCcH%hJh 64@"-aFFi Fby`펗ij+aukgxx 0-Nhv1nH@ё%Lwd%%Pָ HO̙4<*+&؅hĠcH Yw"2 X  jT)?~OF1F+OG{@:j*:-NVcWZӈ<~n1.P{}l@^sM sn\4׎Ydq i18X'iPf0 ܸ~9;` Œ|zPۆ'PqK2` h{\.Vq'&}22:!4p//CyIZzZM2!>tAnoڐ-ng8wƛ5>~Em4k9Kô4؞0sҀ@n| nϏ;p pVZ3n7!#d142&AIPh P--+9/isB\4}Э /#J@%)& :yK;G8 ynHe=Q}YB+7Ů, ܞ ybET-o rMWUm,Ȼ$ t7U *Cq?b8^L^_m%T,ſɄ+V=e)D#eWDoǿxIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/15.svg000066400000000000000000000060101414446751200273140ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/16.png000066400000000000000000000020461414446751200273070ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗QlSe]Wtc-ˈAIjb0LLH cWI4M|&>hB$FC(&&eUq2cmRχ^{/\&;'JQG>ơΞ Bєf RLhHqbPG$ט"-x@cqGo}lY}kG0R<#9i-5=rD*܁$PV;J_X2o* 鱳u#,$mm%xzQoŹvs6뿔btdYPtf4թ,5>bsE.wf8őނPgOsӽ4^7}{iL•(ݶ3oԹc #EBP)˛UV$o6 Ֆ8!@E)fZ2N|dvg'xM\ vja!bC} ݻ[p;LJĬN.cZ0|{Z돆@5Omc۾/'nie_ǮT{ݜj H?ƧNLJqؗL/N u#[#LN̨)ŕrCF,e.̉pJ>:Dl>b򺌖b66owedB] T(O긖>%;uU=v,"Ƅ9, hmvém' systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.png000066400000000000000000000016071414446751200273120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_HQ,? ,9ȬnbB _w]Aw]S҄.""׊ y2Tİ!ftњ߾o.=}s!$P7B6[Ҏ FiՅM5XcXIȋ1@suW\UGs )cG̕6PxT cS Eu59c6 $)~#0VQL+?s=ɦ_1T́mCX3Z=>+3Uշgnw軔tՁQ3 yKT /^S2Z[mܒ;F{YS^P f@H;R1NŁ]ۏ_a2++޵eѕv M*%z4Ng=q%??}a+g&rhbϤ8H̀Ety>@e?LڝÑI-&48<?T`vo&BZ[zܗ…l>xuh Lkq6IaEUyγ5j@ H2Q^|/-F'kV (+rٟ @{d68񯳸ǿMh ͈ۨp:F-ۆ.22&צ[ ڰkj\ DqwI~HiJPzɄ7Z?s[E&z$iHP&tIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/17.svg000066400000000000000000000031731414446751200273250ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.png000066400000000000000000000021071414446751200273070ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lUX:Ѝm!Hס12Fp\d1`@p!^xcBF݅CBhF نANqӡmZ{X׾RW9y9sRdJ&ƳFZ4YP.EQ֋Gc)by uB@yy{^`YNJ5Љb4~F Xu5nÛ&O΄ ՟? h~ -|QBj NJf?˿hO0:93;O^G&.G)VaN(ʷ.+(n@ u} XjX\5[J|3|=4_Q(- 4:Nq/UPy͍IYt\2014f)qƞ-a)zE TmtS98h9@i^ Y W@VecHϼg ,ZWf0{r  {{N~㓜4Sq \gﳏ.+f _~;R7OaVجl{UG穋 1HX;k^MмY2V0yUZRwP=")6 -;6R5 yHᵫ6'.)EkWci,Rbc+ Df8JOfefӳ W  ׬ÞJ׫O~߅/\1-x-,QC\mYi)a=dtȐe[B,*} gN:'0]xJߪOӑބ[$ԙÍ;a/z6!]W7a ՛5;CM^!ܞ;U?\LٝTOHyS{tIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/18.svg000066400000000000000000000117061414446751200273270ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/19.png000066400000000000000000000020501414446751200273050ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_lSU?nJe(S4ي1$Lc5,U g|14`b5 /e$@ؘѩdQdLRf3iڵ^X9;wRRJ+)9jE֎P~i DMѾB,A[wPh)p C;euFMOĆOɤu@וXǕԾEsMv*@=PHBLX n?ب9R,)G4y/m;m{=n*uMXfmJm[ mAOy=3fQEήm<>^׳6zy'hj@Jŗ't4Ulzfg j&*>{# 7ן\hōڅdX3N+=޲5y} UHxy"t<[[CCd` Hoe{=kk`Y6k} +g{_`z&ƙߦx2@J[Bwh$SD}d`7_l \2|a='F'y釳r,kok޷Y-~.OGݚc@$p5~%R\.,-aZ]h,CMRRſJd f@Zx{vlDn}X8 [ 4s3Օr/Q>}@2!SFMc* aOK8Sz^JjDcqfnڟRJ systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/2.png000066400000000000000000000016171414446751200272250ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATXW_HSQ٦+LV,0( ){ћ@("  z(zԩ/ * Q4HLHCCc41==n۝ۙSt9}ι~0ƐIЌPf׃` * .7&9vθNH˄ {2F8c e:MLh$P24m@@x˄ x&dT2y,<Š{4@V'}0Xky?\T`oY*F ZTTS-!wz]%lyxI= F]`"Yƛ;g);{-j?ӷ_5CXEdE=`i}J;@RB(kRQ'~ ܗ3jάhuh(݁/KR <:=@%n!hrԸj9 'RH *%\4C-^n|\S7/IA)lqT_?.`fn1ݰV#\n3؁",.q&]Tģ"0m#!0OGGNy|$Z4dD;pʴ?5E^YVjber&5?1Җ-꿀1B{sb ͞:cE,M]CknN[tJV@5 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/20.png000066400000000000000000000022231414446751200272770ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[LUK! P B_(ZeFH-Oc 5KS}0DV.%QIjF1iڴ!@ kV[Y .v;;Hl3??ߙ ~]eU&]yPƒԆQ2oLt7 ;xmdHOzQ*N#Z<~}BG # 5]969F{ 2a1Pv'WڂnjA[EtXzA 3۬g(on$9)ٖEEaI+*dlNZDUyKwIJގ) Oj:ċo]XM3PUF:㠋NJp%K~5}c=yԼҋ;@Uq.i* {|}t {DVĀ&]Ѽyo4}~{fHpx|g?oKZ ȱ2Cs~ J? d`jf^%-Ԡe\1 q@%7%j|t{SC)^y}&Qi`U)ѵӣܜ }l`(CȂ(V<+vot~_g;&;INU$72(ZJ4PUFU[3s-HM.X"6++ȦIlRr ~s4sa^U`- ic'6hE&N~ฑwY eoi>{KMqZO 2v ];8TWJsNj~u7f|2o@06up  systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/21.png000066400000000000000000000017471414446751200273120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<dIDATX͗MhTWsNiE\XS1V݄f@C#M&XJc3*)tSjF4р6E[ (.D m2LL9ܟ΍rw9;ZkJ YRuXHpm/(AZk(1B c~9)x^!7fZOn}pnQ+aEOa72c''l7h%V?xq!Uc}įE?AJH3 JH?w#ҁZtx4́g vku(/j*~ق*/V,bYg-B[GS systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.png000066400000000000000000000021661414446751200273070ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗Lu_KS<"֘7j&]֒4[[ʭ??ܪ ( aVX3ڈf $i SKϷ?8{{.~?~B)JB:`]Q^kG(t" _QPˮHcHJēBw*%^X2`/ːV_#JD(l~^Yu?`[T*M~ ޕ<3!u26cq҆k\qTlt3FUdmHjG . kc2) 14΍Q4*%vwnN|6eMg;z:ݎoF-.q>ě~՛/Q^kuږCU2qm)O<;ps&o<$51M)F`ʊB@(y18 rbJ{[WYP ׵AyAbL:YN BEG4.i{`߰~Hh 645=$Ghh18m3v@v;.EH)M]c`pyY|*JgmR<,&1>_oѴp!Z05PΑ ]DSQ:*waKYCoCxk'É`v( [OUY)iW.xkxR1ObxluKrB,xF'6373o?MZ>&(eiǑV-sSS(%lǺ౲7xd0ZJyQQv#؝ rgi>> lB t? VxP+Vb6Bj;XLx̓˃b#VjX BA IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/22.svg000066400000000000000000000066751414446751200273330ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.png000066400000000000000000000022741414446751200273100ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<9IDATX͗}He{>\L9W9)Kd#AIQ6 hQYjsU#ɩc>qgsb{u=!F9WqN埁@'<,a&ogpLË '=bػ{R‡/A " jJY{N34^z&AQ8M~cS\Yc6RD(?fԅFZ)7y%Lδ͚8U4Q̃3əYbY0=[gh/_ ƀ xۨ~``)t0f!|FSpfs~-(DXDEXpbr.F@Fu} `KAs47n6ol  tZ nK(ji4h%쨫n b rDU$VvY!IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/23.svg000066400000000000000000000111141414446751200273140ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.png000066400000000000000000000020731414446751200273060ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_L[e)e`0\d8s&D:Fd[3 aotK4qJ;11bD%tL2;NXu/dΙ **|^+Y7 jy~}RJr %z-!ѕ B(RDQ0RidSd<**;.{*y+ST)F?kjkwk6p륮],bB[Fu@Z|pS B7;+S\1ϭIWu;leZ",K6~J*XG-Ũ.9UŅL]LR&cueUxOKkWVSҥAK6ۂky C?Y . c 5!?:e{kp g$4!xdRm/).๦ZP2@F+7a DcU"wd\ Zt%h]Dkq˳$u$82q^_I` §90h3P5|^V7ione,CGFnPԃywt'(֡⤕q}SM;{*V9s~FLDN-<-@ϑ1>Bo/>~&:|6op[CF"@]խt=BGQc嬸n@ a߾1V25BL}kj+[X: 6煢OEoqN;辎B705y,7"g+rv5[Lvhҥ!IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/24.svg000066400000000000000000000055401414446751200273230ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.png000066400000000000000000000022361414446751200273100ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[LUgv.hz) U*[L A%ڠM d}2x<-MkkbjD Vp2LJ]ݡRә9o?BJRBYRuz;*B*ntp)(jRk,ioL1!Pr!@ŗ@X@i2}dbjf :eɎeXA )C³l$)k\բbpt9a6%J?`xlNJU: @x-ᅍiXCR*N|Eueޣ?ih!.r?X&A!xyZܜQ@zX g@B00?;s]mN|T3i9 8bwo/uj! Vj Q)>gjSú(yiOpڴ;7Vt#\Fuy1=^oh EM7?Sq}fXRra9 vG,+crV\UdUq 6o>XֿԠu[y_8QZZ x@(jYqjz1|V(jw'A?z,$Kv5[L,?2IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/25.svg000066400000000000000000000073311414446751200273240ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/26.png000066400000000000000000000022771414446751200273160ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<?u|6ZnβTr iH!N9Os^1ys_{<#,%%UwCW"d R6[G~)|G*<%<dSJz[S 2[ѐ=G0LUqG{޻6vRUNy)ҡ ߆[(j a<Nu`!m=GA d0):LxSl2*1qk4`]JQ펀}j¯DރdRk3+&{:tw|c߀ثr 7QRQ5fAV?/9!׶ !A~K/I> Y?kj;GoaPJ]S>[uy$Q37š4=Ѐw{ S3T_&UYc 'u)=*oĝokdiIt &^!"+%7aoN><`pd\/~-m|b,xfT>9{q$Eb|G-Uפ;8_+xlJ9ʯn ќ3Okú<-蟋9/+[\SH5sksMү5k@ ])n=B^HSQ9`2z SU%^ڽBOkրrH1 ¹oc'ef#WPd.B=FR|4 h^-ﭝEXL^ʆ46ĩz~`gm|L"-fB^C2:<g systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/27.png000066400000000000000000000020761414446751200273140ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lSe9I~auSu2d#+o؍& " F*`Z4b憩,1,:FtiV6H_e1)3W}~-+rt~$ systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.png000066400000000000000000000023431414446751200273120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<`IDATX͗klU]]a (c$fauEaLt|`,f21B2}P(Nf́d\$0PҎ]JG{۷Ha|zs<RPu|#EU&K8].p!&o^H")'P (%§29[u(1)AXZ<ȦyoEʔ&w[Hڅ ,ڴx& 7gKSo3X^SQt4n8= W'A$isyt^6 wMÞf̅Kq](%fwG9jQK+K^<9,M)>5igUU#2"cwyȉ3j51 Nb٥T<, B|_ oю XB06m*b#g_b^.S_`RA6jfk#+ᵺ>Vר.f|^'>F˃Þ5@{M)BF @ qh@F[6K<Wy>=;,_~5ǒY%xoϑ7wmX-ff<8YRu_*,5q\{B8s8{ E3&08ﺼzkS%Mw)libq,&j&3ڑ2g@&dUUBoqWU_2.z`+R<&)<>H[bLb͂G1II?ص$Gy 35[+82S28?`4 &%ꁕϕbB00']4;BW:}'R :{sT G\Q-8dֿ=,}[ZtL=0I.~yoW}ɖe(lV t^Fzh.6.7-hcoa( 4ﴐZ%g4BjӸ'ᡵ Ԧqk2V=\{bf:IasIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/28.svg000066400000000000000000000132271414446751200273300ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/29.png000066400000000000000000000022741414446751200273160ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<9IDATX͗Lu_8"Flh2 $.Z0XĀhڊlkS@ʆX(i12[!j ܉ Os<)2zu}???_*s eNsj R)@hr '@Gk+{# ANe}@z}*^{yF7(fATqI5o=PqPd},34G(rQ] )y8\g 2Tރ`>T֗Mh[+' !f.<ˊ$liV*s*KBbZyOZ*Ui,OImE&9RP9>nxgr [ol*eX =xQ'8 X^)&59(fsyF PK™{NnhnAgau: 16TZs75$'D#hH 7tcs=;FXk_0V%h=3c> E2p '.c6'-Ћj0;o|v,\ ՜ŧ ~=/H*qi]& PɥZ~y?/dPr[ TjqpF~͑߃m /[k?UzO+oI@N4l-DOԷ17{N,y>|Rr^Dj*bR~H`px 7D;#`o.0 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.png000066400000000000000000000017101414446751200272200ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<EIDATX͗KLTI*n7@{bGz0b|  Π&,,@ƍ Lbf3+qaԅ10 QcGZ'DZ.G2tW}!0[:UuZSHȂ\C]5֯8Zđ*}mGn} 7KȅB@K1E,H@i$..{U8hkׁ0T ε`< $.kdQ<J#J#q,Ȉۻ<<JR8h?y:jߟ ;ؽu-^(?:񉿮ݥ+GGJ@j !ιRІ ^9ɈU8{x/˗: *-.bVˉɯj@x-vnx ,Az )`::|LG&g,#;8>eŔ/_J˾0}Ɲ}p|k6T;sV[ y]DZq>8RHWGJ|sOān:#<`˸Ժut>w">HG@xޡwdsznpgdJ *dW)xٞZ*VWz Nf[ Nf*{Y1>/_ʭLsMkiXeTl6ؐɋq<$XBK"?o2b-.Zv{:̽{ VCehᖶȼK0'wޕT8юA!U0SB|iL\Kʼnz~܎=LQُD_eI>IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/3.svg000066400000000000000000000062551414446751200272440ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.png000066400000000000000000000023631414446751200273050ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<pIDATX͗klUw:.]ҔMB4Hl%!Ԃ&XLcT m5$&D0ڂF01Ѵ4$M)A -iJ>>faJ4ws=RPPƸ!w+ܑ!B;w>BRP\R%[~)Ż=~X(v)H5jZ׎n-qOQxW_>о`"^LD()nxxPJI|:j'9@Fw,yP\Rᄀlw:[{etXeH_a$MӞ@⺖*:9jj* xi[+]]@ zC.ڭ|zŹnî/[B1"4"PR\D9_bˁw6QUMz룼RѰ;&Fغq-d8Eb xˏ佯~/o}ͬ_(gr)?ç:yiu4W-Q+*@WA;tƽ>nݞ`Iڰְ.zPV:Q+µ=V5 T;OfΝN@12:5 >ӕeބI~/~w\NҜO q_@fU q0xOL2@ߍa} J6dg Oj EH3G`ȍ792`E7vRRn31aűŒ?HӎUM`,8 =D# P2K3A_~0'4[S|frV;w#cӉL\QaI[]1;Ie#L8'Z(|Jvn!EQxB΅InbW4R,*{hSgb);^SKS[R,m]WwR}53]%@cmXR;jYv1l`d/qZtA [xvs.i_]7bʵ MuIDZc%+,Y h+2 JOe}FGJܪ%% M܂ B^>ZSqꀮ5>{"c XPj ?W'kNVGڅWD3_?܌%1ǒO,?ɛ"LpIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/30.svg000066400000000000000000000114561414446751200273230ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.png000066400000000000000000000020731414446751200273040ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗_h[U?gӚbׁCu_ZZ|e"tk+ &eĺEdnK]W!j(5,OҤ=>4MRtϹ?w{~w픲t@㶁aBv+4_!@щrO!O-e;-xѯ7FEFLp㺦N ޳ϼzvԕoEB{+ہ4{IxF)Ŝ(pw|bY`_fiOG6TTm>M2E _2ؽj,W3JrCJہa%HKR4SHoz;[9:+;q.o⭗;[U.8xiFցl }G=y\DIT =v"xg9vk֒fE@n0Y5n΄RSpU|;_v;8ݿcƓT 6]4E]ȷ[Mi\;)M`!௻ӮҴP$ߠzX45UNawC wV-B(?Hra`Vԁ/fǁAN,ųsSpnms7RU8^LX"IGk#=eJ9|;UVzs˕r2H1WԠՔSmf2s@F*폛 tXZYe!ZXʒKۙݪrp;'^\AJV?TN}<ۨ8L1~Eg_ c\ L["8q;l%*QA?68+%!'*nA5oM*p`\_P(zBxJ(zOh%~fpL(z'[F rbmOm_Kx {CIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/31.svg000066400000000000000000000076421414446751200273260ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.png000066400000000000000000000023341414446751200273050ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<YIDATX͗Lu_/py9 IHh`̜1Zn4礵V-W-K Q?kԶ$H+A*"L@~sOq(2z|=<<!d9,:rzQEB*YilO=Hу"EuCyaBm϶ !RhUJ},ʁ U ^ttޱ/˖%`+Y Eͯ?V\`<E)u[0'H[L7?G:2Tt%xlkg!HZM\T8St1:Ĭ4ps`a RMRd*f5MO|x2{Ac1ں8|7:MAzQE~uh5k626A\*a7b&7% YXLFT)nu nE?)-Ԓ?8}^_mR1G9. +t%cscw(F'xٹe#V3q&:z.4jpW oܕ6zh́QlQt@JxM[sF *Y"` dB.HT2֐db`d/.4ln zn݄AHky׵-SUd0:)6y̽>Ќ Fj{OQIS{/vY k7>đ(_78ui> ]}üV8z VJg^}p[,iUKga6R`?؜l%*R9B'/?-&()fLkEDؑ+`D)\Xefpt#/@LլiNfS E5pxf"TǡݙڝIRddn>}tDGcsՂw=!ʊ|_Ou % {:{(l8 EƽD\ r_,v5[J,?ۀMΑcIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/32.svg000066400000000000000000000111441414446751200273170ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/33.png000066400000000000000000000023771414446751200273150ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<|IDATX͗oLU?\*xkeYZќJb-VjekpCH lڬlt ȿrszrEFwy}wRJʼ꽐j])DH' B.)k4<3&xlm巳2@j`O隺e{6jǾ"+G}O%z{ f)> PL m=Xƛ-a:qG  v1A@dR=>S62vsGt!( =:8jAlZƵ9,ۂ|8udeV!'3 _wz:z3.A~Uma|IvQnEױʋJJQXK;28Eޱ.RZa) |{7'k:NHlJ|9[;yG._不ߍ"oy XD}C!KCЕpc~t^n pw(:=kKIۍ><^?QsBB343Zpm$Dzau&$<|o=[4˗8xy /G(t!Z0GR8q>9!̪zT;A+BGhnF> sZ1+2 34v7#Ʈʵl.ɝ.Tȯm9:Je%.Mܵn*??bcH +oBpf[6f@܎5δ wiI 1y^B@t3!Dkʀ7rcGp$ڰ.]7#eΔ@699u^#BxG/hɝb8S<^?ě{Om-۴" b3lVl y{#r|5 ݂M!O52T\S5uyW &-tE/P/ systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.png000066400000000000000000000022321414446751200273040ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[L\EsXn ]H#I0EQDU&&FKI-Hm"MӨA|hj6 PJE.ʲ3>lٳ̜o!d5*;`Yqau!)%d~!EBH}H` !vI)7rY;g* )#$~NS-U=Kp+JD~CB*Z֜X@Lyay8Smc3Ő6UcXԦ |`@`a0]) Lz90oA! =5 )j/ئ?`YoWSX>i6kϧ};s%yUp .Aaus少f2[F%<^.h"w&L! p) ^{?tW5lq_I|gN:b#HBnܠ߄Rj\_x' <漵:97G #m% JJb=IYyxU>;n.@ǥWXw7 ]zxȄ'طb1?za]MZ:CGg|gr[h%s_b!G'8{ 6G=IA=[{o#zzĸǝ$P}fR!I^˽8(q.=9§6>\;טHF\1Q:Lp=g:2:9@= LL{qn7%B|ghphޙoF[^LbƧ -FY[PiL2(s1S'[I͑ ;qdҗl^F'!.)f|eL@aMK 乶CՆkjV~(wh6U+Nfփ5gq{"1P=\U{b՞f+UվjHIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/34.svg000066400000000000000000000100071414446751200273160ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.png000066400000000000000000000023231414446751200273060ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<PIDATX͗[lUgn/]llb)Rj6&AMD &$_<(Fb4 Dj%P0i r 4ֺ-vݝaӝ Ӝ3|?BJtBVvv/[j M)CH7 EkBck6N6,*!ImRwv) (ڸ?Wtĉٛ5նu߆{[{˥|^hlm@Va%$h\%i"SDxѤ0-CŦzY#ysf1ەpz 3ӰےLPOJ:~uRӱ/L(NY4-*~;/v8΃?r!(R[D:$ۙF`8̍~Q -%Yb" ǸxB Cu-\DT g%5F9|娀t[\}Dլ%YDWC\(re<@`s aǖ57hД2+Vv[Y4\X<>N^)gMy>4_?? -,u&83g՟_Y_-Viu cP\ah$LYa._nd:gW} _>΃mPמ/`̻w,J $,[öU%l@82'ζe!Ϧחcv@ ObT"B~`\3qJhM1vV>i qg͠ V<ƳsII9?KoںƇ@cc͔d;֕c])^_)[m5  //GPt]Op&Ǹʨp8B.F*Yid;䝽|p_~!tr/WGIi39ŗlF̚JN#a*)ft Yƀ02[kB6_ܻ,˴hm=}XnLZmV D yD(ZUqj^سQ(Z A?񘶋I"j01|KIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/35.svg000066400000000000000000000116001414446751200273170ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/36.png000066400000000000000000000024061414446751200273110ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗mLe9(naё B6Q7jcķղejs䖭r. -˶ ʱ#p8/݇sx8/y]}u-$eLcR_hJ%BW- ESmS)rOmdr7P2E]R.o:@z)*H65loKX.5(Bj.+5J]Qnտ1vȯhڄGټsb!{wNqC{K}Iuh݊4̵~1 )yy]A7Vr!޿TJH`h DT -belar_\c>vjא8. hKRl9YFRH7i`T::h-66uпY*_P CX2w\zSqM$Mt;Wc}RFt<Wxj +zY Yf|(M)Q]p37U8Q]9c{Á0f|PDM&!Ͷa3'NqC(^tIQ systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/37.png000066400000000000000000000022031414446751200273050ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]LU3miХHRk.ȅb# MhIK#ꅱzEc ȅimhh RQCtBng.3 K߫93|;ߙ)% e]˛YT" FΞC}+)V2eBJVw@J~o{ӹ5p<pP86zN<:GjY*(Bkq@X' e ENd"΀|Ŵڿ<^mT;qP1Am!A@A^6Odm`z [6YHK1-:21㋌{PK-RWcD:/_4ɑ*yK_|+V#b 2b\+9V 3Q4R&<͛5-)Ǭ/{$3 d-R~wC\maL'H3(knыL^)+@BU.\q4,Bs_%;x hJe 㙐j6aZՊB Y systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/38.png000066400000000000000000000024551414446751200273170ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗klU]WnlRd̍p)0 "f ?0,F(01*$_M. #! " & c iYƀm]vC[¸e?y9y9BJXBSu@0yv,EU Xڐ EE k[*dbw~|,5{mWd?t+nyhw/r<BQ.ZW3jS@c+8 6%fH8ԡ,CEz w2LHa97ۻu j؅㓱$qtu' )ŲK-3Yp&i&cpl7DzTo>gW-`Ĕ`?ml_õ[r 4J;|j4AZ; u1-eUl?"~ 'tq\]n2)l{oBhЊȀo_7 z9qtس2%N05J,]xS<9z-Y 4eU)8~^ @w~{NX5PGdts^JOGP X`11'ı iV3NN^9؟`qA;lVhF5=%|—Ut:c4Nc 2qSWQi=p;P{v݃ʹ}C 2Ӄ1o-Kg%2/AaڢܺÇ;Of1?:ȥvrmilXZ@~y(BӔ~r^AUɴD j"Px>]m`NV:DN]|UJv"FQ?ۦ% 11 qzhY-Lf 5)D9!۫55RRT ձiE!Vq! 7cjo9$8skKCQ~]-Ïa{A^y5h ϱbЏl;Tw#86o$>x=LJhhjcu\m o9Q Dی!HI#ޠNWA0b2rq<`gwu\MP}&oOw4nZD)GW(jYiNxa׺ systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.png000066400000000000000000000024241414446751200273140ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗]lTE9vne)&(b(j Ҙ (P0ʅ^h1$D܈mV5JQnuYv=E۳{PR߻973)% e\ӍWkD%h\t>CZH{C}Xs, !ec%xT÷$r"ŤG1f?U{znX/5SyS Em۵y_H>PDT[dڹ«2Rð 8㹓@?K P2) 381dZ#VӪR,s XWPh%EG̓ߡi9yه(v4Ɂ;y$QUK* %ZXI>/v)#4L/gu rmfyQ]vB?@QO-`3,Ε‐K")rVNw{d7QUÞmX&*K'>?xN9V4Mzt_Qxf|^9?H #4enpTho ]cݗ|jexv L4z;6FB)݆##Pvpy` g S@gIu\"L+xbr7p26s&/>9LD|%+]u´tks+رS\4v_iش27<~AC@055bU^xL;7>Rf[M"*Oo9L\`0G;yyŃṒ(@>4#U^fY‘c` ĎC?$JJ'4Μ7&"!`t EmbY497300rmcmށ##Cs+ټ!tS⍛kec6zO7r%;oFHg/8lڇ{<-b9Pn{SZ.}vH\+,Y_ /+l @`O @n!O^tM5wϝ=u=Bjm$ EMל= voA?z$4񿜠! IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/39.svg000066400000000000000000000136451414446751200273360ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.png000066400000000000000000000015061414446751200272240ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗?LQǿw"І`S$*I[&$` `hɵP`"A0j.&\e9B`-8]w-~{Ϸ}9G)JJ i G= Cy<N3cњdd d2Y,ʀ)pj1ά>/ĞDߚi̞OK"&w. P,E$&g33l`"癒9i7xg?Q Օ7 4L5:nzԅ.7 G=0>!0wӋi3Uz]SvXi2k5j \ⷴMT,pdm!F^?'?jPh@W3y+XAjVyU_{ng?Im qv ,"V7q^TUXzB!gr:47֡Nɍn7+˴SwVؗUlt8i`]?7}fzٻPbԲ EiY4sfLsN. `D|~q4Yqu뀜{HG 'ֈɝO;Ӭ+`܎yAycZ%;ddGTO^@3IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/4.svg000066400000000000000000000027011414446751200272350ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/40.png000066400000000000000000000021711414446751200273030ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗[L\U9͡r´(TD$Fb11`5_Llɤ\1DFjLP/-Scat.g0̜SJA֬?k:B)~B+;݉sYKg)Bգ*ri%fJvxƷSlܞ!{@6N)%|] (=sDj^&qla=5wc寴(]^2wD zӕ!8vIz3=Gd\h?y,z(,8,e(`dFbGnOWV.9с+# =@e.S(Qt5@l!(=?=͙χgkqv׷8< tE?C&W 9v7_xν0-oE~/GrR) |ϴ>0 GIu&Z6ʎ\h{xKX%Gߌu^kP9.'<[ 9 ]f =dVoXX^`ngسRm.\9N^k'#kqXi)%:` *|=- ' ߋ͂ ;+~ٙ̚ uTƷ';É甛cgI甛s @Jr< Νddk1r,106e+1P˼Ci@='Ѫsҍoϟ ~V]\["'=؛_\+a# systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/5.png000066400000000000000000000016241414446751200272260ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWMLAf)?RA@X4$&z&p0!A&&|CH C($ 6k ಽWΟčqB" gS8u?Qi)F}1Tf-AKi systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/6.png000066400000000000000000000016531414446751200272310ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<(IDATX͗[HTAs<^ˌʹ hضIPhty( QCQtD6 (.*JLg/uFMӹofJ))#tno Jv* BPCm_CunLjq;G_45- K 3x%icɠY\=iPҸN _y]M:MD& .,5R|Lcc)<pP(Ee 4oF4`,td3ݏUJUBSV&t2+#-m6х<7S Ny=bVFC#]W:WX"T Jض޻m5,?0‰K- systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.png000066400000000000000000000014631414446751200272310ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWMkQ=5mՖPJnb,4~,"0EqD\ƭ?mlqQPnmEӀdPC ҐLsI&!̛9;k:^$ 66Q`<AKɰјdd NN>!^e>1, .e,<73mj/ A{֦}+ o)Cw23`e-y1<(]2qRckYkU.B6XUpۻ]Arvhꀚjeqq*|\t@oxn2e~U $T D4c݇;U0"ݘSnalyK)f>0"19s,vSho`tx=cDIKNC.#>|3C-i4n\DbǯbfCGqvk 2NˡMsVn+?n2*$-y_8F^F!i mT@ϱr˦AS~F7# ^8|[j  xp2 [xHxjNKVµi 1D\?mLѴY#?,h[IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/7.svg000066400000000000000000000016571414446751200272510ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/8.png000066400000000000000000000017411414446751200272310ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<^IDATX͗]hW$fjnR[T6J1ŦK+("l0Gj݌MJ.׺!ZJ?i٤ 6X&9g&msj-y~y&Y΅v+)Y?nq>#l.`>oW Xh8L.o7/?B}9~HTǻwTr-2ZQBA~.?vQJ{&` oa% HՓi‰KWtH6U XX,Тjy#7Cݙϵf9t!C5,+^oVXtuhݷh- 7i>k鐼c<4'qZ?iiy, hUܴ:"& P systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/9.png000066400000000000000000000016551414446751200272360ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<*IDATX͗KHTQ8IeNDAN(5"ZE7-." $6E$eh2sZ4sQ_o=ߙ5ɔL;`Φ2FIB{-ejf֔!. 8:˰PgT*u5|!\9))P@jȍؼw^p.= ?۷ @W@I)=; systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot.png000066400000000000000000000002551414446751200276470ustar00rootroot00000000000000PNG  IHDR TKbKGD pHYs  tIME :IDATuɱ AuPF> 4H|yIc{$ N$$(=w$Aݵ^ _ )d6IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/dot2.png000066400000000000000000000002001414446751200277170ustar00rootroot00000000000000PNG  IHDR TKGIDATm˱ 0> p@Jmq#" d1qT/aǑnxz IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/green.png000066400000000000000000000002601414446751200301550ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDATc(🉁7ӿ0(\l,t$P [ ;, ~NIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/h1-bg.png000066400000000000000000000010651414446751200277570ustar00rootroot00000000000000PNG  IHDRdmMbKGD=n pHYs  tIME 5-IDAT8UQ9GKz4u  DK 9|atzn—OMl|]/=ϼx;j30A@ ,{F,i!2kX[ף]<=*;_`vԙ;luSn=*7>7?A%AB:^Zʷ{*2y۠ns٭Ʉ~c!?ozRuI)aΪOG^"NXɟ ̾{񏏡݇5Ymmew->IiU?`9 oVQ#x3ӹzׯztj?v/Q+IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_left.png000066400000000000000000000102741414446751200311570ustar00rootroot00000000000000PNG  IHDRX-*zFbKGDC pHYs B(xtIME \IIDATh{lW|%i.&6ͥ%A[X.B \Ԋn+ UU ej+,l) t[Me3vq&ǹ%i4:>sgZfZA0 V}Y/Uy*7cav{O !)u =3twoaun!' ȃ.eBp{oDCe~ }l!JPt7]>&6|=۷(V5ĖL_Guu>t)$v6NAgXх`N{uaԑ٧AώouTCv"l6L}:јGD!mh/So)SZ2]܍| z7"Ğk.Cx}zDMwUݿЃ !q5%P UuisM`N`5:etv ص{ CG;G9N7C$V"R Tv |;[h=D^(D\J !2PB~" .F& Eje4㧭,h4h;#c#(\NϠ袙YOhs]>ch^xtrCn{sPH%įD6VLeiEfQh2x*F}$u/A%' 8*iw폀?ZI׮A6~ +P>{D]DDy*3|Y7uL<PA=Cpɔ\ԃzd"1.(B{ 7`rA0A܁rQXm_1It6lF.ߌmoRzUFiSu&qi] V D"  KʍtE wi(&Ug0 'gut#yPC#l"N >k r_2?i3jFĖB_Dl)v㿶 ߋ?|q(/-ŃC(/,&w.b6 ѳ["A,{CesA"n/zQ'a4:D݈P)yxڎ stXh/`ʝD!RbQu睤edmtt#R7ϙ+waeE_ Qu rɓngُb x?PAge˨{ "k oOA{ۧ'?'VYON7Q>|֮.!H$#HK)@gj[MMTTyf9iMpEPD涊8=̏A{{)u儔Oƺ(2dɢ(⏕8kٸBLw0/x$"~% Ad2y%8ѪBx~6.)?<޽8۷S/a55MD7 |"7WxYgNPh8${FEą$z5~7#&č_tmꈴ#"Y.p)O*0JTQ1C c|rTEkHPUq2gs: ?)BKLFP@_Fg5#Gn6Qdl(B;=Px]܃9Vy1Wp(>u8u ,[^$5C.@02k =DbSBJ6 ­cϟ1+ D%}.*竴{! dWNIK;$wotA m-I" f Aˡ K>0.%XD_,Iz/cRF!܂4~g1" хm^H;DS=S)DZ#3x̻jKIs[t);Tt*mAG& rԭ_ 4jG Qu T_k"`?o3`KA2I)l:g^6гrG:KTWGhOUPyqQ%B'X+W_H]Ѷ6^K!X֤ F@D"bKf1ibAS=p᪦Ϛ,;]^y}gA93gHئ1A}:x%j , y{ZB4f"!ʔGC& Ӫ]Zej[|tc&ZՈAy*'iMP(0Sw(:zhnj&P7 n/oAD˽'7)>~z6mtЌΚ:ɣ뮣v:b Plv"AU?pxzEŰ'*SI)h ɢ*FJeY|gH˺uk&jX >6=_-#uti(/zw#/0csF74 $!?2B݂Yzt5#')Kz=G䷿Ν48BJe -,C^1m3?O;PGHgAHOгiNwnUDZ)Rjj,$ʄtDIOc龗M\^GkhV"JѹDZ͟GԾe ͒A0{{W#sda̿nWwf~ Z_allRJlƶm,BJGc-^6-h =c5\ǖXU j=Bi)uԋ: pGE`=ΑE(D ;;ut,VP(D8&#RO1En~Do/-B[D%sDzyhs_/C~ ]#ho_K2"?qAq#e9P=rB|L3T+Y٪t`|֭~aw"l]ڱ]QPb_OX ;a{rxul*p9*}A߾.Ɋ-|rU: <®5B+KX󯠎==3nnCĖ"W#jnXWSfzvlB_O!șyG)+m|B,B/]c/GRy(ץ{zmCD";;IwvZh*uѝAr◷Qo ۱V<7V,l9>j榫qqkx ӲO\eZv&s DMwW@k!lqJ*tl\$#""sEazgT@X~f. օPȔUE¯i`Me雑-Żvsۊ.lCރhĤSE$Zj/Š-Fo*Fߏh MK-(Dd>4~!SfM=)wئxEV< }/r?7=6&Ҵ9lوhs.ȯ! tiԇMD.>Da& #jn>e0VQNcy@idߙ;3ŒOېb?VYZٛ`@TD$VjBދhإ" l6. PC\y ?d! bL+c image/svg+xml systemtap logo Andy Fitzsimon, Red Hat 2008 systemtap systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/image_right.png000066400000000000000000000046711414446751200313460ustar00rootroot00000000000000PNG  IHDR)K=4sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< 6IDATx}VU?yQQEeYxVVFAOoYd::4:ًQf3V:aY)ܕMIeYAPEe?}ػwﳯCd?fM6޽/o8F`.Ɍ_l`jik0å_WӚ`hiiaf۝S!xg1 5U+}̙1祚u`vaDW͌ʚ0'-B'Q< X&0?["൐p'sazB$2 #"Ÿj'&0 bA kDWcC^`#Roc1bhNP!o'1`lFd1 \L3krܫioׇ|o49`* A\ lr[յwc5NLMU# yr3k f3"RG<5ƚ8ʛ1)y%M8q ؛>Ixz1p軆Mw6p'Pֈx+8`;VaVw6/f?,® lhT /o8탒z{d6>& Qc.m&z2EI&a=n`ƣtCWQc]NVUX ֟FrD߅xiS$*fO.%uEF?N>O¾]|6v3w*=X^OEFI}~c~\.g qyA1 ox7ŲC2ۻӚhj茲*&O'CK"=eэ:?&G{RID~w]zqs=h|ѫ(JZ,HHʼn]&M<^db{"=% o ph,kPk!?NbPY'hҙH ±tѵI?.gڿ%<ukG'қFVr84TD{/=3@z6ppp1)8XϣHg%u~'Grm(Z+=˚OM38_?snj!=í#l@e~M.R623} %&-:{Jׄy1ج~}vnykQ>[8KIC-ةegsOEk- OKս`m?qD={*vܙ'}LSRo-ءlؘJI'A=AIB?gZ <,ÆGDKwvק+dЍDޗ;Hilnq:*}(W񨯣bij% \Q[n)SN9~ "m,D~:NI=w~ MlTRW`k*6j7Q w8p(Q'E>UIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.png000066400000000000000000000044161414446751200311010ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh՚klwvmzw 1 /%e"0%`ҒDIC!HmE@JP!T% FR5(JEJ uWJll퇙ڻH#̽sΜRLʷm@__5(fw~#Å4NAQk]BXViQkE9FvX>Z2yyN`e,[47NtTSnxO.,`TitÓ+9X P=鵺=&=n\ UaK2DPEM7&BiNh=`>O;F|;J k5s3M7򀵀R:óON2ކ ^$TY ֱ¾ ҟp%@=Gk$n_tcD_ %3kN`ZAkHrqy.ݾRBӍ!`*(P)g{ Qf؉SAxƀ{g,X)1phQ`S1$ܢϠfMr H#F5d;ujYm]?d&[N !(f1ܯWQQ1\YA6A}Iހn/sBJ@~bV`5ypb5#GV(1yXUZZۣh@2r$(Np"c}:аDF&(Ёqxt&}Wg|jwYJzz$cϋUK^Yu_% x F (F u%iEDB.eoCsjRt8ݑdž)v$)c1$zPR߶&K޽dn<l*]&A(K8I _$G~_Kb3[mZij uLBE)öuA|bub0e_h~)II/Hfp">~]) 7w`:p1+cF lHy,'5ğ-"Qc2%,H̝rb9FI6K !\QiI8 .; ڹs1` F\H+Ov$).U 7 T P@H!\B:S[hBnWGE*nO+ N#[DF:oD w5B-OD|+e~ ;4 "CzX)GK#E.g 8fC`/P$iS + |--S8 n846A^MPU@GPhpjI<0Fϧ|M zHMrhYyd|.+EG1E^5}  v~Q?>N]t/oq!?ȽҶL@_ j<^v逋mR*=f)Rl>ʨ(&1>".z  .`>#RJ5$_s/9Y񡇕[3wba6[1{{sݖ_WI`#5WKIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/important.svg000066400000000000000000000047441414446751200311200ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.png000066400000000000000000000040461414446751200300300ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAThՙmTޙ;3˲tyKI"5DcM?4jci-64m-451jK475\o;3sg;.LO99* !jGS)d**pеs_#0 :0}8qxеJ+ I@8<(Ujm !,kf# @(TǢEXd LaVƾtKmm߻w;H:ㆮmjH`-7ޕ+QUYPY% /@pqq cl{m+۶Γt‘Msqu%S\Au\RYz)N8o4tm#ч,"?~iB ckT"^ vD?\KKQ>C׶( |͟φښCJd]I2b՜< @pkg }˭P0buƇE3K bR("I| ~%?>Yb|ׅ{Տ<6/ (Hf`C~ '2VCq=&=i`.Bv\2CҞHs)i,1VeqzD*x׳|Jд.Ӥ-W0b.5~cP__߇ۀzc9wD$|yW:˅DM}#mYB+( Gˍ퀤U/P"B'e\NeFx9BKdl"+zG>rn U sz25XOa\#S}5/g G'`MBP~g*KvJ=,iR}B0o~3`"YQ}2$a"?C\kI#IW$n1:0K4kDs⦅Vu=YoeK0fk6k~Ej{p ̐^] ]8~Xovn蚀灃1 YGG%xR:vxwatl+Wx?JmXr`nl%tP ۿg/3Cځ7مe$#{p&Qkr#7W8UxمNy^($ZRku nT.ٽ=еc #I}o˸4ozlH)Pk{uhq,l{?0tT`k1`h m];;.1G+@ LSS3 N/wyYQ&0b™SL=wĈql>5vlLg,)~XaZzz h!q k==֓  _\\]\n~ 7t-[ ]Ñ`GJ5ogOx8 1tmo%Ε<,4w9qMG!ݓ_rX@kr%6 !5׬ҷڤ)SkЁ-YC׆}Tr/ݻe+SU v`**zf1tzu^{99<6b(Dӻ?ͳq>6='y =Dg(2;|@ef̞D:}/? f* Cז " @}a$7`~е-WKp0 K@8k"+@kuGPp$ZFN2zfCV]ue0" D <; 6IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/note.svg000066400000000000000000000052541414446751200300450ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/red.png000066400000000000000000000002431414446751200276300ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATcX🉁w gIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/shine.png000066400000000000000000000002221414446751200301610ustar00rootroot00000000000000PNG  IHDR1bKGD pHYs  tIME  IDATcD&L &7FfU2 IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-back.png000066400000000000000000000014261414446751200315060ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME+yIDAT8˵?HQǿGG/Y*ĸH\77 bR Bb^dY&^Z^Ÿ {MQPJ%8 :;;/ӷ%\~:550MnkK?4)ز,EuG|Y<Cu@0M!E &20Jbi?T6锴zLsp Uq U5sVRg6\"0IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-forward.png000066400000000000000000000015341414446751200322520ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME*0jIDAT8˵OHW?3lgkHC/ ɭ=EJDņ](ȡP$SN9U (Z^BЊ)BŅUOq77Cge]w}彙w~қFz7~N*ٙ{_l\\Bx>VIno$j UkJ}(Cn''$IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-go-up.png000066400000000000000000000013611414446751200312300ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIME*;%`qIDAT8˭?kSQ{{sScB]JJE NLBKҬ7pRpA nT u*$!)(Ѷ'76Mڛ4Q {? hT*]5rWc 8numqYԪ/GC.zB@4}&7XjuW~cc#ܜt]?VI`7F\eoozm%ÿKt:}mffzeYl6fB`U O&hWU|guu5JnKB T*etxZ8tZVV!!DennRxgZ )%SaLOO?XYYضM4uݳCϧ)g~~qH$"J]vk,s ضmommYfFA/߳\@ |cVk0`#PH<>::t lJQ)b ^l%T)"vTp<608"ݽ]wJTl7 ]wL xVuۀcr܅{MP.G)d7Q华ZgIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/stock-home.png000066400000000000000000000014631414446751200311340ustar00rootroot00000000000000PNG  IHDRĴl;sRGBbKGD pHYs  tIMEVIDAT8˭UKA}3**i+X $HA 7рn1gI,"=xYo-$%@lat?ۋ 1&>]fgo߼.KڜJRJ~?aW>s$BAVAn"f25R}Yt755E+lnnbkk ǵc}YXX#aqq1F_qE>mnnNF1#LFGG!mH9Y>ˁ14 B$wr_>GTS㠿n6M&=EQw^r {oU*LNN`6]WO&eY0NNN:*m.۶Q,1==MBP@UեX,7IRy?@ދiiHmj3 a%4QIxǡ~!`Ύ@i²,1aG)f26neY .˲t]A4MXӴ{;uݞ0MA 8^E#fr 8<'d @Sj7ƍVn=IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/title_logo.png000066400000000000000000001161731414446751200312310ustar00rootroot00000000000000PNG  IHDRIE!sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATx}yEc=3/,d!U_.OPWU_DA9B}_ ;a@B{ݝݝݞٙI'vw]UO}:GqGqz p*Qp(@𝝝Ml 0('GClٲE&IO6/֟188hutt}G3$BZk%G3f[C9pG9bvvv2pxwQ755\>t=! <:w5zꦛn2wbqKЖ7ӟ]vQcc#wttV}[+ w<8 ԗ%2)Tww&":Hmˏ?7oR8g׮].Tͳ}b%'-+"%M^ڳMzx<.o$V9g/8q"šNJ,0"ظnεo8GIHRbxx l gw O 5ipl"eWk/8v. @VM6nf(cCyGqh'}6B@d.H4u% t Wx۶m%Y;$?<}%|*}Kgt f8IdF,տ=< 0*|}tڵڬ3*%g?m AJ}fK˲dwwA[ϣx@,X,fk@ag8D8۲S>}Ks4;?.VWSdT9<1~{.⺺: mš#<88hHCC8Q /yط:[85-N1aM3`X堓Kd2):&}8J8#v#8Q瞕 p;2SgL_忺.<n6lpD7:7lzfd txy'k_zy逓?Jx{|tɴfiiwV^Oz+:uA'=B` y4n}eMMSl^zCm;w\.4ggGz>E>ל3 p{*%=/jV,%yK5b$|plKU[]:;qē>3C:ճ 念k!ܠ|-_D/ݦ.ğݸꭾQ!#]oB3}!xz/:/Gɿlapt4d^~wZŅBRn_?K)aKVtkk+wvv`>eSS w -7w{tw)~mGz8ֆhmmLOOZ+'r:}i93ԯ܊?Ƕl٠::: 1Ǥ~˖eMS\[cOwr0)"͚HTw57=wJ#ݶ[KnӴ:MoYtww[A$4eL&mPs1U Nc93\._Wl~ʕr̙ݟ.3F[w'ֈWyg2RH!PD&v͙/9]_an?ڍW6o\XUo^W:;;BDM믏˗>px(K "jkkf͚ o~D ~bie'O869{M4iuiLO'xZF)aD` ,62ж/X#H)3R3%iJ]{ [,7D߻F,=5O'H Dlr s4"?;A/hߗ\x+MA2(M4 olj v~;W?w!a,aiBa`ɔJAdd?#C1$fT<wo!n{vSL7_BtUڱ~+V"[ þ*H)eY <뺢P(Vɸ1H@y;]\Ӣe0 ~]f.|RMw 6+ޒO-&cqh9 >MRqE}}}ڪloq%rWWNSx' 43V? 1|fGJ$>H %H- EH3r`g+sx!M \ s4o?[|Jo<7/}l'@R b!ZZ[mA8Rc43\.g2ilV---T(X,f+\K 9zɭ|HؾnV|#ڡWKUf娥٬'b qY/KPcQ?| dd2+ A:J`f)ɘ T`vpIW%➯~zȲ0z1R aYORxғ2ȗmֆ)x?`> G~*@F&tvvRh#/;r9cV+Wvl! bќgiX,dY͎;LKKikkc\WRJkm!|X#3o4^M/fw/Q;U~XSOϐgmS/2>y^xrC㗪m_ʺB(4yd<*yń HmbppPڶ-<r ó5RB ,R3fl f,:B2okkNc5 6ة GMfd< 6l ni_l4ߒ4rgzѳyD: 鴬 Y7$$c'^X."׬Vz`_QՓɬ5Yt%4!{6뚏Y-y1J zTW4_۶b/ 8& 7?9c|ooGnŀ\.G===B7H}}}d_bC")FhHxIcYRo/559oyk,m}}`0HTnz߿6_nR\&%FKyrmvE<;?RT6O9pTGz7N7qZ_ӖKZzlե<=CD #/~*l6ksb@:/ٺ&Ǻ9 /Ҟj~0tF+3 v% пW,X+Nx<p-+$H&#~ǯ~u%{'+#y6眳D^s%8n9X&b,Įntk%xg`WFYP.VZ1I5c&:#Bkk+Dz"N.;o\S o6 }?F]U8U>@?zw}pm۶#ts2ifQuG[CQR($ lcec^l6KoUkZt8+l8ڞ3IH5͘i'1r!>@&"sqlbI([Ǘ/G>[5x8{+OH--/Xğvl:{YpIlgۙ(6ּ60`m_~xnb ;;8w eد!͚$vAXŠ2)6 kҎp@ĎǸYж1$xKѬ:::j-+*lw ,ml`D$i Abz.sg`JQO=$.ٓmbW冸W(wQ ҋvyL&! O8?"%f죲i; o3۵my o{ew%́+X)xJn 7ybBrR`>YF$Nju1+z#$E~ t$H^NH9 Wذs$$wZ>444Xc1%/}|RJADRK-1R)B IKdXW]~a2?cMK\(ooox<g1&x1{Gp匩xY0>laalcڦیmZmˊv0JSlV@65KT]Eiȓ ^&<uP&\j\*KU?J*ȕ>)*< 1صf{UWd1آN 6t:-핶mKux&˲Du %,!J;!4\+S) Wo?c@dGl+VXfͲ nlJ&9W$r fg(ſ=S͖oejmvIzXà3IOFE,cUj"~`e*GLi 0vheʊY - d*ãm% <2e r9AP]]A@*($P(q-R&n/קt"v>_w9!@㨁>hܹG>އR 5鄔ȕէ/-1(Q=y9?9jGNf%T|^wwti|9E)}6YD"j"eRRsYĬj%nxZMꏖiԕ/@zlmK5'2 eZv`t={8 -Y!N!JlDT>86[=ֵ0s?3pDQi7oF,t:mANۭ.⇮}lt~) + ۳X:Yٕ|'W@PG D^BD_o:ajϠ! H|‰X,*dvT$.a`CE1%(8 b*2ś#Z @#a`:R(S1> Us +NtI+⌒Kxd+@Lƾ}PОD'Ϯ>_1%"08e#yim۶kKZʄ2?5ܝe2`ߟ[Om%?e "|""R^󹏕mA.wsz:9\*l&3("qK-("6P.LjP)>0~DOϹ,m0A|]W/a'ꄨgE kƮXuoPx^ec{[>ϣ\<ndGϧF7WXJqL\")NÉtKEB;B|q寜:("`̬()epY]t5|Z^.,:SƬcH BI Oj(J֑{%6xxQ6&r=6͞?j.Q=|bOO '2xFyZgMU5,Cwk_q / }}}^wwJx`?8Lgg'wuux<hٷ,:]Ykj36Q!`?2|EHQ X1Cو)IisZ K-W IfXCѡ^\RzDPfЗZ^cDUfQRK zNMQ'D)>G;bSޗTД-w=NL(G:H0I:=AMjs 99d2޴i&"yϣ152yP[zOMgΜXqim;v0h?h}(RHଗi.F/_mf|}%n奔`eYkmv\>J!D=$@Vp mGTEK&bYPya'@%" t Q(^rNd@ O4: @{<պq-^$'0JBk fYJVoIq`/VK5c\Š+̪UT{jAk=ހU?bKo= ~̺LreAl[3<1 jx#kv&Rև%c/B_d>  xx@'A pj,<*XESeV-F*؝pD~hŽ;;M6Zco۳x?oA!ܜm|p%/ܔ˃\. oL>fgߚ+n]k׌GF>-W B!NL&yx}~K\"4Dg4('cI\tZ#Q"zZ08JՉJJ 𨤟{ \ݫ^_%d&g@?/`up?* B tuu[t( V^-,i 9DZ'IX c7^6ۮ>ߗ_V~ԩS e`޴KB6KyPڏHP<.Jꑴ!*iOVy&0O uUR4< B$ГqKeQMX 2 {^#AI IDATDtxGUWWcK]RX./L;z=ts ypяUL-05gfj{EU9r?$|DF^$ *KT#&`hM3ib3mdcF ͙ vmI`;ZGFֿ5J˜AMDDltZyGŕx̶ZcTPwڥА u3;LO5r#g~w=1d/6ǽVU<"y+,xU:P⯔3o/j"nF+MZXL7/Kr!8h #)C󺜧_ٽP 3'Y(eYrC(L>7}}}P@}}.0s$材55yZ%n$2RGǐ}4pԆ* _Њ !kk@i>pf=҄J[[t2l3 VJNč0kTJ5A1j!30$ڬӺknyr!2Q諯7]Ν;J)2 `ެ4o",_14r? kc͂?r\wBԮ~ ߝw.dSikkqBXB(}wL0u$zu/uc#=PneYڴiTJQ>A4yb析lW/SZF9FI1y9C;nH>$w qKNҜذ.fauW?M_ 3[3\A2Px\qZ#yV&d05;`&}tuf:ڂ#I瀑V.?nut@ HCi}]6Ic#=ߌ1Q9i'<iGm^\A|g{vkUzw#y$~i89\+c+ be? !d'_VdqG`#='77.d < o휳#g͢esp>PWKĪUm4Pvo~cwc֢)Iz}jePEڏ!m4訢Ƈanz4@ޕSMD~~9ѧ9yD=&"^s{{f:)۶ |v} 1%>uN3>v西^?}=|kMbHƐ Pi+ A>yD !$Rԩ3ϴi\soy[c~3BY(Iszǿh"#BmHh28\n` RO*^~5AWkvg5=g8#R샱U/6y9΃qwTނ *w9(>"!=b`aZ֔y V*R4n527|!ãɅm3͝ <3nN:Bl7^.< ֖[)Q ~mnܼGIn1B1s d7&fA<W|^' =00ɤbҲT?Sqwa3a*c+}~+hMfcD |E ]߀Qw^x>p]4;-qFJƸRUH28T~e<[NK!{,̙g)S@Dc .X8˟Q"|AGLȽߧD͂4LIeW9`#ܶM#{QmU>T*ޤi I~@Ťiu-8n>(q3|zr@qsGacC0MPvUG<끎P2@cڜcr;NZn1&p4;FHO"ãɑNC/^ ,[q @}=D^Va.m}6m+?>d+1#|c2,8*(]y6&fS$ٖ}gˤsOD/CQr0(u-|ϦMf@!b×99v}(ӥrוΓ(J{-}8[̵5­3U ЛU6?yH>Cr"Fpk+IJeKRH=oy^vEh3 Ov{śZmI)eBk'"(cbvFT T<+ߏT*{zzL24L |<$=ѣ_?{^maqBp{Y݅1X߇.g%FHO(mm@QOPŏH|}*0Z <ɤ0kz~{ehqv:;8V{01ə&N8E H /~'CM&o)mǙ9B #rfRA<^;Xɢ*vٸJ&\.n۶m#pBM/=[0s8^Sώ1۶}0S[0Q+}q%|7R@Dda,d -Mm4PC⇪~E (Fu&0iß L 3)T,ʩ`zkM4B9ɫMaϜ :dا`Ȳ)U:>wEs q׭l۶mCm}庮rqCFm,#?eY4d"h-l"Y$M3 ,%XIA$4w6'^t*X0_Ϙ9Oi2ӛ0=!0 UC/*6~5qceg"w~/0A]cw]i%yHjl9s ڊ$?P cRJXNEokw]FMGp}y캮5U1^&--rNIPB[B #d,E\0KQr ueQDs903mL:70=,)jfb}soMCoc_)CH^L >!0%Da: R"Gy`-[{2ȹsH/w5D۶avh˲F:"–_}k;\cN;ٝmmmP(y.b1>l=ŤmUr%reYRJZXRk-4)4RR' ̂Yʒ6P$1sc d&0 icVry,n1gM$qm̗-D?^ >o7ˠPN76Hw!e&MVenw13xD/ Ai]u&cޫ%]vS8@R?@q}PvyhbB/zSOllg8\A`Ě! Ok SD1 |`ƅӊ^"eYb "A[xYuQQQ3UPB`W?\uUe7E!ĚΟ=kv г=M 7(飑F?r򼽽rܘ!1e!ϫJ)a!v5юԖ)j2RR',,+4,RjecQB!LIZ1,*!6^*Nm(.Pj=, 1DQӷ91B9 @F~fG\((F8RL;S⏘ ۧg,O; 3_yo\K7o>ɿW nth0򷭭 !/  Ắ4t]8Bk-m#Jg(%R*p]ZtZ_^!`%$d=F<hFMs+ 2xV$a/] L5W zP;GS)$$J&c`Jd7lF[=rf '5Y<G˼ ?81`Aϗv"Ÿ߈ʚrPؖ_hog5&}=}\\P(c A FͅPCH&Zkz-ҞiqT>J*qZ~"`ɛ  u(Jv EXk+R|%/z<P5CV < m mB 0Z3 3a1\f ZwV jC<Qkoį/ ;DŽ3.`^nL83￯?4.o<~״vp|7 :yMA5\x\v-Bxq.*Q)o7^6PFM瞻DnZ' 5H0"f(S${`hS#7\se-I>Mq&ݍ->X<z}<3a9mC:gn޿_$$af+f/ywB8d@mm Q !PsUF^fBz|Ri#\-1vn{Un%''zP$"$!@b{-X.PW +` \) %B 9ɩ{U1k^}R <9e5k|`wLFyT']cNKn3Q,'2)3{9N 1וk c?$r#cru6ϮV> <8 2{#]]]:FN;ڳܥnKS'ȱg|xtk?}=޸g>G@1o\&~X:Wu$ f[:;iN̬ u]hkt!"g! N}  Y -ȥ^_zX7?!868(‡&{ˑ]HzI H9M69s樕+WVW[JJl6i=4ߴk7`裻͸JL A"LLKf)q`Chƶޜ$]%,T-RAXhST n~lZ3-;"9=mvu>|`ftuXWDθ徛?:y%nS(se%R]7!վ5k>SzYZดQ 0v1qަmw@o9 n5{Zoݚ5k|x\ߺ%Tp& X6ؽs0yK> /BPzbײlC.>Xw%_Y_A!Ӊ\J~Qy<]:G3j"x](*U _N=d?5kLޫnˡ3"ӄ9Hŀߎ4\>}-۵H8ЯxLZ~&07/?ǽaÆ VoyZVO, :8V5(Udgc.%;S a/E"6?}70ޚm;~Ka>e`J_ΆJa,!k0zu+t=O\9{ګ==L=u<เ癟I=^|LF?_#ZVzŀhC]eW.Zx|___@8^ ltUt}0`y`z'y8[Jޒƍ%.[Kg:}y5)D\yl-$p|^X1w3=QKH97\qVǧ]]3YL;KѤ"0;אn?|rox=#7쾻~{-%yoU\:Rx>X\] equٚ."%1}]waʕk/lVV#ӾvXB3ҷ@Kmcw3~J<;C`ou<l{Gn&* RMqop'O,S:yr[V&49$ѓRiNI--_q=艈LGzߣOбG>Wf:1-ѨT.-x4uk2`1e%l\u>W6e3i͘{>>c+P.\Z;"qED1 . ;")(k5u*tC:ֆ\ZtzU1qzYlxAm4H{\蝗%J+GL&ǁ"∈ Z 50or3J{OO6t2V =DhBma.vAXw#|laSf lI?l "gˠ+:sճ7,y9ځ0!fqgmݐFcawcpժq`q[ş7BAcA^K6 %Zҟ )ڗF)wITj Y:)(>gvt#nP 2TulL97D(RZ Fߓ;BwGz)Inn")>Sۏ^'"`k܆rNCa pt} m16o<ׅҽ m<0^ <4c UnIl.@{vdg[o7 @3&.Bex\|?%M- H7+]jED;qLfxer*<6qDX׬9QJ0{WؼyS0^'"zo]xXZ(0.@ RDj(gRw8g4LWnh ap[^cbx=W^PLYy8?=\Gw_LeGܯ]ZĴGN|nɎSL ?^j?(w?s;w\sTY!g-  3KP^Hp:/\Ԍ؇Z #d>,k׉ nkW1x5ȫz7^!Dxϥp1ס:ǣ8t>Я']Z]oKoGOz[amlr\A3b+CO:jrY#"$"ܚ>g2"fP9 ŒCyST#" (AuL&Sܰaۿ,AX+Jmv뇆 }O/XDT*Ro:L3G}}}^Us?yg\>u͍y~+ua | XTrFN&и"HyecMU}fR4?ĻzP U)v4cd%&5ٍ!q6NE*3s8N!N{{{};N@߄6<9[4E:yV O<V^q]:""" HR*PJ1-P߼Q#]͋r m^u[c. Vz,#y@&8> U6H5u?sh)p&_ϧ?;WSQW616$$wÈ#q~TM/={7K h|U=6Ow߯jȀY#*s㿣0"(2s@DAA@>8{ډlOhÃKj rͯ m#]~BD̳VFJN^)E$Ӑ7}T\MUCW]3ҷU!v0jʸ'O>}:EQT@kM,D$1_,zY趫;`~"abfk<X>B^& ==}Q"DsXL jJe1Ϊ@_v1:8!ڴQ/ Ŀ |EW jVŪі'jnkpg: -ym^wrTՈWީ,ZGOc)8|}b$${p\v\I"Rq` gbU`y,G#hyܰM0"Kz%N z"G搩[xVFJNu; 8 ) Vݼ!3GJcf3ZkߥS8i~OQPQ\V<}T?t>vR~CʥRf`p.Z*PW7y'}T ~ro9@*EEG{E0ռWzbOS[^sj0gL]6A8-AֺS)!"OI%ng9x[[o޼9)& Z] лL-W̃ӟ7m6\_GF~^t( IġϘB ;(V(3#꾋ï $UKïoZꜛIlZIzx<1AjĠ31H:E])sJY?( ayRl/FhM:XBw鈢}l=JWyNQ[#XmPNKڙAopƬ:T!3###F dAЖJVKwO='_~3p᧸߉D4Q/LH5u<T&Ii=`TjGyN4gs'Вg[M"(\=[1]z6 zJGHg2k|4:ZOFBU"~@EۢowOF&{;V-wRuˤZ7N Q$ɤ)IW?iӟ8Ge&zF޸܂]z6QK^B0|~$Q bq"kۋhIK2VA;EdͮO_w:BD1(z0P33L'+hX%Q"*m0 'nꥴqbo|/7{DZq$j_v8ig@$^rQ}ku0ݦo~~K1X(=mۄ6PQu a8 *r>kԦ܎A"2}`^MӂIRTT 70[4mK=_.y;~ xF BN묚+ۘd90XJ F_4[v"Չ>_o|3f޳Cإo5}BvQ}))2uƴL܏AJ_D0*и8|E+#HLaTI_?VOAE㤝^l'G'u-V߈GO~ `f9^!;1w!TWV|ч?? Ac={)X;}ա_i\׍܇N\gi[`Kd=&r~ m %cӁ㼛ϊE 5zf.QsI;NJ*^A[)t=s7~ؖԦ t˝śQ[[H/ۯW:||,Y'nZ׳?,v[A8KDUIQ=V VwI€s$ˊ#(Bz]z69M}:K ~.V.пTm+?snC4<InF%__ѷZc_$u'v6yj%Asga!⵻K?KO2W,(|??ֈ~|.9Sԙ_1,è8dw݇{瞏mo5_bJd`IL07U}Eba7?{1GyH~eSe J[}03` |X# ' "rDd&pl^7GngL!qW>\.C |"K);Ae ]m?uxU5 -.j s͸w 藾}xcqQuډhm*" ~VPsP<,,:Z]~/_x=iMx?)B׊?㢋^K<+8dq׈1۬kөn>+ *cؕq7nX1ghY=0i`r( #~6#X DԊޙ(,(F M4 cllCD-;/;ȦhD1P [Q'&#(aW5D$lzNJU 0,s N,Κ1Mʖ$&,gp"OC@AD:{'YqJ c<U{߂J5%9%LI_p юfAZa ZkDw%> fGxIYtj'pl,Yi7rhuX_(Vb^x8{ |0k'qSO^ op>U֡,rMY({xS܆>#DtȘI;%+'75Gf[.Ւ?YDL +`>O$]aR\q-%˒G3uσMD | ?Y4B$ʕv8ɢ]0\ÃYX8νOFeAU0"N2 ND'X! IDAT2٭m(f ey5&rqv[^Em;̆` a"Vfduפ:yf^ (n7kTYEFeт`8=m^vo@nQuU;{8e"#bf/cMD9Z^5 D}k4o)߮^/h;Yե4X"0A9mpF٨dwzim:Bhc$d Օ9pkƏ}IX}V@qU @1^"9èz/3fԪ]hзxod.ʠox 0zfԂޅMƥa@^Me"^E e+v[qIU)ֵT'IuM3>qإ_*d4E& (O|2:Y0|=w8AhGQdmmHMu:}~ Z=yt`ކQ^T Ω#++=kxJF0K; ij>^ ֺF`f,~^^VTs f#y5wNr+z0::L"x9p^qHHyռ0[rVvQ%|ظj)GQVV7e '2ރv%ܝsWBp/i= ;QE!"qѷ#.wAc[:-ԅ^&kld yvּDDoځ yLany?HP8`yj[0 =_"x.{n!L0d`Eq7~׾u:LY *K8L*XH9 q vu3㾎E/D4c)h/)c|fmJv*fqC}G`bA.p+K*j\ED߀I ʶ%f=0QI: ":u9IazAy'@㜇jzLVbѰ߫B% XpgpjyXM6X,]{ Z0< 0>qsњmԣq[?xG`ƵqW~3SIݾ #1LqUN":fCD0RIUì5MT;/[(tHam0L%IIJ\1]~Ǝz޻cI{ cvףQiu:W,zd#kAH$ٔUF&o6h[T?cʰW`6Vџ̄YduEqv`ԒeԷ;oA-7,Y9و,Cof@-C_ l*3`k]i0!Y3 `6_Hմ`&)T0 b <|OP}I[`$sbB= [l6`z\7zYd`3ڪ_À:E0g0)#׎/;NVYsIk v=Ծoa@>_(.A󧢁0ڞX`e)!m}9{a\ujt4dG"=x9oϵ5sYFO 4+IFAXG تLveinQU3?~v8};`R}if­oBLe+t/yYl<tsu$d7@vAdxb}' `$ okx3ס2qk=F0a$ig,6*껙4xf2J-ֈ cy.k%Bm tm> ctLT4u4&Z7Ċ_5zTD`J(ov17fg϶I$V=j$I*$y$P1L*IDi":.ߢYyciA\o[~QaMSIy߄_3%a@=V_- f7M"U*g%-+ \űtFlVORәGk]=NQٺ5広m0GaVU i?joh뺯_j.ZKT DQT>i-2wİ=&R@ODtZrg_E AaD^TuV8jiekkN 1T)PJUf憵5V@8I 8J9 6>UKyIa!z~Iږjf„ Q]k)V-~<DJc JMrHl zx`fszʘl%Np uJ  d6"l"kG( (R"FDN p#dpF`5T*~7JeKR([+<Өy^q.%_0BD/8Br D䵷w zf6V/"嶂`vi\n!cm-b []u  kԵ@J8ݝGۈhR3cECks "y0:܌t:]( ֖"M@TXv1MYMAdy^E'1_3@EEO)Zdkh h6&)Y'^Ԁ-NÌY井E7l ~'ђ3LAD'TiΛ!fBofY8HմRnt;À~ `x#+iQ,(Kv+~u85Z0FI&e S6eJI"`&_k0 Lq7.dn]+cU!fuUT5r9bK=3ˠ0N"RQ""NhDk]TJ RJ A`ܖNWB QnyPPkoI*Ҿہ6mvm[ngWWڲeKWo 514D%t-Ԩ5b}ugD_┡t:R-)c+aYXCiM2B$t,tZ@~^(FQstcgYlٲe F衡 R$k,ACcLNoE%DE#E ( ]X,\wLẠُP{4H$`^j:Fgg'6lhEH '"fŢ_JC/W{|~|>JUTlN:nŘyq$g8掾yLW5ޟ 1k(ӌ3httT)/NŢf+7 ""s=j"uSJM@E̺*HFM>|>50D 1((ˁcRA6:րEi뢈Aowt:=]7S_&3r,6J:@Dd&bpMTBN:F @pt$Ϟ=`lj<"b|q֚Rb!~L&cc;̙s)dK}?VD4u]uAD a(O)7ϊ@絬VWv^\(A`gƪUjC`w ( ˇa8200PD@eԭ.@kq0x%SHpC۝S(v8v:;;x"AH=m+筬)-T'zKD(U09UEe2Da" 1oD P7@4m 7ʖl^ dY8N"2۠ Q$9EfcS'6L&3~rZ@Dp&{lϙ FP B.kxsgV w 3i-9R=Zx9xkxr \ ! 4-~ĉZq$ 9On (eNOzy\Uz֚7C" _IHڶڨ 0 +Hre2c,t{C?oA"H+@A@F (F%iOy qU:*1qR .+p"Ͷ0lnC0TvdL#Xqi&f iG8Sh,vEȡo,ԛNCm0 %j+‡ɍ" `hh]'5{& #Rc??8)#د;J OB!h.0u,E{qROoذaŋӷv[M'gϞaFJ褫, ECP 0 ]]]ʕ+#2c /H+!g庱ĀffA88 Ŝb3%h%rcB)Lx[K]]/rhLNwb'"? ҁZQt+*"B'}n6Nu]7JUWOӦMCPxj%!vZj9y.1֊8(3g##1X8 14iE5kZ6(-)Q`_{ Tv~CCCA@B]ZhvUD* k}]v@Y|`ڣV_C̛(MfW3s^?бajycD hBG!LU,MQrPkȍZ ڊ` Gc/Zɑ𭡡ޢE>Pt*~`={ŰEbŊzIӦMQr]Ux\!5xp5N'8]sf^\EZm '8})idنk Lf{XSmǣ0"^MN2=K˖-kƖ-[ں&v~_DfRU裐*\1*wwwCD!ْ\%~@Dx3 :G-/+Q(b`gk̛.%l($@KU@бrfRCO eAR@c2눘oWnZh#;r2kBpR*f͚RaiӦ#Jv]n-Aނ(>uuu-ҳD@uG~|@UUbTk]'0qLЬT41]vdf坒@Nu9Tf>x⤮/~F'㎛# C6C-UL! VH ݓm4cD\h <7at9;쌈Dc6eNeJ9*Ѱ5lFR*KPU:=3m@]߲;}rܹ L5T;"ED52T-Yr̼HGZ@@G2Q*+WV"Qv'癙A}aڴ']dr~-[Fl: _њ}aL&CCCujf%8Tiȃd;zQR9&eYq[ RQfucGy)*b;uR0't8UY5~~ 3pjkQ(^h&4,[^m yQp bO}&L˚EanI9ri"ۀwFx@kVJ97d/ZGbNLE0z;Ǝ͡bHYx)բ+MXzmPl]$#a&ӝKCf\(\"@`&.]rgp #Eg…]prife}' 2 =Pn9`-屴m9G6ÌzybdTZe[9 tdϞ~D8#ΦW^uU իsmmT7DD ɷ}_㦛n|'` D8It Z@ yu CCC#<@M17Dh~=$ӴbdisDxD= 4d['vz+u 2\ zf zfB_t 7T/^ʩ7rw fR{0KblWpx( »uX+V0|v=])u*JZQ?=޿Wݠlt<M*I lv! 8>D"4 "h=Ek7O)Riя8,\{RDIDATN;0:%=D*ԷP$r^m/]zڇO?㔣49ZdhWF0ė^rSg w?%рΨ&ȥqJD{Z)6T~׿uCrz6ʪ- f1a :L)ODlͦ6 ļQbb"b",,=t+W11>8A$φܡE?A_Hb| ">S -՚F bf KD$GD[7:}))(2mi ,,bf p,"z_~^h;Cz&'+"mu*DƦq1h-rGFa 57gEil/^3?F=׹^ G: BT4OMZ˥ z| \" E#p :S/`J)0(bdj3KD*AsDDH|S?4}^sb^!bޝ@Lx-i&'n-[NJ Xa : 1'Kpݝ5$ vlWΟ磬-*e~:Ĭ B7+$QHVCY-_@B"Mz@3' Pa"$!EQF/[DDLӂ(*^F #DO=ǙO]LDA q'yu-GAAHX\ |p*)'ve˜KX0MC{qNt vRTF agWDw/X! .+ } iJ ,itDiL@y0 ѠoU$7xضe˗Q]r<b@ Dr:0J^&q:}7`hH XkW\D[0lMf9Ã̰VzU~( i yJ^¿9)8DM:Di jsȲe˜^dΗ4S$JEr`鄦v@ 1eGxTvٱ;x C(`PZ&SorE y%*G<7 ?vnq,Tt3 DB24K ZkYs!!Wi{ZvAKZ- S]Um\CRDPd E业$QA8??_滽p~կQX򢌈t)Q`ȓHYĦ:U'PH*be HI9fV*30ucM}bb"͞={yMaDS+0xPAث*QZc4 H]V]tG婧@? .UԈ#`#V%e;N,ֺW@_ݝ $`]Bq7d1w0 ;ѣGOx1upW^ye Xc˶JDFSDl t  %,iY>??冪W_}u9YkQQXE{8m"b3Sjz* M`քY!<=5"l8,gp!3wFZB]UI ' RE-PVKtH,Q*8f&e"GDq!5]U9z___[ ժ!{fiOXc[؃L7KB WUh=[!f4??2FW^yeӳ@40QTQEFu9!#T d]IDhvEcBf/0XF,{b3#N`Az&&&088`n,3QR5kDbD~l zg:a:SWfK޳͑W x9%(nYXH(ꌤ+r.f I5̀ilO;18hOtBsI=R:2ÎY"%HLjZ#""F֕52ƸG}e_ovL&Sd2ފ*8V`Dı: #G/w/%B2$g-o!ۄGbrL ݵg-taaW}8{RTe+e. ,X4xyl̑jWRgb{=f#Q)/'AIXW4$ C$I֣$V[Xw$A6EЇI$Z C= ࠬ9ZJ*ai.Hрٰ7 "X$z]='$_>%PPÃEQbU5e4xÑWOZ =8Ø_j;ό(I$A-Ih|2zp%E ԄMlK֒"WukT[ 'I 0&b40^z=Ҁ|_o<AƘЧm8A'kƍ|1Ec>NRў={9ouz펻-#v!KK⭵9k?=&3Cs@K+PS)T*FJ34`:UvVd2ZT(ɘ0 M:ff6Ap9TuM$I"Q0;X[[ݼmQt:唦iEsgEpߵkЗ]Hh~~/=<ttthww...J;aAZXX;v裏>}}}gm[zhbbb&qj˵440HJ:V&iz!;4ݺ.ϧ]y/SÃHw殮%Z[[nmm˹9=2N(+sk{,,,4K288ȭ~{v}-'@8e=ֲZu;圖I^y!8tQUahsy:zy^iキf3JymmfWN62~m^el;6ۼvmyl*cUƶoͫFy%P.F]! |; 6 %0@\Q)<ɵM]AVw{uP*zAQ0 Lf w2۷/<[4|_Mqut{0٨ }[ x}(xKMӝ)(HZ~ aHc'??s c?.U} ȽT.|PxQ*M^ 7qaqzpGm=_¯xk;[9#~Q*O@3| d/, wVk|| D6r]~kABFD ϔSfGb @*1埁ݒK+ `  eGNU*zaji=l>›_r<^)\n_,L|; ~`(;vtgpH\o߾hȽ^hڔ#G.}&#l>i=&?R9~@peLO~^774Ho)LX^>z=sUwGB! wAn^;rp+/V硡It"rxB;@ {C.7r8< oF[ ׭Gc(<ß*]VM5'bz`+nm=m:< z,@™t?ozz@ o@qx>nW*JW{CCCϋ24tKӅgCřC{ ]ߧSbz28m'9==uxm| ^T+%h?0>>B|Mic/+y@oT?ŏo^3iT j]mN@/S6;r\o<7s6!_d#W4gӿ@!]Dԝy||\p6 i>K9sAuxgEpNˑNR44Wr#@;Et VAu <$dmKzAҝQ*W\Npfˍ=T*f? 6#m755Gz|87:b8WmqZ, i RCCC+r!"sڝ?8\v錒VGG%:/mOQmT|v=`'RPv)L6V™P8QڐbB$@.{h4ɛSh::-AT9N祈`/[佹-',f&SNjoUr7ޛr.ϸ;R5Op-"i :By c(vigf@rጝr (e6- op1CY(K6-V@h:gn{'x7Tyj˕i87G~l[< 3==xX@?!*q$}S43s[>ljp܊\.W"5T< Qn R> '?0]PRѯlNaOk(󝥙@x;) 6lz9TJ"#_!(''y[,o}Hvˤ Oz׶&|OEg궩K"~R:8I_P& 榧_qS?>O) + c/cjr@jo=xIR7Ksrªwo-ĝ̵~+>]*V[VoL788g_*ҝQ%Ǡ_lkf[/ image/svg+xml systemtap logo Andy Fitzsimon, Red Hat 2008 systemtap systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.png000066400000000000000000000036251414446751200305320ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATh]lWww޵wg㴉T؎Ǝ !4 8Pߚ`C RT}!g) }HHRBRQƖ? "Bhשϙ쮽3; 4{{sW}֊HІ[JB˅z:Xu͟f2+Wᡂ }{%i S1Zl}rQrQyo5ޥTQ28=>g?&| XM~0t?ҫE:'qɏ>!b@Qc=Oھ%to۾;x'z/,1xEd^<&?vbl&i m֓ %=BaϾsO?Dx4<zӶCB݇wMOX" js|<a4F[]ca6x޶}w֎2lcaJ obC2RDj{ w| %jԵ+ox h |u5zޑ<bU@gGobD|d.n"V ޾]GGȋ(Qqt^4Jl`N`,7D{N־zv,FÌ`}W ErKK'񂖱DMlE:D8]/*@BM~l2V,KK{FLz'涌է9IJZ'cEXA 6YZȗ歷Nu&=#n(}WEyz B"_AwLc-Bzɤ}8F6`/R;>E@Kyd: ۪m PO5wo2'Oha:Hˑ 'y`Ʃ&@!ܙ>hאMy@t _ >LʻNԇj6-x@ˤc>`$&9@Kx-vT)!nT$1Ed"F4A kRȆI6`؇} ޿ݤ,=!\?dk<ځ\eqC.G|ɹG p % ع8cph˒/Vehk,Nbfw(*e d ??Ɯ ټ1ټTX;5q[Fgo<,piw-ߜsaR;–}(O{㋭nhk@T#ǖLޟG%Qe{,R._%: bK95q*W%.͖}i*(tsՂ S%JTtg {kWްE+Hfg"V_/0Ƈ ^G{Tڪ۹8]9}%y{h}R-b*?Ce÷In6"–M'BH͟a~֌'UnjnH^=TbG(FhA͏`,1w % Q-P' *ePP-З¿kKEx1{f[+3Ց0|' o_oH.<8#[-CQTQ<8#%@S\忮$TY~i#foFVw:pCL((g&00EXZ^ռsOǵɰYukAțoOƫ3bIENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/warning.svg000066400000000000000000000127441414446751200305470ustar00rootroot00000000000000 image/svg+xml systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/watermark-draft.png000066400000000000000000000614251414446751200321620ustar00rootroot00000000000000PNG  IHDRߊbKGD pHYs B(xtIME !? IDATxu%ewYt%۾! Np $$Xp.I  C^,NpiXpfx xx)}V !_?VO]//f/%B!Z'+[#lZ_.13}룀7W׀ׁՁ݀U|ST`6VwD.6!=p^ 毥ϻlR:L5~enq`A:5o,0e*緽, BԾ>lAuv fIЅB/ ͪ>88>ѝ !Dop#R6n[t!-B7x;/_Wn>}·T?Ip3@!Z./K샀#2fbJwY3t!B>8ذϳFtI콒] lQKN] ]!zb< w)+kQOw2ڮ.,t%B|,]70fg/wrJνE:g5&k ]V%q1_8X̟/')A.x<ߛV9(``zES!DCB>7|N,׃f@.J"a(n~.%a4-Y+! !Dх|j4ʯM'oUCx +kr=h]!Z)ۤY99'p^0{3H`&`vz]!&KTD|`i7(IN9X/!B.Z+y'=׺/}&Y``6NmM!/pM(``ZW9@0;_x [O +$B%3/J܎~uQx6z  fOٗc7aYsW- !|p=S;ډs6pheC` 8˒-z lG0Ѕ5ssIM361Oq3;q%]-j`6hWTO !Dy؝)] :%ƣ,)z h,[,F KЅU[l)h- _. fKπ]<$BJ we f``vpʲfUq;xHr BGJkzz zgMh=T_ f$n\|! B>}0 pf0ۿ1V8X`` = .(,_6Yx3;U9S1"mlkB.Z*e{NfḂ  1ْϳ̪;ꡚ !D%7@ۺ̟?f;OSz'<4\y~쭂I~l*kEud`vz]! 4xJJiMf'7+Ob4[n_N~W.MlRڣ[C,~$n5J0LNclb.:|F0{ϤsxHމzʣHqBfx41kne1;j,}oWCV 6$/ (裁𭇕ً{b6㯇1TӴ[淋i.hp-f붨opc=ǼV5|woeε*q5"6σ ..ILfŗCg|ԯZrcv<R풿OGe㎸ZX}X$)P<Ҡ9Y !:x]ė/k7XXׄq-G[ZÁ,$musOQm-xZړҎ,+8YY1cfBvI* /\gi6YҚf V,=i4sJЅe}s*rR>)`{\BӚV`Sڶ\DNA$B$˲;86m355C^Gs fcxu`ς^~۟gw bY7(CE|9*(4`p?9qڂi^Lx4CB! n;[cOH3Zfm57~mpjă_Ux_N xɆ̎(X{Bv;h ' y?`Zr:xur̺ef_ʋ=QFp|npe6߽e 1l}pn)f|Y NTIvt!Dd ꙩ*Jf}sq';ٲD¿#bM㱸1 b l f/=g1n-Pm: 10qh`ɹ֢oY W3y~t}}Fߗ\gQX/s~ |[T*&Uٺ7wMkp&`m}%ՍO?БڸlT֎a#\vpMbۦVg{#`vWӠ^>& 5C )ɕy>˸{Je줢y,;=k+fϦ˸ygׁ>YmB ߩg0K[U g\gQ8ݯz7%B_gb,3uBɿۖSm>.X{,Ƴ`¢K+_ge1OY 35~{47wB6k"m4D;t!D ׀,ƃq_Syl`zgz,nrfbOЯENo?VJ"pE罒*'FFkiu 7 !J6^^:G)ڮx6)_vj5.l+8$!mAջo8-Tu^gQ8?_/ ㆌ(p-"c)QGI{̏S/ e1 zIw{)LKuKj˒Wp xz> !Z=X5ִ^^Ӛ>P. $2,i@߽ Qg{ܜ~QZ=,3>m`vZOG$Bt Ռ9䢂5j<|L ̀[—~jُ 4w3*w;3Y.e5@4ʃlPcl~,Uq ߺ=n fwK}2w0̾J+#KТti||_^.h)ă|7%H0;pI~(mkj}l{`&_U8``6:of'xn21EUk J4<-USn+껞:6IЅM6ӚZ2P~R2?WMVGX}H0hiMS\\Hu -`k.r"U[〛(\]Z1lf Νv^&̵*kۘ*yZ.h/f1ޝD`v^sv9 O0{O Vvu V:f``ߗnóuc v/v Ytߏpm}pz,xJӃir*=`{g{ϲKeCfiyF1x,}F~ԵLt&o{䑪vlzQ:!}uމg6mt!,aVhB}CZXv+^ST5lj8rWOPn+Ocrt0{ s+YC e
    #>;PI*]m9ꐴy>3x=("mL0[?[C=I(.*G Ѝ hвK_!/YW[W9wNb b1 8 !Sz<tS|LwkpJ~EIYy8s w%ss.wwrL|⯂x{8%w݅|$X쿁kp*}"d1 1M~Hɳ_d1P~~L[W_ fP_Ewx6+/1y0۬Hb8]㉸v}S$]ͩIl{0ou';*i6/2T/ÁM:au9LYGf1n,AB7q<>m%d0@m'qG(P:)TϺl$ޞGO#xZk9hTr/LY،'Sk[<>â<Ŭ Fi|ԒNb&p63_-]Vpl,KqxZV)UG݅9۬S/.0$R`iZfWj(Nt!_ Yknoǭld$%wQl!o~-G18[$1b2`TU Mxr*r$Gu>V@o1`#1뾋<'>Ʒ\>J~=.Ng$3/;%+%%XUnVP3 ͨm03k^R`vh'uχbyHk㡙ma1_(ӡ]pό[J~t6{XU^Nrß3p;V1N0{Y.+w?q?-iݧrUh8-djƗQb@ س>})qc|8\.{}sQZX||p0h9ʻ`Jh)Q9_ۦ)쨨9~0e|XKE^,pK!9{3``mi X倧S̀V7~M,b'g}e<:%l9yl~E?_vWp{`{.-"cZx?#͑ixolS[tڇ{ <9Uzyqi׾t & nrf%eu,?Z,< \̾Exir*<З hs,a֭H3Ÿ-ϗ%/UYV+s^mTͩȏ}5i%袵|x`-r,ҋj`nPxW['x-8 +B f{h\ _Y="'vGC<Ӧs Cl nRυdzo> xؼ×ӫe:|jϜ~7^'It0| G욡>}Ó9s*[|_eB˱ݷj;߶^KuOi^OK;Q{HwS|TDWK/ =EG3K +9E|~t|4Y1"'`I/oaik5Ã,۵Jzh˖v%fO/S]IYU&T`vroõZO>o/ҋÅ2-h]Tzg*GpOcPUʵEu zxC7 f6Z`6)q?:]٥Uz&JY|N~: vV n4C-|L3r*C w#^-A}7NȩQ)9q{rv0[0tc&2A#4ZjpWO<OY_(d]㩖 fg&6l֡%-=cA9p8.sBjy[om:9+`/m< L6+ ?\yLhs,tl_">>'X.Z[.Scs?u =ݾv fn]#u5ҪaErJ~N:2D2=1} žpt|0Rq7ySw{YcG~ 2 _!S=Sgx;a"F͢}oLWpY#p@/˕5C5{#k5+@H`o~*^Ktr)v f.ۦѸD}bzyπ| 8q$qxR7*C=]| y&v"X}f]iM'דcŸI0{^ ^x5otv0Sg}jho`r4OO hTOݑO..yg—Ld/`o ˳/Oe1n[[ &Utzi_5"iTfj=STx .!LsBfx`scf^ f;硸t;rY7na _z,L4j=`&f-t|4++"KYEG,i~&&ooy Y_e6qF8ptW؊{)GP[F(>bI8ƭ/ fGT(kqRs},[TK _i܁z3%0gyz.*R8,Ax܀=ڍsyF(d!Ab ^r,>bI{[iҤSXdLTK nSlSZ} H<<ؗPl 6Ʀ@h\oyn/X^_ ۴II\'!A-{1y-/KB#IHXbgۿG%b/F}[as4nt ,Ҡ޿}ltS194+op󊔓;d htnK%=5,^<9hNEK㊴XyG"Z>e?2B_3`=|iټ֠? ̮b||\NÃ#mH|MdzWM/7ݗ,}]~w\V.Z/mc1 7/4i_`}Z$6 fNNmݪ7P#X`GoAl"(X^9.[׿J"~G0c۶FSH=-w==Խ/1ǔx#/V,^orm 4jw pV0{9w&<ʩT[9``62qL|"0cgGY⁄>nN%wП|.bF,x Yqۃkp5JE>[щ4bӌ/EG,i HX{Э>?v^ʚ3]mRݚnL nh|+B"nNb `)``vyVfy~xefi>KnT<ő躪=#ao\,kb{Km+>f1OL?]=fN+䴴U{|H`vtVrw=ƜUB^H! _6b[X1oO8 {%L[xN b- qt|#Kg#K88`PNifs ps0 !A-}]rkw }xaYO`tZYC}-S0<\oµ6ۘToY܎ֿʽxKmK .§oȱŲ49k-G%?kbXܭ(UƜmCށ>KgG9;$}TCL)_f$yDJ,nQG.'j<|7^1gs[' yWO?/>Qf-{Sو O}ZQuiaX1Y~%ܗzjԾudAz|::xV 잂9'2ٸsB޺+Z"ͩ=~/RW>ĭ5[>q+R]0aPy/NXдKq-`sO3&e1/^y?NlT㻸V#+2K x`Uu_`7ܘ'9.nzFZQ) = g1ޅfMwU\G;9ʏăt M0~ka.kBmq7D0۫`b3<_ss\H[pK&_LB\`mw]Ix"r*)``c0F[Q+C[73RQ[8qܭ7G q_c6,مesFG!T'þhr-FgC7io'KÊ,=½fϩ؏Cˋf*$=QJ;8d4#m㯔O`G6p{;wJ؎/-+m) 4#|I4?'Q:<, 8/y{-+su_BNfiЯDeD{%-C.LJve KB~{7mei2u.mYEO/bWQ5{9 fk?0'[y~_6|ɽ/fP=ު3/й5s29i^c⍸e=}$ոl'Byv`vk2>D~b|XU[ Bqwfg1۩Ui=w'Cr;NTK)I0Of WH+1Tiu>hɽ}n:s_Ԣ#1ofG'O{ORKRo7gݞZ/cδWz!bAnAQ`rfphj`hos`nE}65n$@0[3om84_mb\!,< Ь94tmYg1vOjbnvFNb>8/ۚ|g;lŀUo48Ңb'?^ oH*-PQ+/MPܿ{\TO k`M;e%g/+U`yQ^dWWnbc. IDAT_/s9YgGs\h^_M:CnrSV 9Ti4}f?ޤy[ݑ`^ msy-)\ohfh,ƽhy } fOt^p׫[qngË򚸝99 885Tw U36x-cڇ{ gASoԟ> "z,?fSՀm--&V_-+Xy^fk zDhO%zw5MK/6IDvf:!o)]̩p3٘dӜ,x,U0B^P1GcKk t]}p%=8ŏ1O7&}Fz4Io!h_G#b?. f5YVj\O`0 wLق VDB+-'ٓ{VWģ-Scq{?ό(_`2) fWZ6je"`}s*p8`6@xƪ[(oo[ zE,J4og>op ][X7}`rZ7[d<oqffm;^D^x5ݿuGZYUz0{$&z!y m.}G y< mE<}+EO7&gw w\3z)LpQ):TAx7o<@@4} u}A#}ӂ(6 Բd19YVy>z^L9lT0;w!ۏɻ>O(r$B{5%qt)UW<`4n'[&A Y| ,̮+i4J0.}GIH{,aY!7O>OQw눅ފ0LJmH0;-qW' kO@KG5 =Ҡ[+G,s&r}7ZQ+##k,ƾR/p]7 ?}ZE’{ 6n.p=pc0Ԃ='} <-s{ܓ>Mc˗MOc KoBjA^xZc_g1~f!<,y ve0:'g,-3UsʴjPs`$Pv`(xMqW tv&sC&oXMx24l !A':E``v{ M3Er/f{>IiB`8 |ո^7]̶nWZ} EĂ5o)Nɍ<=WT5ub^Y`6**7`pA < p@u}l,+o{{VD zA 1^e.`w}0k7~V~oN~yוM:mK/wYm F6c1]pͧz~,r,yRrqZW},jû[S75\אQHB/qoM`Ϝ-``\ zt=#s:~D^uю3Ŗ^֤T?b=`d+YK;U5hVƷ[Wne(1_xwECↂBHkbiv9ej:|T153aըYS%Z|{\5BMQKtT_7M|p-]xV3 `vj m{GK02~[īҬrNNu]YYvn^" ~g0s9kBq_,9w`3|?y~~wLŃY} 3G٪}C@kCܸ* B^_כj098vNm7wʓ-j<cx8E7fmYX⣁?TWÓ='1[ z?.d`[R&˧.M<_v]CN4G*}`619 #5d/Q~?U^P+u~}40o0r;\9ƍj4[Yg͝-= m5o$s^p;6H9Si~ގx'HC1E/滁qu~wjglB0"i6J`W``c07+ u.ϱKLN/7{;_|; ਜԿ z^ݕu~`p5 Dj&xH<yֻŸ`<`m 29ugLeաJFN?C"`As㒭B38΀[7`#p|Uj tfO&$wŀ;ll3ن{p/zߙX|;8!HF#8ʠ:f]Y 0("" k \"[$J{}h:UUUsNNz~wH _Tf`.5{%EҧkS2cK*";YN2ڃc(R:Hi:0Hi"Ӏ-|Ypj?&V`&fZm<&c6,RFD3nY?祈ېӖsKs}b>DUFHPDIxe( t,UOtV{9͌n֤luڟFL|QeV_{X_N.Rzoz)RHDrFMov\\t{-0|- Oh6ѪYϝ28ֳAT}{wν̫eMAH8d@}6q9<2m:9G˥j9Z4ހs-k1 thKֆ9jRmV 䫕9P:KM- 'Fug_-sn%_jGG$84'9'GUxW]C%UDg)-@|G)ѝ|EeTt{.WU~P}oR1J0P|1 ܷf_C1f?3z[-N`f"0qՒII'*Fo9:;H5 <֒ו9Z[h2痶OW=vKj%FyػL0/s~euvMOM0K_1׮Jx_x[ݦkZpEuH2j:H#-no;g/$?vlBTLH:֦9{eMo!f_]2/ Ab p1F)m:X{܌{k+6ػ9C=Aȍ-lLD_7ָ"=&1Wu7Y@Lzl$)G['9侤S9Φcs˜6I?iƫ 37%j赚&?Hibs'ҁUeļt=f KMQ?=tvt[m]H{+S#L1&9Uu0Q}XXزHsI8mO1@ n6*u{KҵUFSܿv%.'U 2IljÁۈkt?)]'T/?O*Rz{iu"5Oߕ< ]&"i ڟc9bݗ>GƎf5߁5߀/'VY$ɀ|݊.n6} 8}O-ĐI:&n%,DnX@ Z$8/SdJ?Z/}Kv*R6Dս7vɅuc]O沵|HT_mަCf1s'y˜GTO0?^lZt\=|/lD\o5zy10H6n.E v2pY`jJl"̿yDYKtI2/@2a~+`:Hi6=>U*Rz=RONRJGK`4-R:m-ވΆn 2D峡mg2'`MwED#"ɀ_} ?)ĄicqPEJ[4+VAIJO6i*Rޓ{I.'oS!ɀ߁} ')^ϱ)6V$R~^ +^Ìj`.5{l~ $'V`_vM;9|h&&ivFuUttC+cI0XpJҳ j4`CdkcUpS$=52㩿 k>pLzhl\wAపB$t:X3ߖcɔׁo̹"/%*=gVIݴ`+Rӫ[=V1m.4S`^/ɀ/m x0U lץ~1|^;6R :4HZZro_9 wO$Ey ^U9Xc-)O$kwkiN,R:WnB0Kʜ2jx͸pG$ 3\ZHd't8Hiv倽 vLj{)Rr]Rz{|شſ_XZ{[_MDB+zii.5\Pd}j.T*s}'hqDn)epIe+ *MV~SX2&f)s6mj"=O_D\#?op'%ՒzCP&5db9[#~B@Ku[q::}=v1{_lwZT=tu3@̺nfGEJ:b=["tEJOxdI2kiҜH)kY "mҰӹ2WeMohԏwL ,4"]ύ49GwD0x]Π{/GNsItuңp V"|-/#.+l|b" =t$;'2ϒ&֓_ԃ{2O$Ŝ1<K䠟#ɀ^Z"o~KʜW>'͗5HssU$ɀ_v*wEJ,by#DYӵ; 1ap("AHIt'ImEH k}#oѡ&tIrN\wBIt# ^9E eUJ鵯I_꙯ԡ`"3ʜŲ P`{p[PZիy Y`NҹeWuL{z5qZ)_LF x2O9oG]ķwgǁ 撖ErTѓxwuNEJ` Na=> SW/I*ܗN|Ab]=|q1DZn6kKjhwzTIZ9tNIeU{.uNwMs7"] d@_j-R|.pOY2 z=3hBߏsi``"_x$I󼆾t9ՍjNm4i;2Á/YuTbLsEJyHҒޣʜ'9ˇ h)^DK|S jYYĒP!֧oXM1C~18:gw)-}F syarߏ-sMuxHiζJ imbWo}Ryi')=!I)/Od8۫[l ukd5,5,BL[PժrcDZʜ KE7êWG$5\H <`RI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$IZܫmB{IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Common_Content/images/yellow.png000066400000000000000000000002571414446751200303760ustar00rootroot00000000000000PNG  IHDRtsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<,IDATc'+???K]?2?^Y2`$IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/CrossInstrumenting.xml000066400000000000000000000277231414446751200265770ustar00rootroot00000000000000
    Generating Instrumentation for Other Computers cross-instrumentation building kernel modules from SystemTap scripts cross-instrumentation generating instrumentation from SystemTap scripts cross-compiling script from here: http://sourceware.org/ml/systemtap/2008-q3/msg00310.html kernel modules from SystemTap scripts, building building kernel modules from SystemTap scripts instrumentation modules from SystemTap scripts, building building instrumentation modules from SystemTap scripts compiling instrumentation/kernel modules from SystemTap scripts cross-compiling above; add short description, significance, howto, script (test first) When users run a SystemTap script, SystemTap builds a kernel module out of that script. SystemTap then loads the module into the kernel, allowing it to extract the specified data directly from the kernel (refer to in for more information). Normally, however, SystemTap scripts can only be run on systems where SystemTap is deployed (as in ). This could mean that if you want to run SystemTap on ten systems, you would need to deploy SystemTap on all those systems. In some cases, this may be neither feasible nor desired. For instance, corporate policy may prohibit an administrator from installing RPM packages that provide compilers or debug information on specific machines, and thus prevent the deployment of SystemTap. To work around this problem, SystemTap allows you to use cross-instrumentation. Cross-instrumentation is the process of generating SystemTap instrumentation module from a SystemTap script on one computer to be used on another computer. This process offers the following benefits: cross-instrumentation advantages of advantages of cross-instrumentation The kernel information packages for various machines can be installed on a single host machine. Each target machine only needs one RPM package to be installed in order to use the generated SystemTap instrumentation module: the systemtap-runtime package. For the sake of simplicity, the following terms are used throughout this section: cross-instrumentation instrumentation module instrumentation module cross-instrumentation Instrumentation module — the kernel module built from a SystemTap script. The SystemTap module is built on the host system, and will be loaded on the target kernel of target system. cross-instrumentation host system host system cross-instrumentation Host system — the system on which you compile the instrumentation modules from SystemTap scripts in order to load them on target systems. cross-instrumentation target system target system cross-instrumentation Target system — the system for which you are building the instrumentation modules from SystemTap scripts. cross-instrumentation target kernel target kernel cross-instrumentation Target kernel — the kernel of the target system. This is the kernel on which you intend to load or run the instrumentation module. To configure a host system and target systems, complete the following steps: cross-instrumentation configuration host system and target system host system and target system cross-instrumentation configuration target system and host system configuration Install the systemtap-runtime package on each target system. Determine the kernel running on each target system by running the uname -r command on each of these systems. Install SystemTap on the host system. You will be building the instrumentation module for the target systems on the host system. For instructions on how to install SystemTap, refer to . Using the target kernel version determined earlier, install the target kernel and related RPM packages on the host system as described in . If multiple target systems use different target kernels, repeat this step for each different kernel used on the target systems. After completing these steps, you can now build the instrumentation module (for any target system) on the host system. To build the instrumentation module, run the following command on the host system (be sure to specify the appropriate values): stap -p4 -r kernel_version script -m module_name Here, kernel_version refers to the version of the target kernel (the output of the uname -r command on the target machine), script refers to the script to be converted into the instrumentation module, and module_name is the desired name of the instrumentation module. Note uname -m determining architecture notation architecture notation, determining To determine the architecture notation of a running kernel, you can run the following command: uname -m Once the instrumentation module is compiled, copy it to the target system and then load it using: staprun module_name.ko For example, to create the instrumentation module simple.ko from a SystemTap script named simple.stp for the target kernel 2.6.18-92.1.10.el5 (on x86_64 architecture), use the following command: stap -r 2.6.18-92.1.10.el5 -e 'probe vfs.read {exit()}' -m simple This creates a module named simple.ko. To use this instrumentation module, copy it to the target system and run the following command (on the target system): staprun simple.ko Important The host system must be the same architecture and running the same distribution of Linux as the target system in order for the built instrumentation module to work.
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Errors.xml000066400000000000000000000671041414446751200241700ustar00rootroot00000000000000 Understanding SystemTap Errors By type - http://sourceware.org/systemtap/tutorial/node23.html This chapter explains the most common errors you may encounter while using SystemTap.
    Parse and Semantic Errors understanding SystemTap errors parse/semantics error errors parse/semantics error parse/semantics error understanding SystemTap errors Parse and semantic errors occur while SystemTap attempts to parse and translate the script into C, before converting it into a kernel module. For example, type errors result from operations that assign invalid values to variables or arrays. parse error: expected foo, saw bar understanding SystemTap errors parse/semantics error invalid values to variables/arrays errors parse/semantics error invalid values to variables/arrays parse/semantics error understanding SystemTap errors invalid values to variables/arrays invalid values to variables/arrays parse/semantics error understanding SystemTap errors understanding SystemTap errors parse/semantics error grammatical/typographical script error errors parse/semantics error grammatical/typographical script error parse/semantics error understanding SystemTap errors grammatical/typographical script error grammatical/typographical script error parse/semantics error understanding SystemTap errors typographical script error parse/semantics error understanding SystemTap errors The script contains a grammatical or typographical error. SystemTap detected the type of the construct that is incorrect, given the context of the probe. need more clarification (example) on this; could not replicate. how to replicate? For example, the following invalid SystemTap script is missing its probe handlers: An attempt to run this SystemTap script fails with the following error message showing that the parser expects something other than the probe keyword in column 1 of line 2: parse error: expected one of '. , ( ? ! { = +=' saw: keyword at perror.stp:2:1 1 parse error(s). parse error: embedded code in unprivileged script understanding SystemTap errors parse/semantics error embedded code in unprivileged script errors parse/semantics error embedded code in unprivileged script parse/semantics error understanding SystemTap errors embedded code in unprivileged script embedded code in unprivileged script parse/semantics error understanding SystemTap errors unprivileged script, embedded code in parse/semantics error understanding SystemTap errors unsafe embedded code in unprivileged script parse/semantics error understanding SystemTap errors The script contains unsafe embedded C code, that is, blocks of code surrounded by %{ and %}. SystemTap allows you to embed C code in a script, which is useful if there are no tapsets to suit your purposes. However, embedded C constructs are not safe and SystemTap reports this error to warn you if such constructs appear in the script. understanding SystemTap errors parse/semantics error guru mode errors parse/semantics error guru mode parse/semantics error understanding SystemTap errors guru mode guru mode parse/semantics error understanding SystemTap errors If you are sure that any similar constructs in the script are safe and you are a member of the stapdev group (or have root privileges), run the script in "guru" mode by using the option: stap -g script semantic error: type mismatch for identifier 'foo' ... string vs. long understanding SystemTap errors parse/semantics error type mismatch for identifier errors parse/semantics error type mismatch for identifier parse/semantics error understanding SystemTap errors type mismatch for identifier type mismatch for identifier parse/semantics error understanding SystemTap errors identifier type mismatch parse/semantics error understanding SystemTap errors The function foo in the script used the wrong type (such as %s or %d). In the following example, the format specifier should be %s and not %d, because the execname() function returns a string: probe syscall.open { printf ("%d(%d) open\n", execname(), pid()) } semantic error: unresolved type for identifier 'foo' understanding SystemTap errors parse/semantics error unresolved type for identifier errors parse/semantics error unresolved type for identifier parse/semantics error understanding SystemTap errors unresolved type for identifier unresolved type for identifier parse/semantics error understanding SystemTap errors The identifier (variable) was used, but no type (integer or string) could be determined. This occurs, for instance, if you use a variable in a printf statement while the script never assigns a value to the variable. semantic error: Expecting symbol or array index expression understanding SystemTap errors parse/semantics error expected symbol/array index expression errors parse/semantics error expected symbol/array index expression parse/semantics error understanding SystemTap errors expected symbol/array index expression expected symbol/array index expression parse/semantics error understanding SystemTap errors SystemTap could not assign a value to a variable or to a location in an array. The destination for the assignment is not a valid destination. The following example code would generate this error: while searching for arity N function, semantic error: unresolved function call understanding SystemTap errors parse/semantics error unresolved function call errors parse/semantics error unresolved function call parse/semantics error understanding SystemTap errors unresolved function call unresolved function call parse/semantics error understanding SystemTap errors function call (unresolved) parse/semantics error understanding SystemTap errors A function call or array index expression in the script used an invalid number of arguments or parameters. In SystemTap, arity can either refer to the number of indices for an array, or the number of parameters to a function. semantic error: array locals not supported, missing global declaration? array locals not supported parse/semantics error understanding SystemTap errors understanding SystemTap errors parse/semantics error non-global arrays errors parse/semantics error non-global arrays parse/semantics error understanding SystemTap errors non-global arrays non-global arrays parse/semantics error understanding SystemTap errors The script used an array operation without declaring the array as a global variable (global variables can be declared after their use in SystemTap scripts). Similar messages appear if an array is used, but with inconsistent arities. semantic error: variable 'foo' modified during 'foreach' iteration understanding SystemTap errors parse/semantics error variable modified during 'foreach' errors parse/semantics error variable modified during 'foreach' parse/semantics error understanding SystemTap errors variable modified during 'foreach' variable modified during 'foreach' parse/semantics error understanding SystemTap errors The array foo is being modified (being assigned to or deleted from) within an active foreach loop. This error also displays if an operation within the script performs a function call within the foreach loop. semantic error: probe point mismatch at position N, while resolving probe point foo understanding SystemTap errors parse/semantics error probe mismatch errors parse/semantics error probe mismatch parse/semantics error understanding SystemTap errors probe mismatch probe mismatch parse/semantics error understanding SystemTap errors SystemTap did not understand what the event or SystemTap function foo refers to. This usually means that SystemTap could not find a match for foo in the tapset library. N refers to the line and column of the error. how to explain N in previous? "The divergence from the “tree” of probe point namespace is at position N (starting with zero at left)." (from tutorial) semantic error: no match for probe point, while resolving probe point foo understanding SystemTap errors parse/semantics error no match for probe point errors parse/semantics error no match for probe point parse/semantics error understanding SystemTap errors no match for probe point no match for probe point parse/semantics error understanding SystemTap errors probe point (no match for) parse/semantics error understanding SystemTap errors SystemTap could not resolve the events or handler function foo for a variety of reasons. This error occurs when the script contains the event kernel.function("something"), and something does not exist. In some cases, the error could also mean the script contains an invalid kernel file name or source line number. semantic error: unresolved target-symbol expression understanding SystemTap errors parse/semantics error unresolved target-symbol expression errors parse/semantics error unresolved target-symbol expression parse/semantics error understanding SystemTap errors unresolved target-symbol expression unresolved target-symbol expression parse/semantics error understanding SystemTap errors target-symbol expression, unresolved parse/semantics error understanding SystemTap errors A handler in the script references a target variable, but the value of the variable could not be resolved. This error could also mean that a handler is referencing a target variable that is not valid in the context when it was referenced. This may be a result of compiler optimization of the generated code. semantic error: libdwfl failure understanding SystemTap errors parse/semantics error libdwfl failure errors parse/semantics error libdwfl failure parse/semantics error understanding SystemTap errors libdwfl failure libdwfl failure parse/semantics error understanding SystemTap errors There was a problem processing the debugging information. In most cases, this error results from the installation of a kernel-debuginfo package whose version does not match the probed kernel exactly. The installed kernel-debuginfo package itself may have some consistency or correctness problems. semantic error: cannot find foo debuginfo SystemTap could not find a suitable kernel-debuginfo package.
    Runtime Errors and Warnings understainding SystemTap errors runtime errors/warnings errors runtime errors/warnings runtime errors/warnings understainding SystemTap errors Runtime errors and warnings occur when the SystemTap instrumentation has been installed and is collecting data on the system. WARNING: Number of errors: N, skipped probes: M understainding SystemTap errors runtime errors/warnings number of errors: N, skipped probes: M errors runtime errors/warnings number of errors: N, skipped probes: M runtime errors/warnings understainding SystemTap errors number of errors: N, skipped probes: M number of errors: N, skipped probes: M runtime errors/warnings understainding SystemTap errors Errors and/or skipped probes occurred during this run. Both N and M are the counts of the number of probes that were not executed due to conditions such as too much time required to execute event handlers over an interval of time. division by 0 understainding SystemTap errors runtime errors/warnings division by 0 errors runtime errors/warnings division by 0 runtime errors/warnings understainding SystemTap errors division by 0 division by 0 runtime errors/warnings understainding SystemTap errors invalid division runtime errors/warnings understainding SystemTap errors The script code performed an invalid division. aggregate element not found understainding SystemTap errors runtime errors/warnings aggregate element not found errors runtime errors/warnings aggregate element not found runtime errors/warnings understainding SystemTap errors aggregate element not found aggregate element not found runtime errors/warnings understainding SystemTap errors A statistics extractor function other than @count was invoked on an aggregate that has not had any values accumulated yet. This is similar to a division by zero. aggregation overflow understainding SystemTap errors runtime errors/warnings aggregation overflow errors runtime errors/warnings aggregation overflow runtime errors/warnings understainding SystemTap errors aggregation overflow aggregation overflow runtime errors/warnings understainding SystemTap errors overflow of aggregation runtime errors/warnings understainding SystemTap errors An array containing aggregate values contains too many distinct key pairs at this time. MAXNESTING exceeded understainding SystemTap errors runtime errors/warnings MAXNESTING exceeded errors runtime errors/warnings MAXNESTING exceeded runtime errors/warnings understainding SystemTap errors MAXNESTING exceeded MAXNESTING exceeded runtime errors/warnings understainding SystemTap errors exceeded MAXNESTING runtime errors/warnings understainding SystemTap errors Too many levels of function call nesting were attempted. The default nesting of function calls allowed is 10. MAXACTION exceeded understainding SystemTap errors runtime errors/warnings MAXACTION exceeded errors runtime errors/warnings MAXACTION exceeded runtime errors/warnings understainding SystemTap errors MAXACTION exceeded MAXACTION exceeded runtime errors/warnings understainding SystemTap errors exceeded MAXACTION runtime errors/warnings understainding SystemTap errors The probe handler attempted to execute too many statements in the probe handler. The default number of actions allowed in a probe handler is 1000. kernel/user string copy fault at ADDR understainding SystemTap errors runtime errors/warnings copy fault errors runtime errors/warnings copy fault runtime errors/warnings understainding SystemTap errors copy fault copy fault runtime errors/warnings understainding SystemTap errors The probe handler attempted to copy a string from kernel or user space at an invalid address (ADDR). pointer dereference fault understainding SystemTap errors runtime errors/warnings pointer dereference fault errors runtime errors/warnings pointer dereference fault runtime errors/warnings understainding SystemTap errors pointer dereference fault pointer dereference fault runtime errors/warnings understainding SystemTap errors There was a fault encountered during a pointer dereference operation such as a target variable evaluation.
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Feedback.xml000066400000000000000000000022371414446751200243740ustar00rootroot00000000000000 %BOOK_ENTITIES; ]>
    We Need Feedback! feedback contact information for this manual If you find a typographical error in this manual, or if you have thought of a way to make this manual better, we would love to hear from you! Please submit a report in Bugzilla: http://sourceware.org/bugzilla/ against the product systemtap. When submitting a report, be sure to include the specific file or URL the report refers to and the manual's identifier: &BOOKID; If you have a suggestion for improving the documentation, try to be as specific as possible when describing it. If you have found an error, please include the section number and some of the surrounding text so we can find it easily.
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Installation.xml000066400000000000000000000236321414446751200253530ustar00rootroot00000000000000
    Installation and Setup required packages, installation thru yum, repos (?); possibly, a script to install all required packages notes in ~/Desktop/SystemTap/aug21chatlog and ~/Desktop/SystemTap/noted_wcohenmeeting Installation Setup and Installation Setup and Installation To deploy SystemTap, install the SystemTap packages along with the corresponding set of -devel, -debuginfo, and -debuginfo-common packages for your kernel. If your system has multiple kernels installed and you intend to use SystemTap on more than one of them, also install the -devel and -debuginfo packages for each of those kernel versions. The following sections discuss the installation procedures in greater detail. Important Many users confuse -debuginfo with -debug. Remember that the deployment of SystemTap requires the installation of the -debuginfo package of the kernel, not the -debug version of the kernel.
    Installing SystemTap To deploy SystemTap, install the following RPM packages: Installation systemtap package systemtap package Installation systemtap-runtime package systemtap-runtime package systemtap systemtap-runtime To do so, run the following command as root: yum install systemtap systemtap-runtime Note that before using SystemTap, you still need to install the required kernel information packages. On modern systems, run the following command as root to install these packages: stap-prep If this command does not work, try manual installation as described below.
    Installing Required Kernel Information Packages Manually Installation required packages required packages packages required to run SystemTap RPMs required to run SystemTap Installation kernel information packages kernel information packages SystemTap needs information about the kernel in order to place instrumentation in it (in other words, probe it). This information also allows SystemTap to generate the code for the instrumentation. The required information is contained in the matching -devel, -debuginfo, and -debuginfo-common packages for your kernel. The necessary -devel and -debuginfo packages for the ordinary "vanilla" kernel are as follows: kernel-debuginfo kernel-debuginfo-common kernel-devel Likewise, the necessary packages for the PAE kernel are kernel-PAE-debuginfo, kernel-PAE-debuginfo-common, and kernel-PAE-devel. Installation kernel version, determining the kernel version, determining the determining the kernel version uname -r To determine what kernel your system is currently using, use: uname -r For example, if you intend to use SystemTap on kernel version 2.6.18-53.el5 on an i686 machine, download and install the following RPM packages: kernel-debuginfo-2.6.18-53.1.13.el5.i686.rpm kernel-debuginfo-common-2.6.18-53.1.13.el5.i686.rpm kernel-devel-2.6.18-53.1.13.el5.i686.rpm Important The version, variant, and architecture of the -devel, -debuginfo and -debuginfo-common packages must match the kernel you wish to probe with SystemTap exactly. The easiest way to install the required kernel information packages is through yum install and debuginfo-install commands. The debuginfo-install command is included with later versions of the yum-utils package (for example, version 1.1.10) and also requires an appropriate yum repository from which to download and install -debuginfo and -debuginfo-common packages. You can install the required -devel, -debuginfo, and -debuginfo-common packages for your kernel. When the appropriate software repositories are enabled, install the corresponding packages for a specific kernel with the following commands: yum install kernelname-devel-version debuginfo-install kernelname-version Replace kernelname with the appropriate kernel variant name (for example, ), and version with the target kernel's version. For example, to install the required kernel information packages for the kernel-PAE-2.6.18-53.1.13.el5 kernel, run: yum install kernel-PAE-devel-2.6.18-53.1.13.el5 debuginfo-install kernel-PAE-2.6.18-53.1.13.el5 Once you have manually downloaded the required packages to the machine, run the following command as root to install them: rpm --force -ivh package_names
    Initial Testing Installation initial testing initial testing testing, initial If you are currently using the kernel you intend to probe with SystemTap, you can immediately test whether the deployment was successful. If not, you restart the system and load the appropriate kernel. To start the test, run the following command: stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' This command instructs SystemTap to print read performed and then exit properly once a virtual file system read is detected. If the SystemTap deployment was successful, it prints output similar to the following: Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/260sys/568real ms. Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in 490usr/430sys/938real ms. Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in 3310usr/430sys/3714real ms. Pass 5: starting run. read performed Pass 5: run completed in 10usr/40sys/73real ms. The last three lines of the output (beginning with Pass 5) indicate that SystemTap was able to successfully create the instrumentation to probe the kernel, run the instrumentation, detect the event being probed (in this case, a virtual file system read), and execute a valid handler (print text then close it with no errors).
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Introduction.xml000066400000000000000000000174261414446751200253770ustar00rootroot00000000000000 %BOOK_ENTITIES; ]> Introduction Introduction performance monitoring performance monitoring Introduction SystemTap is a tracing and probing tool that allows users to study and monitor the activities of the computer system (particularly, the kernel) in fine detail. It provides information similar to the output of tools like netstat, ps, top, and iostat, but is designed to provide more filtering and analysis options for collected information.
    Documentation Goals Introduction documentation goals documentation goals Introduction Introduction goals, documentation goals, documentation Introduction SystemTap provides the infrastructure to monitor the running Linux kernel for detailed analysis. This can assist administrators and developers in identifying the underlying cause of a bug or performance problem. Without SystemTap, monitoring the activity of a running kernel would require a tedious instrument, recompile, install, and reboot sequence. SystemTap is designed to eliminate this and allows users to gather the same information by running user-written SystemTap scripts. SystemTap was initially designed for users with intermediate to advanced knowledge of the kernel. As a consequence, it is less useful to administrators or developers with limited knowledge of and experience with the Linux kernel. Moreover, much of the existing SystemTap documentation is aimed at knowledgeable and experienced users, which makes learning the tool similarly difficult. To lower these barriers, the SystemTap Beginners Guide was written with the following goals: to introduce users to SystemTap, familiarize them with its architecture, and provide setup instructions; to provide pre-written SystemTap scripts for monitoring detailed activity in different components of the system, along with instructions on how to run them and analyze their output. above, Short description on the underlying goals of SystemTap_Beginners_Guide, what we want to teach users.
    SystemTap Capabilities ** Short summary; when is SystemTap suitable vs other popular monitoring tools such as top, Oprofile or /proc Introduction capabilities of SystemTap capabilities of SystemTap Introduction Flexibility: SystemTap's framework allows users to develop simple scripts for investigating and monitoring a wide variety of kernel functions, system calls, and other events that occur in kernel space. As a result, SystemTap is not so much a tool as it is a system that allows you to develop your own kernel-specific forensic and monitoring tools. Ease of use: as mentioned earlier, SystemTap allows users to probe kernel-space events without having to resort to instrument, recompile, install, and reboot the kernel. Most of the SystemTap scripts enumerated in demonstrate system forensics and monitoring capabilities not natively available with other similar tools (such as top, oprofile, or ps). These scripts are provided to give readers extensive examples of the application of SystemTap and to educate them further on the capabilities they can employ when writing their own SystemTap scripts.
    Limitations of SystemTap Introduction limitations of SystemTap limitations of SystemTap Introduction The current iteration of SystemTap allows for a multitude of options when probing kernel-space events for a wide range of kernels. However, SystemTap's ability to probe user-space events depends on kernel support (the Utrace mechanism) that is not available in many kernels. As a consequence, only some kernel versions support user-space probing. At present, the developmental efforts of the SystemTap community are geared towards improving SystemTap's user-space probing capabilities.
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Legal_Notice.xml000066400000000000000000000017171414446751200252370ustar00rootroot00000000000000 This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Preface.xml000066400000000000000000000011411414446751200242460ustar00rootroot00000000000000 Preface systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/References.xml000066400000000000000000000103561414446751200247720ustar00rootroot00000000000000 References display links to other useful, more advanced systemtap docs - http://sourceware.org/systemtap/documentation.html, http://sourceware.org/systemtap/wiki/HomePage This chapter enumerates other references for more information about SystemTap. Refer to these sources in the course of writing advanced probes and tapsets. SystemTap Wiki The SystemTap Wiki is a collection of links and articles related to the deployment, usage, and development of SystemTap. You can find it at . SystemTap Tutorial Much of the content in this book comes from the SystemTap Tutorial. The SystemTap Tutorial is a more appropriate reference for users with intermediate to advanced knowledge of C++ and kernel development, and you can find it at . man stapprobes The stapprobes3stap man page enumerates a variety of probe points supported by SystemTap, along with additional aliases defined by the SystemTap tapset library. The bottom part of the man page includes a list of other man pages enumerating similar probe points for specific system components, such as tapset::scsi, tapset::kprocess, tapset::signal, and so on. man stapfuncs The stapfuncs3stap man page enumerates numerous functions supported by the SystemTap tapset library, along with the prescribed syntax for each of them. Note, however, that it does not provide a complete list of all supported functions; there are more undocumented functions available. SystemTap Tapset Reference Manual The SystemTap Tapset Reference Manual describes the individual predefined functions and probe points of the tapsets in greater detail. You can find it at . SystemTap Language Reference The SystemTap Language Reference is a comprehensive reference of SystemTap's language constructs and syntax. It is recommended for users with a rudimentary to intermediate knowledge of C++ and other similar programming languages, and is available to all users at . Tapset Developers Guide Once you have sufficient proficiency in writing SystemTap scripts, you can try to write your own tapsets. The Tapset Developers Guide describes how to add functions to your tapset library. Test Suite The systemtap-testsuite package allows you to test the entire SystemTap toolchain without having to build it from source code. In addition, it also contains numerous examples of SystemTap scripts to study and test; some of these scripts are also documented in . By default, the example scripts included in systemtap-testsuite are located in the /usr/share/systemtap/testsuite/systemtap.examples/ directory. systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Revision_History.xml000066400000000000000000000043471414446751200262330ustar00rootroot00000000000000 Revision History 2.0-1 Mon Jul 20 2009 Don Domingo ddomingo@redhat.com includes 5.4 minor updates and additional script "dropwatch.stp" 1.0-1 Wed Jun 17 2009 Don Domingo ddomingo@redhat.com Building+pushing to RHEL systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/ScriptConstructs.xml000066400000000000000000000657501414446751200262550ustar00rootroot00000000000000
    Basic SystemTap Handler Constructs handlers SystemTap handler constructs SystemTap handlers SystemTap handler constructs handlers SystemTap handler constructs syntax and format SystemTap handlers SystemTap handler constructs syntax and format syntax and format SystemTap handler constructs handlers SystemTap supports the use of several basic constructs in handlers. The syntax for most of these handler constructs are mostly based on C and awk syntax. This section describes several of the most useful SystemTap handler constructs, which should provide you with enough information to write simple yet useful SystemTap scripts.
    Variables handlers SystemTap handler constructs variables SystemTap statements SystemTap handler constructs variables variables SystemTap handler constructs handlers format and syntax SystemTap handler constructs handlers Variables can be used freely throughout a handler; simply choose a name, assign a value from a function or expression to it, and use it in an expression. SystemTap automatically identifies whether a variable should be typed as a string or integer, based on the type of the values assigned to it. For instance, if you use set the variable foo to gettimeofday_s() (as in foo = gettimeofday_s()), then foo is typed as a number and can be printed in a printf() with the integer format specifier (%d). handlers SystemTap handler constructs global SystemTap statements SystemTap handler constructs global global SystemTap handler constructs handlers Note, however, that by default variables are only local to the probe they are used in. This means that variables are initialized, used and disposed at each probe handler invocation. To share a variable between probes, declare the variable name using global outside of the probes. Consider the following example: timer-jiffies.stp global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } CONFIG_HZ, computing for computes the CONFIG_HZ setting of the kernel using timers that count jiffies and milliseconds, then computing accordingly. The global statement allows the script to use the variables count_jiffies and count_ms (set in their own respective probes) to be shared with probe timer.ms(12345). Note The ++ notation in (that is, count_jiffies ++ and count_ms ++) is used to increment the value of a variable by 1. In the following probe, count_jiffies is incremented by 1 every 100 jiffies: probe timer.jiffies(100) { count_jiffies ++ } In this instance, SystemTap understands that count_jiffies is an integer. Because no initial value was assigned to count_jiffies, its initial value is zero by default.
    Target Variables handlers target variables target variables The probe events that map to actual locations in the code (for example kernel.function("function") and kernel.statement("statement")) allow the use of target variables to obtain the value of variables visible at that location in the code. You can use the -L option to list the target variable available at a probe point. If the debug information is installed for the running kernel, you can run the following command to find out what target variables are available for the vfs_read function: stap -L 'kernel.function("vfs_read")' This will yield something similar to the following: kernel.function("vfs_read@fs/read_write.c:277") $file:struct file* $buf:char* $count:size_t $pos:loff_t* Each target variable is proceeded by a $ and the type of the target variable follows the :. The kernel's vfs_read function has $file (pointer to structure describing the file), $buf (pointer to the user-space memory to store the read data), $count (number of bytes to read), and $pos (position to start reading from in the file) target variables at the entry to the function. When a target variable is not local to the probe point, like a global external variable or a file local static variable defined in another file then it can be referenced through @var("varname@src/file.c"). It is also supported to specify an executable or library file path as the second argument, as in @var("varname", "/path/to/exe/or/lib") SystemTap tracks the typing information of the target variable and can examine the fields of a structure with the -> operator. The -> operator can be chained to look at data structures contained within data structures and follow pointers to other data structures. The -> operator will obtain the value in the field of the structure. The -> operator is used regardless whether accessing a field in a substructure or accessing another structure through a pointer. For example to access a field of the static files_stat target variable defined in fs/file_table.c (which holds some of the current file system sysctl tunables), one could write: stap -e 'probe kernel.function("vfs_read") { printf ("current files_stat max_files: %d\n", @var("files_stat@fs/file_table.c")->max_files); exit(); }' Which will yield something similar to the following: current files_stat max_files: 386070 For pointers to base types such as integers and strings there are a number of functions listed below to access kernel-space data. The first argument for each functions is the pointer to the data item. Similar functions are described in for accessing target variables in user-space code. kernel_char(address) Obtain the character at address from kernel memory. kernel_short(address) Obtain the short at address from kernel memory. kernel_int(address) Obtain the int at address from kernel memory. kernel_long(address) Obtain the long at address from kernel memory kernel_string(address) Obtain the string at address from kernel memory. kernel_string_n(address, n) Obtain the string at address from the kernel memory and limits the string to n bytes.
    Pretty Printing Target Variables target variables pretty printing SystemTap scripts are often used to observe what is happening within the code. In many cases just printing the values of the various context variables is sufficient. SystemTap makes a number operations available that can generate printable strings for target variables: $$vars Expands to a character string that is equivalent to sprintf("parm1=%x ... parmN=%x var1=%x ... varN=%x", parm1, ..., parmN, var1, ..., varN) for each variable in scope at the probe point. Some values may be printed as =? if their run-time location cannot be found. $$locals Expands to a subset of $$vars containing only the local variables. $$parms Expands to a subset of $$vars containing only the function parameters. $$return Is available in return probes only. It expands to a string that is equivalent to sprintf("return=%x", $return) if the probed function has a return value, or else an empty string. Below is a command-line script that prints the values of the parameters passed into the function vfs_read: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms); exit(); }' There are four parameters passed into vfs_read: file, buf, count, and pos. The $$parms generates a string for the parameters passed into the function. In this case all but the count parameter are pointers. The following is an example of the output from the previous command-line script: file=0xffff8800b40d4c80 buf=0x7fff634403e0 count=0x2004 pos=0xffff8800af96df48 Having the address a pointer points to may not be useful. Instead the fields of the data structure the pointer points to may be of more use. Use the $ suffix to pretty print the data structure. The following command-line example uses the pretty printing suffix to print more details about the data structures passed into the function vfs_read: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms$); exit(); }' The previous command line will generate something similar to the following with the fields of the data structure included in the output: file={.f_u={...}, .f_path={...}, .f_op=0xffffffffa06e1d80, .f_lock={...}, .f_count={...}, .f_flags=34818, .f_mode=31, .f_pos=0, .f_owner={...}, .f_cred=0xffff88013148fc80, .f_ra={...}, .f_version=0, .f_security=0xffff8800b8dce560, .private_data=0x0, .f_ep_links={...}, .f_mapping=0xffff880037f8fdf8} buf="" count=8196 pos=-131938753921208 With the $ suffix fields that are composed of data structures are not expanded. The $$ suffix will print the values contained within the nested data structures. Below is an example using the $$ suffix: stap -e 'probe kernel.function("vfs_read") {printf("%s\n", $$parms$$); exit(); }' The $$ suffix, like all strings, is limited to the maximum string size. Below is a representative output from the previous command-line script, which is truncated because of the string size limit: file={.f_u={.fu_list={.next=0xffff8801336ca0e8, .prev=0xffff88012ded0840}, .fu_rcuhead={.next=0xffff8801336ca0e8, .func=0xffff88012ded0840}}, .f_path={.mnt=0xffff880132fc97c0, .dentry=0xffff88001a889cc0}, .f_op=0xffffffffa06f64c0, .f_lock={.raw_lock={.slock=196611}}, .f_count={.counter=2}, .f_flags=34818, .f_mode=31, .f_pos=0, .f_owner={.lock={.raw_lock={.lock=16777216}}, .pid=0x0, .pid_type=0, .uid=0, .euid=0, .signum=0}, .f_cred=0xffff880130129a80, .f_ra={.start=0, .size=0, .async_size=0, .ra_pages=32, .
    Typecasting target variables typecasting In most cases SystemTap can determine a variable's type from the debug information. However, code may use void pointers for variables (for example memory allocation routines) and typing information is not available. Also the typing information available within a probe handler is not available within a function; SystemTap functions arguments use a long in place of a typed pointer. SystemTap's @cast operator (first available in SystemTap 0.9) can be used to indicate the correct type of the object. The is from the task.stp tapset. The function returns the value of the state field from a task_struct pointed to by the long task. The first argument of the @cast operator, task, is the pointer to the object. The second argument is the type to cast the object to, task_struct. The third argument lists what file that the type definition information comes from and is optional. With the @cast operator the various fields of this particular task_struct task can be accessed; in this example the state field is obtained. Casting Example
    Checking Target Variable Availability target variables variable availability As code evolves the target variables available may change. The @defined makes it easier to handle those variations in the available target variables. The @defined provides a test to see if a particular target variable is available. The result of this test can be used to select the appropriate expression. The from the memory.stp tapset provides an probe event alias. Some version of the kernel functions being probed have an argument $flags. When available, the $flags argument is used to generate the local variable write_access. The versions of the probed functions that do not have the $flags argument have a $write argument and that is used instead for the local variable write_access. Testing target variable available Example
    Conditional Statements handlers conditional statements SystemTap statements conditional statements In some cases, the output of a SystemTap script may be too large. To address this, you need to further refine the script's logic in order to delimit the output into something more relevant or useful to your probe. Do this by using conditionals in handlers. SystemTap accepts the following types of conditional statements: If/Else Statements handlers conditional statements if/else SystemTap statements conditional statements if/else if/else conditional statements handlers Format: if (condition) statement1 else statement2 The statement1 is executed if the condition expression is non-zero. The statement2 is executed if the condition expression is zero. The else clause (else statement2) is optional. Both statement1 and statement2 can be statement blocks. ifelse.stp global countread, countnonread probe kernel.function("vfs_read"),kernel.function("vfs_write") { if (probefunc()=="vfs_read") countread ++ else countnonread ++ } probe timer.s(5) { exit() } probe end { printf("VFS reads total %d\n VFS writes total %d\n", countread, countnonread) } is a script that counts how many virtual file system reads (vfs_read) and writes (vfs_write) the system performs within a 5-second span. When run, the script increments the value of the variable countread by 1 if the name of the function it probed matches vfs_read (as noted by the condition if (probefunc()=="vfs_read")); otherwise, it increments countnonread (else {countnonread ++}). While Loops handlers conditional statements while loops SystemTap statements conditional statements while loops while loops conditional statements handlers Format: while (condition) statement So long as condition is non-zero the block of statements in statement are executed. The statement is often a statement block and it must change a value so condition will eventually be zero. For Loops handlers conditional statements for loops SystemTap statements conditional statements for loops for loops conditional statements handlers Format: for (initialization; conditional; increment) statement The for loop is shorthand for a while loop. The following is the equivalent while loop: initialization while (conditional) { statement increment } need simple, simple examples for FOR and WHILE Conditional Operators handlers conditional statements conditional operators SystemTap statements conditional statements conditional operators conditional operators conditional statements handlers Aside from == ("is equal to"), following operators can also be used in conditional statements: >= Greater than or equal to <= Less than or equal to != Is not equal to
    Command-Line Arguments handlers SystemTap handler constructs command-line arguments SystemTap statements SystemTap handler constructs command-line arguments command-line arguments SystemTap handler constructs handlers A SystemTap script can also accept simple command-line arguments using a $ or @ immediately followed by the number of the argument on the command line. Use $ if you are expecting the user to enter an integer as a command-line argument, and @ if you are expecting a string. commandlineargs.stp probe kernel.function(@1) { } probe kernel.function(@1).return { } is similar to , except that it allows you to pass the kernel function to be probed as a command-line argument (as in stap commandlineargs.stp kernel function). You can also specify the script to accept multiple command-line arguments, noting them as @1, @2, and so on, in the order they are entered by the user. handlers SystemTap handler constructs variable notations SystemTap statements SystemTap handler constructs variable notations variable notations SystemTap handler constructs handlers
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Scripts.xml000066400000000000000000001125621414446751200243420ustar00rootroot00000000000000
    SystemTap Scripts scripts introduction SystemTap scripts introduction For the most part, SystemTap scripts are the foundation of each SystemTap session. SystemTap scripts instruct SystemTap on what type of information to collect, and what to do once that information is collected. scripts introduction components SystemTap scripts introduction components components SystemTap scripts introduction scripts introduction events and handlers SystemTap scripts introduction events and handlers handlers and events SystemTap scripts introduction As stated in , SystemTap scripts are made up of two components: events and handlers. Once a SystemTap session is underway, SystemTap monitors the operating system for the specified events and executes the handlers as they occur. Note scripts introduction probes SystemTap scripts introduction probes probes SystemTap scripts introduction An event and its corresponding handler is collectively called a probe. A SystemTap script can have multiple probes. A probe's handler is commonly referred to as a probe body. In terms of application development, using events and handlers is similar to instrumenting the code by inserting diagnostic print statements in a program's sequence of commands. These diagnostic print statements allow you to view a history of commands executed once the program is run. SystemTap scripts allow insertion of the instrumentation code without recompilation of the code and allows more flexibility with regard to handlers. Events serve as the triggers for handlers to run; handlers can be specified to record specified data and print it in a certain manner. Format scripts introduction format and syntax SystemTap scripts introduction format and syntax format and syntax SystemTap scripts introduction syntax and format SystemTap scripts introduction SystemTap scripts use the file extension .stp, and contains probes written in the following format: probe event {statements} SystemTap supports multiple events per probe; multiple events are delimited by a comma (,). If multiple events are specified in a single probe, SystemTap will execute the handler when any of the specified events occur. scripts introduction statement blocks SystemTap scripts introduction statement blocks statement blocks SystemTap scripts introduction Each probe has a corresponding statement block. This statement block is enclosed in braces ({ }) and contains the statements to be executed per event. SystemTap executes these statements in sequence; special separators or terminators are generally not necessary between multiple statements. Note Statement blocks in SystemTap scripts follow the same syntax and semantics as the C programming language. A statement block can be nested within another statement block. scripts introduction functions SystemTap scripts introduction functions functions SystemTap scripts introduction SystemTap allows you to write functions to factor out code to be used by a number of probes. Thus, rather than repeatedly writing the same series of statements in multiple probes, you can just place the instructions in a function, as in: function function_name(arguments) {statements} probe event {function_name(arguments)} The statements in function_name are executed when the probe for event executes. The arguments are optional values passed into the function. Important is designed to introduce readers to the basics of SystemTap scripts. To understand SystemTap scripts better, it is advisable that you refer to ; each section therein provides a detailed explanation of the script, its events, handlers, and expected output.
    Event Events introduction SystemTap events can be broadly classified into two types: synchronous and asynchronous. Synchronous Events Events synchronous events synchronous events Events A synchronous event occurs when any process executes an instruction at a particular location in kernel code. This gives other events a reference point from which more contextual data may be available. Events examples of synchronous and asynchronous events examples of synchronous and asynchronous events Events Examples of synchronous events include: syscall.system_call Events syscall.system_call syscall.system_call Events The entry to the system call system_call. If the exit from a syscall is desired, appending a .return to the event monitor the exit of the system call instead. For example, to specify the entry and exit of the system call close, use syscall.close and syscall.close.return respectively. vfs.file_operation Events vfs.file_operation vfs.file_operation Events The entry to the file_operation event for Virtual File System (VFS). Similar to syscall event, appending a .return to the event monitors the exit of the file_operation operation. kernel.function("function") Events kernel.function("function") kernel.function("function") Events The entry to the kernel function function. For example, kernel.function("sys_open") refers to the "event" that occurs when the kernel function sys_open is called by any thread in the system. To specify the return of the kernel function sys_open, append the return string to the event statement; that is, kernel.function("sys_open").return. Events wildcards wildcards in events events wildcards When defining probe events, you can use asterisk (*) for wildcards. You can also trace the entry or exit of a function in a kernel source file. Consider the following example: wildcards.stp probe kernel.function("*@net/socket.c") { } probe kernel.function("*@net/socket.c").return { } Wild cards also work for other types of events, for example syscall.* In the previous example, the first probe's event specifies the entry of ALL functions in the kernel source file net/socket.c. The second probe specifies the exit of all those functions. Note that in this example, there are no statements in the handler; as such, no information will be collected or displayed. kernel.trace("tracepoint") tracepoint Events kernel.trace("tracepoint") kernel.trace("tracepoint") Events The static probe for tracepoint. Recent kernels (2.6.30 and newer) include instrumentation for specific events in the kernel. These events are statically marked with tracepoints. One example of a tracepoint available in systemtap is kernel.trace("kfree_skb") which indicates each time a network buffer is freed in the kernel. module("module").function("function") Events module("module") module("module") Events Allows you to probe functions within modules. For example: moduleprobe.stp probe module("ext3").function("*") { } probe module("ext3").function("*").return { } The first probe in points to the entry of all functions for the ext3 module. The second probe points to the exits of all functions for that same module; the use of the .return suffix is similar to kernel.function(). Note that the probes in do not contain statements in the probe handlers, and as such will not print any useful data (as in ). A system's kernel modules are typically located in /lib/modules/kernel_version, where kernel_version refers to the currently loaded kernel version. Modules use the file name extension .ko. Asynchronous Events Events asynchronous events asynchronous events Events Asynchronous events are not tied to a particular instruction or location in code. This family of probe points consists mainly of counters, timers, and similar constructs. Examples of asynchronous events include: begin Events begin begin Events The startup of a SystemTap session; that is, as soon as the SystemTap script is run. end Events end end Events The end of a SystemTap session. timer events Events timer events timer events Events An event that specifies a handler to be executed periodically. For example: timer-s.stp probe timer.s(4) { printf("hello world\n") } is an example of a probe that prints hello world every 4 seconds. It is also possible to use the following timer events: timer.ms(milliseconds) timer.us(microseconds) timer.ns(nanoseconds) timer.hz(hertz) timer.jiffies(jiffies) When used in conjunction with other probes that collect information, timer events allows you to print out get periodic updates and see how that information changes over time. Important SystemTap supports the use of a large collection of probe events. For more information about supported events, refer to man stapprobes. The SEE ALSO section of man stapprobes also contains links to other man pages that discuss supported events for specific subsystems and components. is reference appropriate? too advanced for readers (it seems so to me)? please advise.
    SystemTap Handler/Body handlers introduction Consider the following sample script: helloworld.stp probe begin { printf ("hello world\n") exit () } In , the event begin (that is, the start of the session) triggers the handler enclosed in { }, which simply prints hello world followed by a new-line, then exits. Note functions (used in handlers) exit() exit() functions SystemTap scripts continue to run until the exit() function executes. If the users wants to stop the execution of the script, it can interrupted manually with CtrlC. printf ( ) Statements printf() format strings The printf () statement is one of the simplest functions for printing data. printf () can also be used to display data using a wide variety of SystemTap functions in the following format: printf ("format string\n", arguments) printf() format strings format strings printf() The format string specifies how arguments should be printed. The format string of instructs SystemTap to print hello world, and contains no format specifiers. printf() format specifiers format specifiers printf() You can use the format specifiers %s (for strings) and %d (for numbers) in format strings, depending on your list of arguments. Format strings can have multiple format specifiers, each matching a corresponding argument; multiple arguments are delimited by a comma (,). Note printf() syntax and format syntax and format printf() format and syntax printf() Semantically, the SystemTap printf function is very similar to its C language counterpart. The aforementioned syntax and format for SystemTap's printf function is identical to that of the C-style printf. To illustrate this, consider the following probe example: variables-in-printf-statements.stp probe syscall.open { printf ("%s(%d) open\n", execname(), pid()) } instructs SystemTap to probe all entries to the system call open; for each event, it prints the current execname() (a string with the executable name) and pid() (the current process ID number), followed by the word open. A snippet of this probe's output would look like: editorial review: does a clarification that "format specifier1" is to "argument1", "format specifier2" is to "argument2", or is this clear enough? vmware-guestd(2206) open hald(2360) open hald(2360) open hald(2360) open df(3433) open df(3433) open df(3433) open hald(2360) open SystemTap Functions functions SystemTap script functions handler functions SystemTap supports a wide variety of functions that can be used as printf () arguments. uses the SystemTap functions execname() (name of the process that called a kernel function/performed a system call) and pid() (current process ID). is "handler function" an appropriate term? wcohen: use "SystemTap functions" to match up language in man pages The following is a list of commonly-used SystemTap functions: tid() functions tid() functions tid() tid() functions The ID of the current thread. uid() functions uid() uid() functions The ID of the current user. cpu() functions cpu() cpu() functions The current CPU number. gettimeofday_s() functions gettimeofday_s() gettimeofday_s() functions The number of seconds since UNIX epoch (January 1, 1970). ctime() functions ctime() ctime() functions Convert number of seconds since UNIX epoch to date. pp() functions pp() pp() functions A string describing the probe point currently being handled. thread_indent() functions thread_indent() thread_indent() functions This particular function is quite useful in providing you with a way to better organize your print results. The function takes one argument, an indentation delta, which indicates how many spaces to add or remove from a thread's "indentation counter". It then returns a string with some generic trace data along with an appropriate number of indentation spaces. The generic data included in the returned string includes a timestamp (number of microseconds since the first call to thread_indent() by the thread), a process name, and the thread ID. This allows you to identify what functions were called, who called them, and the duration of each function call. If call entries and exits immediately precede each other, it is easy to match them. However, in most cases, after a first function call entry is made several other call entries and exits may be made before the first call exits. The indentation counter helps you match an entry with its corresponding exit by indenting the next function call if it is not the exit of the previous one. Consider the following example on the use of thread_indent(): thread_indent.stp probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), probefunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), probefunc()) } prints out the thread_indent() and probe functions at each event in the following format: 0 ftp(7223): -> sys_socketcall 1159 ftp(7223): -> sys_socket 2173 ftp(7223): -> __sock_create 2286 ftp(7223): -> sock_alloc_inode 2737 ftp(7223): <- sock_alloc_inode 3349 ftp(7223): -> sock_alloc 3389 ftp(7223): <- sock_alloc 3417 ftp(7223): <- __sock_create 4117 ftp(7223): -> sock_create 4160 ftp(7223): <- sock_create 4301 ftp(7223): -> sock_map_fd 4644 ftp(7223): -> sock_map_file 4699 ftp(7223): <- sock_map_file 4715 ftp(7223): <- sock_map_fd 4732 ftp(7223): <- sys_socket 4775 ftp(7223): <- sys_socketcall This sample output contains the following information: The time (in microseconds) since the initial thread_indent() call for the thread (included in the string from thread_indent()). The process name (and its corresponding ID) that made the function call (included in the string from thread_indent()). An arrow signifying whether the call was an entry (<-) or an exit (->); the indentations help you match specific function call entries with their corresponding exits. The name of the function called by the process. remember to add a reference later to "tapsets" from here, to clarify that thread_indent is defined in tapsets as a special function of sorts name local variables name variables (local) name name local variables Identifies the name of a specific system call. This variable can only be used in probes that use the event syscall.system_call. target() functions target() target() functions Used in conjunction with stap script -x process ID or stap script -c command. If you want to specify a script to take an argument of a process ID or command, use target() as the variable in the script to refer to it. For example: targetexample.stp probe syscall.* { if (pid() == target()) printf("%s\n", name) } When is run with the argument -x process ID, it watches all system calls (as specified by the event syscall.*) and prints out the name of all system calls made by the specified process. This has the same effect as specifying if (pid() == process ID) each time you wish to target a specific process. However, using target() makes it easier for you to re-use the script, giving you the ability to pass a process ID as an argument each time you wish to run the script (that is, stap targetexample.stp -x process ID). For more information about supported SystemTap functions, refer to man stapfuncs. will need a complete listing of supported handler functions? also, SystemTap function descriptions seem ambiguous, please advise.
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Section.xml000066400000000000000000000004471414446751200243150ustar00rootroot00000000000000
    Section 1 Test Test of a section
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.ent000066400000000000000000000005011414446751200277300ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.pdf000066400000000000000000017045711414446751200277360ustar00rootroot00000000000000%PDF-1.4 % 1 0 obj << /Title (SystemTap Beginners Guide - Introduction to SystemTap) /Author (Logo) /Creator (DocBook XSL Stylesheets with Apache FOP) /Producer (Apache FOP Version 2.5) /CreationDate (D:20211108135109-05'00') >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream xD])AпmBajT>0*,car;*RGyޡ%> x/"Wz6\_7OK7~pSGC^πb@Z.vџ[Td^)9Z3Óyȼyme7Ūebs3|)P`s zg;ûCRmO$e>~瀴A*_ZT 둖oOB+s>둇7׿=87koyԧph5w~ʷe{s7y.G-X.|xSG/\/]pSXo[DNP6UۮU?-e !~mPA̷cjW_~AuPjw*hHZ\1z3NJ0|o/sBr0bq cCl{-YK`.Q@bLu΀_yZmIǰ tF7(45^\e,Ψd-qluKo/f J6֕~jSӮT(pO);$@8<;wC ?y]*;$ 濼lWtC S0s">_9y_}7R-k.\? q9)V*W?AkJ|AG?M'8wW>+`qЗs :~^^@?n Qj7@ tM0%ҍD^k].Eh6xhZ5)f2D Wt!}L5IoVA?D+E^2t:b{Ŀ)Kx?՘GV|yYjiH6Ց ~HnwqUi,GE<2ꣾ]U,ǠjmK4thKCjBکQWheKf)SA?B{ii"4ҲfHpcy], `IVrZ[H=2G c$s wz!!4oӀi%D>Z[# Pk"D, q ].DYy?V9j[GyJ[ol+ xe<y͆D3Թsm`5Te) G^Zzp 8S k%2(As=<J['> zZ$eۺ"4] sbR$֗n |HJV2䎳љPԍg!\8|Oe'1AyxtHoNBY;=O~8 R=$l]lG2 0PkU%f1L.YR#1 Jg\2)KA&c_%;R͐)͊ЫyfQqz8RP\4ZBoúTʼ y_9R7®3KU]/"I x֟7<= %(%=駷<̾Q]%WwGԓ5dN4$<*+@EtG߃͊O%9Y!=]N}#4{X QUuR8X k8͵DaFk)澋~"ۄv+^ k_23xyvA7n(;=kLմȟK YivMI}5;axCX;h/1hf1Nx7@h@~\vؐ=/j9,\"ͻi$ e㳲[+X8|0"={C{}=;QG[>}NA죽ȧ0J2lQDz0hڏK&&PeByNoO}ZiӮ&].@zTqk{#xF0B3O h.ԣ~|Z'I Oe061^@G$:̈f&&8NEaزs(eܨ#g=Hl\h,x_jJ4#E |'Fב?&h4 eeDL>oPp 86iɻ@F%akhJg[4ypOkZQ4^]3: $b('> AxR:\C B̗">jtwP}/\jWfq>'1jїw\ w!6'\#;4^i05(JV'@1h\ۚǨ '>|\*+m;>2NQ>R3Nᜓ#ʹP M+J0ڴ@:rH,3GŮo tƆײeLXz>ul"p$Jgt^ؖĺڒ}&d{fCqrM=`@fLwz8{t}q0cy.ӚqFV>R>Qeȣ[ N/f#HP)̻d]-3$HE4jŹ,YAO' (*}mDV<' $R6ʒe6Z bO.z _K@[2JjrڮH]C .=)^b#2Fg1L'G#eV$<3U}ʢ:\24kٚ R|`6b(ϷGex%ZخhM Ve ! 3u˴z{}>3)Yi kIc- 9̽(ayql gHSeQ<]YzN[DzxJU&?C|}Tz- C*}FTG3VuiktZbzJJgR^^-F묍#A%jd}?'-Ce'Y1:cJ[JO~4=UvQEE:/o_ XJ:n}dTC'[*z"|Hj4P8ϥUԟ :-95q< -Oܹ1fYDV&K#kT_~6ҙ~Q,Ev(XH#KCQ#]էC3unr>@ͩN3>YU;|>::稱7Xg;o&ߍ'ġ)Zrz%|z vռ6e ='47B+ߢ5]FEi$ۓ7]71 Utvjoot mUx`z6 4K0}Eto, +%MJrSf.2<^LwӰy3rteߦ$vCt(.:(RՎ%k~HDK OR(%yP6O{C.+bPMo(R0;E]7ʘ&-H>aj$t o$ {D_𮬕' u=[c[;J厦!0vrOgJ}Q4A=Dq7pv6mxl1`i%FٿF%):=O4:eEK]ޱ_1va:I*љe@V F+e<nXY/!N#NT./6\M4dRv!E`Qo.CyIiC!~VxMSYfTzH82nGwC}iFzV.?|-Y;(?Oh'M:9OG:jwu';q-믍q="vȚ)U7ӞW=iN{NI4wvM(<aV {S>Don?޸>w!ߌ $~BvԚ;/i鴪ԧ'3TsRߦ/ /؜&@l[.Z&sDMYi9K$Nәɕ]-H5w!)>c^q7~h!/$aɟ!NQ3 iF#`=3AFEC a|` pBmX)}ڒ e`ݽX1řH_^QM"Ӣm9[XlY:şŵV.h#ZtE<{ yvC::_bnKh5HJ_3I;h5](+Ud=QwWJES~ z3r@ e.D]*%տ+y'T_j]4-I-"|),㷃FiZhVBU &/cRz(!:ǯ1o蕲WǷɣٶ\f5ލ|ۛCZ^.ټ/Jpß{w淎\%[ބVMWo[ӗl,0&i>s~T3![hΪn[aƭ-ކgR 7lƺgMo-> 8c O!}/a6ze-[[r6Ʒ;WZ;-6=D*fš7wOKVu[g>oy݃q5^Ǐ^h^Uлz?u݇ b@+mںi+i˿mn3ZV-~Km.]6ԅn?R)|^Z~H>%(_Y}3 endstream endobj 3 0 obj 7214 endobj 4 0 obj [/ICCBased 2 0 R] endobj 5 0 obj << /Type /Metadata /Subtype /XML /Length 6 0 R >> stream Logo application/pdf SystemTap Beginners Guide - Introduction to SystemTap en 2021-11-08T13:51:09-05:00 Apache FOP Version 2.5 1.4 DocBook XSL Stylesheets with Apache FOP 2021-11-08T13:51:09-05:00 2021-11-08T13:51:09-05:00 endstream endobj 6 0 obj 1156 endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode >> stream xQMO0 WL>8D%ôimt0(Eq^^ma6,$0XCeЛOȠ+®.feqy/' F4clok# <=)o@ϟ?1=FNDCcZfU۶(1ذ ^QwsBO6 :RӺz@bQfy#!DI+h:yתքВ7?Eewq endstream endobj 8 0 obj 282 endobj 9 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 7 0 R >> endobj 12 0 obj << /URI (mailto:ddomingo@redhat.com) /S /URI >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 627.515 481.37 635.375 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 14 0 obj << /URI (mailto:wcohen@redhat.com) /S /URI >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 367.37 614.515 469.37 622.375 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 14 0 R /H /I >> endobj 16 0 obj << /Length 17 0 R /Filter /FlateDecode >> stream xVoF~_1lvʼnXQt *f}YsS*Kfwfoz (-Vo{n>c,f;bq aϩ6h볞@/Kxe= /_öWhp`ѻ zCDH!HL}B98A/Lw \ÕX,yů_!wtW f:4h?#K_9>7Q1pMSWM<3lCVM}>;ą]o񸏂uQs*Bu\9%g\_IJBGEO s ;-A*լ.w?V2[m,-g[`}C8&"^Dju4z}U>Y Wp"a]^Cl#tUu?Ha"b 4Ϭ>.n-UkrP_ yᄻ|?k'#7C>󎸂E MƸCl-g,eʕtX=4$PDo\\N`es9/! J2C"E*@%xօz-(70re$Bw˂+qB ) "XnB"Gٚ2AfUZ#ԙaE\@YLg({0`2K [FԙjJL<0;S7;8ݏZGf:8`TmbnSj+V4:i-ep/i1,Í@DBnR.*[TÙo@P\#̸ՂΏQ/3 ٟ)v{q2S3R6?ZsfSH=<1l3Th|{Z<o4ǂˬ̶:0糩+3 YƸ 3(ʤFȸnE9/B(춢*P;f>f'4-{[Vlc&Ƚ}<SgFk~xhQ endstream endobj 17 0 obj 1065 endobj 18 0 obj [ 13 0 R 15 0 R ] endobj 19 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 18 0 R /Contents 16 0 R >> endobj 20 0 obj << /URI (https://fedorahosted.org/liberation-fonts/) /S /URI >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.464 598.573 474.164 607.823 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 20 0 R /H /I >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 93.062 66.696 234.47 74.096 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 20 0 R /H /I >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode >> stream xXM6Wษp )$VR)DB#)&Ak(9%򘋟{>OǒI␅y#?/]7`^Z'wbh43䎾Ӈߪ\`4xĞWvVNLa ?CT= \e8I7:%Q81=”pE;5Oo׫ǀ![o\='|FlgFnE&iL<>2ᑓ&I&gM<}_e^}WUUZ.{,I|'IfS-ۋZٲVd/'۩]eBj2gdJF<354F#m-3U2Unf/ȅ3qy#1OJed ;ĺ5PKm=ޒ9 ã?aF؇S$3KJ=p~A?NǮ=/#&[$?id4Q,n??GX*[-/ű[-iJM93`hi&?u "eD#YںG;ߕo0Bw%J^  a@̊.eS,aDdsd9pt9ҺQX^`{$8]|nx- Άhz3ϕ*Yt _wHHaX7S QҖaD]GLzg0m[Ղa4;UYݷ5o" #]Ʊ5oK$5 QkwGȑA>Bo:)NF@>ʣu4FX!s}]7#Og9.r(-Y&ywvx=/>|6-|(,n#o!iH`GxY%m91I$٥>IH`[TSx!3>Odl^4 QX1#h~<7jd., SpƃI~7S]Y0&u%i 0Dz t j__^&fѴ@墘&v݉MAGӶ]虵$!aЧY8'@fU9ʬ?iDL ]S ZNr ao;.`vȊ&wBDFMR&R 蔤77(ޮh":lӸxDo$5鹍l<"*D3^vA=Cml~ ѥ|jT6foJl8uDF3 f͂)a0Na4EGwTdv m|2evnMmM<7Qi S! }rp :\{SE,hϴg@gc[$ QTOQv"wF#H:8ȫ,qaUuo2.^AVLmCs|6Z 0\ q|b~ ۋ0s{nۨWh\bwzS\ôVdF1*̻;VU#vv$w8t\8"/&txjG_W5BEi _r]9r3sm߿.ZU0@}xDQd<ÀN/ endstream endobj 24 0 obj 1996 endobj 25 0 obj [ 21 0 R 22 0 R ] endobj 26 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 25 0 R /Contents 23 0 R >> endobj 27 0 obj << /Length 28 0 R /Filter /FlateDecode >> stream xZKsFW1y\I[.k+8C+1dz Kv٢wO3t%%eO3A|"9%U s=mDŽ?~7VcG|kvϫ_O7xNƄ͇xq/АAZ=wަovo];=+c4~etfXuH>",T<&c޻ )/WǐiHU~?q׻2u10 إlHb {1'f%. "P6IZD]2fM|yRH΃P~8Tc_8UGSR)HC=kvӼd{].YS"ml&$YUinX˞ J%C걷|i2BCҿj*ŊT b?]j֤wBgͺRIOodƊmsKˍްj=_Tsd;=33ya3x]T+CĀd'RA'uOvg|ʳ}]>~OKL@ٶ{= it\n+]7,e栳<-ȴNFx=ӕJG%! tXM,oJ'R)ᐲm^k(^ eTp@M>p$)!u΅0b3!"2hSjEDDl\Xu~(M\5zlB6BAs1I8tD%.:ݚC$j|/$cKH,0ܺr억$^Q6%_x~@\mhtYu+dQ\+g8+}; ~<![f?L9}1g#V`µ2Q}zDyˬh7ڰl4?0c|jT+FD7m!N&:`uYqZm;ӔtMC5KQ6ˮPPդ@]o*,st\Ntls $-cȤ{ i`?51e'@ {E:mbp\/S : nn>ҾKTPJ؟;\OXB1v_7 ln%DeCt-ֹUF \Ǵj6Mj^ $چ&=S|}656Pkbs 3DU`+5*iR̝t(KwORKDDsWtLh>6/fHla0fcVZ+,rJ+jڌ k0qY"IwX$ڳPev֍j $ +1tZj d-ZA1zd]y1vFbe VyL # ʃS_Z6=N3p a7 '}\NH'u.'o 5=W琍:П՛k }ͪ㨤]/vv*؄ Hr3މ ժ!qυ'10VǢmt7=>-eY[׀h1yP(CzйzT:|K\H{vi%sed9MX릭KL[`H0@nEQ=k[01.ސ7.tv؉q}5Ewvπe,\~ylԶ٨d\aȜX f4A8gTqmWwEL)1-#$=ΌuEc|JLЈ`$BJ~{>6ySnGЇ룛ymR?'U*jJ5RK SR(12w4єsrħE! 7UkB;rv %΂q'| Y}M~$/v޵Eq<]q/ݺ $RPӜ6) KFm)Pt\WI۲ܴiJJMӤ5b(|vdZ@z46ּk1asb/@{7)r-Mt-kK &) endstream endobj 28 0 obj 2712 endobj 29 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 27 0 R >> endobj 30 0 obj << /Length 31 0 R /Filter /FlateDecode >> stream xYKs6Wl}3QoKisOK&: pP^TBJ;" <\*(B}sѴ9pٺi^+)dR$d@L%a1k_A0K8/X=^@[f{M"tOm=`f`b|ꉴ+}}"2 1Z۫r۴1b F)Z>ma>\%HKSq+>ErZpJY]XFb.!n9= 2 G,kT-WiNl#IM"*M|T}%OVb{I"UDf!9N_Y7#jZUTs%^6i4ʊJhyV(?j!0\(M3Y@<=®gebi>DJ=%$rl^lSߓ;*?eeĸuH_I *wx?ѓLR(o/a|^`F+PkxO#?l^II`\ovKYګP4- >EjZt|O3|K8_ cV?fαj q=c(Mgaۚ{ +ZC#Z7[L^jXҤ*.83o4xAGI/(nIOJ+|ԶZy@=}nf,XcbqT)aPE ZH94d`odZe%@`ك=,'icC:u<΍#v#Iq4Z&D1`+YFHAaHR#q 43 R`d9r~ 3܋[hX6aWliNc^NUΰDxfST `9MVNz`U`cX8'U/ǃUQ0IܧR(F(~(p@#xW`x2$/!\V!w jG@U2E> endobj 33 0 obj << /URI (http://sourceware.org/bugzilla/) /S /URI >> endobj 34 0 obj << /Type /Annot /Subtype /Link /Rect [ 351.758 694.175 485.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 33 0 R /H /I >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode >> stream xVKo@+a HmԪqCEkX`U`u}gv1Js 7,0x][TϽA(wISy>0j pC j-ʱ ᡀ;v(\;(MQrL:7ȝ)q1A@њw_x"?a=g$/zD_iX^[2z8~B4hd`Ъ-eϷS;A&8]r͛B& k0luXT':(4!Ngu'p+S(\CUe3ୀT`B-xeYKX$# 7INj0 cUNĖkAΗ}!C~ccč1Xs.̨ΞZB@U%f_ҙ \1tb^8Z#*Û +.qWHj dML Qad;\=uRv5"LpJag/bIaqy"fg: V$ 8ωKIW)b{ۓC1C+sc+r_5Z{N]6 endstream endobj 36 0 obj 785 endobj 37 0 obj [ 34 0 R ] endobj 38 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 37 0 R /Contents 35 0 R >> endobj 39 0 obj << /Length 40 0 R /Filter /FlateDecode >> stream xU0s뮴qmCrܮڪEK$b`'} ҽEH o P’bU9b xB| p6; ',ShCBO#2C ڻmb #Qy8ѣy>e^!lu:#sd ^֢rX#KI }φ:0.thYu]ߦANt'&ṫ&$ zLέZ Ҫ{pk@ZƁ YE 5(x 7f:0܃5 qh㞈vX[?^N둭6 Wd@6=GѢv<T\.=<֡D+A+uaA*_i|^BI}{ 'WF[3= & I9K~f{4g SgmI:a] K"iŒ endstream endobj 40 0 obj 502 endobj 41 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 39 0 R >> endobj 42 0 obj << /Length 43 0 R /Filter /FlateDecode >> stream xYI6W6CJ[4EZM2.zHrXX$:Z2{j$D=ˊ"՗v0aϡGWPz{Yu0ZbW3uX1'M`\Ǖcd OFu<֣bav荑~' |Q&d~>Zġ?o_ל7;} Dxwsw \s^CƄ^zu9uPq#bf1sR=:p E}Rv1ێ8.JX*-ݩeƄ /^0h|#=ٵ]ˢA=Z8ˆaI*=@"!cNb s|6<3I0YIi'#mZxl TծLu:" 0D3xfMrJ^}u ;Y7Oل;b[EyimAV$cZ*KYU{T&jߛęq\@M"UОQ pʹ¾n@=f\wiߙ)/ ̜D7iWшG kmFUy ›~N*΂όW%9$eY |joې;ɛNlTod0'[qaA%<;xxnJḀJ\kq_?>SL]*2~_@i7缳0p0֐pv:ш-8* rLla4ނ*ԣI;NIjT6djcv2i }`(ek4(VV-TȀuU рJ>}ӻi-ajͯp._Z` 1H?t#`'0}\I*{cDƴmV{UYEHZ=ׂ`ë@5c82B]uCx,>' X ~;N#:mZOܶt@[qB¾f[#7U ~bX_O1,N!枃z70O \CFcg:09az< %r<Ƒ󇪥)Kr S3Y.Sس2S0ڂtHLY̒m %W ў"'X[LraL-0>r#mhO &C÷rُ=\&A7c)/\D;tmƐh Yأ*?I]7q6fG[{{ QvpJ@KGA`_:#oˈ7Yvz( ].$y@13U߫ ^2A1w<؈&L,QyIe.|f X{X}=BM1"Akt&R_tB6& s-v|d#<_<&ܵ?w]O"PhZ> endobj 45 0 obj << /Length 46 0 R /Filter /FlateDecode >> stream xZݏܶ߿KcļE\h8"(<([Zi-i}CR")Hm(g3EޛD3?>5$ǩL`XR=ŸĔ B83 w&da'% ,OjGv?Xy7Xqn<-hHãS~ b-'K姇w-:pwL|חa:F!u -'Pkx3!HӠ-O91@3˘xCQ[|)̾$8Vs3g59 o=`*p&{ɸ&7 ضLkm`Wt<a gk(5`捣YB m1!F$J,¥N9o@cpnO[Ho\BR-͡p+|G7{j*2%e +L{Hy) ʀ1L>يNI,O^TkCKY*Ӣj,5`_S !LVq} _= w6?iZU<qJ_O‘m5blؘpfY>!th.le#T,,з~܍iҢº`BrR<$㒁*禇?^qtg "1\[Wt.֋RhM-ɭƮb>:_ kj*]092 2aMm| Qcڗ23crl!ȜfJpbJf'_lӐc(E׏n06Ԡ%͐X˶C5=;cJ&MtMNUr+v""|3]3k~l NͫԜ~JT%O(&OQhS<ڕ:my z\Q!4M"d5[2b}# 4ɹJaO|xwݶ~끤m0riS<9i8ԝI8]䳍:Z.M k4rxl($gT w2i,H9dCar RHSEjck$*@56P+-8DHS o^hf|nٻx|ߺ%r>93MhOC~. s˥OꒁXM*{ I׭xQ?w^UˮJG+صop4 sJ]<?#>h6g=ݛ}9jie`4ݡR˭"A(Y%l@ *ҥZ\;RfVk:j-M싢k(̱j]++BptA32/]˗S돚_5Mw] ?Z,5kO$DւGv_]`90窾Mrptdm ` endstream endobj 46 0 obj 2363 endobj 47 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 45 0 R >> endobj 48 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 433.4 null] >> endobj 49 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.998 316.175 500.148 325.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 50 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 303.175 173.328 312.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 51 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 185.2 null] >> endobj 52 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 267.175 511.838 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 53 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.858 254.175 117.198 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 54 0 obj << /Length 55 0 R /Filter /FlateDecode >> stream xZm6_ eIJ$|5wCPtB[r$9ы-s="kD> e%bKL2HG,T\ 4A(Ddȕ-?~#IG /U~;x]Á/V٬ wsђmNzHuZ2ٿ,b_:=m柫7t+1&\[qy}IhA:00nIpR \UU]^Ni^'uV,X}Hٹ,iUbϞ<-P;T.ǔW_D(PQm\3(mWS.UWI^Q5gz#r-x,O@>#(iG(OsVvɾ&eV\*vJ,$ǝ Cv~N q I 9UݯC06XBp•(\2Gcb#kGN)߉[ z|ayF~^$xV@;ѽYkN6̐Q̵PY ^5ur~(/y,0zpSK%@e*W|̶Yv T쌲>P\j X[56jX3ce);HqkQ l0>uTAp3Wذ9( ؜m89/~dǚxG:?f@„o7CHEGΰv'IM7hFZugF5Ą{ΎGcZ:I y# `vܸG hE'0ÙvOA{%l\49½{[7֩۳V _Kz3Y(.r\by= C#6(еq՚RM(B3)i|<&bQW9sv2w>_W-x}z3TIVFKRPNvj>* J0ؐV}dx~ 2Ȩ6n\.ţ\TODK.8Bp+8̾Xcm TE:@BVu!5$9!T7F Mxr!`nI=+L^UE HhRΰѲJ`c3FU5+}N b6+E\Uehgm').\{-=R]=IO9e-Zl6X,՞2!>3`Yi qZv;x*i2ekl8lF2:ts9ہpsE#]F!XR{1Kل |0&Ԛ9 K咕ܿ~\yyF9|R{`8{g˱S-z)%EYZU[0gAiԻ 7 L(v8HfFi{jgfLWR4;07AI(4zeVc;ӡ_ j1?ː)SnþNz!fGX7>SL=u"0juZLHd'sY "$/i z|;\aA7w2x.ɟYAh&ӁfoWB+,$o9kuqFGP!|y ̙!7X8~%r F{_B!4fE`j(U!R^9ק |typ!!:6 235]7R4pׄ>Up|QW#{&z]ކ*o:yͤUxANo *(btt gZ\v)򴕠^I}<7lǘ1v)δ>z9nDE{?a!|\[t~>R{"i2۹[bvXvKs(ڬQchh\QQ4~Mˁ{^v{q(5hH8Vsw>%̽cXE5&9oZy} endstream endobj 55 0 obj 2513 endobj 56 0 obj [ 49 0 R 50 0 R 52 0 R 53 0 R ] endobj 57 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 56 0 R /Contents 54 0 R >> endobj 58 0 obj << /Length 59 0 R /Filter /FlateDecode >> stream xZYo~_l.oIA&H$< [z$X俧AQlx3%U,:N]O =l>c MEgGBjʥbL1a p' M`#0?5qklm.e2yW̗2(rUͷo8OF9d!SQ5BNnW:UUY=w_ڮ8Gn۔Ǯ}#7~'`_H.34q d(́eR4Dݺwig8z$k r?[γ~rC3p1&}P36YHۯh&%#F{`-rv2I2?=.4"lvogM9"2EʤKV i-y@*Ď;}OM1d7 &w &qDDdbsQFYSUs1լy?i75]ʪ cAfXvŶ;Wuwe]}T|OdW8nI3WF[S֎ԣ? SՇo}ޠ `|T-T0{25-"# ׌6s$\@4S-\LƅiYiLf$C%Hc"=hto%dTeD,& RU-ܾ +bL= f5b&`bRBro|-+[BcnGb~.yuBf9K[=˫W˧Z˧%<{N/&x|&Jܭp_5S^a|-nBXfXJ1!ud̄4 \ib+r֧Ώ3v%AihNI⌕|ಘ)AfW4cMzw*J@NNsP ]ݧyO/RփqeZA@BTRKVlGued,D8@<5t}޾=@ޑC4p&vDz+2ŚrwIB 8Ք'>G"qX #T3-I{%sE&ڽ{`+m2| DWְwX@IoWGob-a)Pm:t$O)Q l=:GD병f YϮݔUޝCuc+ MݶtAXC\1zaEm##gԄmKR{M > "}W̖ 9 |a0p^tl[.hʍ2vY| >W`Ƨ~> >>"D?2Ă|D rKo!Ү|j(L%}v?f  endstream endobj 59 0 obj 2242 endobj 60 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 58 0 R >> endobj 61 0 obj << /Length 62 0 R /Filter /FlateDecode >> stream xXKs6W1i->sk8vrHN@ I0]$ŗd8֌%ŷb@6_~ac \A7W\ R!ŷV p|kjfC!:yh7q4qnVv{|_ڬ^\"B ҐPץ8&~?DE%KI;]l?0}F ѡF)kFjljƘͫ~/X:.:H"\p]vD{ t]Wհrؖ2Epʷ(%\AĉQcC !G34k JT7Iu&s>m{]GwY<1T1#B}39Tټ[Dm8gwIh3֚a$gf5FxbUY1I.Fi dw=1j0ƐD"{ b[>%pE%9$$p&CV,[?! ~lvVE٪LŲ ( tJ qTE;\SCvTuk]ك&Ԯn$0j : [oA׽x!y N)glQ2Y&(ҠeQe'E/[K]31vswˢ$$bGF*VK.{>Xp:֌7cBoɂF9(e놤yHC[XbNzE,,rDT/xQ4g&ړ^\Dt~_E tac1Ԝ:C!Ʋ$ccQ)'Ik} {p<ssq6{J5 =,/ոSK_NMLp˻q`|1~W~[<&3xXD#)8f 8}za(Fx.kNF9 yָ;G@ 8ߪNpy1v c7N$]vᰭ;sA6π<ǥ4>Wƽ{,ذv \nKCtىR;7FG{әbz?C "eh?G" endstream endobj 62 0 obj 1649 endobj 63 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 61 0 R >> endobj 64 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.874 321.075 271.274 330.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 65 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.044 285.075 526.444 294.325 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 66 0 obj << /Length 67 0 R /Filter /FlateDecode >> stream xYr8+ʦٽJISY{2 _$EEO\D= 3?ס$v8`<|u} Lh}Rb>h]<l7hXLyƪ1͚?|͝>xeO^qR }~} lkOz&O6c߉:2=qbuQ⺡xs#r4S3u'a1!Od; aADa8NH?4o˦DjQϯm'{qd_5A%nl. Lx.~iYjҨN2Xf4VYKy,^aJdf흷6ĮX ґ)"{q/ ճwu? ]p30Q $pǍ4/YY>nxvP|Z֕j]~d5vzfuM{[ ]dS† 3"mS64+AhN$s +[ m' j#.o MaN#OG҂0;{h]&L`>LS< s Q{N k2SWHv} iyGhihHb@bEb$zƊvk1PUVГQG%$%l,Y ǝ@h@SRlrH,@fA`MvXg]o$ CAn"3GW +=QwE׎]MdMaya'faH({I@ 9v$J ECa$lgݹ- s ?M^fg|6>8;6 i$ˍSs2{{8u'jZuJl4؈ߌ^sk~誑{_Af2n29l J{+uXK_TQvb]WV%81jlcm \r";һ"Q[2(RXE;oƢʼG](]) '|Y=;Jl,AR;y\a ;pD7i QdOV5r0nF#vo2RF+a > U(|TSX/k8RU$mN8I\W8e:sEnd=ńK\P&t5jf(_pc"̈0f#oeзɕz( ֌ܺi*vޖ"\:n^Nň} 2n8aL~Ց m҂%%*b8qT"NU3ktz}hϥWk SKGJj'A2k8^u]ѹk(e~33%W-|8'aam>th-((i. ^d|Ϡ$(ᬂd*-F?\N^ ] X6۫*WN[J{~z9VuRCaw+#RWV(&P$KeXo)ל)*vA^N7D3wǑueE7!a]NT8\TrKsN !0r/wQ.oU"sR@rCI<EQ4x]D;ќ@*7|0ao(nG ŦϺ|0BRzdnFpa0km+<X:0A3L9p;݀8v~mkC0Lq [irw1wd^G'h};!h?)؂NCx^M9 endstream endobj 67 0 obj 2088 endobj 68 0 obj [ 64 0 R 65 0 R ] endobj 69 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 68 0 R /Contents 66 0 R >> endobj 70 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 446.3 null] >> endobj 71 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 156.449 251.824 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 70 0 R /H /I >> endobj 72 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 530.1 null] >> endobj 73 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.164 156.449 380.764 165.699 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 74 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 660.1 null] >> endobj 75 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 119.077 246.294 128.327 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 76 0 obj << /Length 77 0 R /Filter /FlateDecode >> stream xY[6~ `+$E2-"6iup$zLDf2CR. Pt(sO+0?qJQV>uk%q 1pNoѐ$dr,? OM Kxv=eU0ao:G+c&)Viz<|D\}btnvC8 ( 4FnJ՛J5JFFUw/C7X}wY1]Š7ĉͻӘ V"YcP.I0X!;pFΉ`Q:١%M HGH0 !d0qEQ<ؙx+? ߑbp@[I@R#X ,T3 Q^DY'1DYB}hSծި4(G+Yl޾nC( ɆHd}-/Fu%Te=-ڋ{JQ CU"9jS4\DQI(EW\#VnaWEᏲq2B)aJcXD 4I8@;L[fY2e KقQ9=uJïV2$-I;-fm0b0fWkȱߣcbfϭ' K("ȂR@$AK5 hPY:Zd IsqWv1dEj-56-xjrUnS[TGM#qXg2Q!U2W T'AlnN@<%(Nc.EXtb,κCUxM$ ݸ-Ɓ@@P[@yGwH ZFFX NIb }jIP aשx׌F@mg9?(Mz>;M<QQ /O?=HO |/QW/AjAHz}7$?f{}o.4+żxWO&.6k@)j@@M|ʡsG *xϢqzIcʝvm%н tZ'B#<Ső40@.52wff8Y*\#LcP6AFN2ٌǀ[ `Fu2po<АhƠv?0,TP@ z)3b G` [a "0hMk0Vƥ/V حn% n~!/_<,Pi$4Hc Tk/R/ԩXծFU,o>ET1W~B4ua,j]@A QרѢ2Gw5z)l-P?~~x[S= endstream endobj 77 0 obj 2415 endobj 78 0 obj [ 71 0 R 73 0 R 75 0 R ] endobj 79 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 78 0 R /Contents 76 0 R >> endobj 80 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 718.3 null] >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.888 693.175 330.628 702.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 82 0 obj << /Length 83 0 R /Filter /FlateDecode >> stream xYK6W QH9en`0Ai[,yD=F%J`;E,V}+e͇nLs f"rϹDŽ޶Jx_qQB C|N#eSn80xLͻ[8l{x\i -wȚyZ5iWuen~ի7o`E1qs[?~}{.CCuyacZ[;K#ωհwכmacyڝ%2'fZܹ p$IŶ!:m>l <3hQ +rЉBpa~0tύbi-)Iv9jϚk53/ɪӹ*e٨oU-%cX, {Ykq1d8ebnVDMd-U"1$D$K8Jdbںkz3|ʼjŚa::mhUMLese9QfFjݬ_KUYv8 =TC,1|tl*[ӏh`*C.'i!gC'i_xg J04`>hes:w#? Ɇ{ 8-ǪCцrd1NRcX̞ƅ-#mUV'(-z6P;q{dyT'xa4h185,/1N\o#,&t璩e'>ueB㚡yKY8 [NUu-V `(dO,X n:B@s]m*z(0tmY}k8T٧9aɁɟ.E ɴʱE$6J/4 ',Q˽DvTnd[6ضV#""עV,dG[.G&C@Nrz>yހVCy`EIbt >*?EZSTR5dh>uBެ䂘 >@LZdRMa'rI'm\)9 ;䇋F irQ*i͋h4o@ ݪ )W< fU-sR_y""%¨wU1^X]$%%l)gQ ȩڦ /|ys: w؛6 xkpt *1lʇLo}Zv5 8KTga"yӦF*eOJ[fQO8 aW`W)m`yIrmC/M}Yj7 1h<ၟ՜!wDtٵ8EnV T{o&Ns "qfOLGRBS;FvQ>Kf_ѿ5~q>,#ק,V|y'<@h{§,ӡX,tKX<)G*r3&/έ=QǪM6U+ 85-쎂?W[xNt,躜U Sqjla;YPKS_C] {hy{_9}O%UMF==4׼(z`4M[߈}"Yv5Ut4\d+G&H1ż=Qrf{v"B9u/{=/GJ߃jX)[nes̡pGG7~BN|?8I^G.355vH,u~/{~ ovFy<{͎8~3qeB㛡yKYq5ǻ)jdO"-o!,= Q ĉ GV}f-ĺ)pI.lxJ#PIt\&?Zc# pOJ35Ii6؍OQ"(/ K~t}Cxf_ˁjxF_d endstream endobj 83 0 obj 2080 endobj 84 0 obj [ 81 0 R ] endobj 85 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 84 0 R /Contents 82 0 R >> endobj 86 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 379.486 null] >> endobj 88 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.668 292.547 291.948 301.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 89 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.728 266.547 482.088 275.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 90 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 253.547 152.998 262.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 86 0 R /H /I >> endobj 91 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 663.3 null] >> endobj 92 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.788 240.547 276.378 249.797 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 91 0 R /H /I >> endobj 93 0 obj << /Length 94 0 R /Filter /FlateDecode >> stream xYkܶ>ȗ8Ɔ+%%_NH[( Ji,i^=W4cƻ)ux,Jsϕok c}&XxD̗<T<ńeV7`~=zp7,yK7clʍfXƞ15nfs4ֵ4^xxZ=К)Qfnڤcu~zhZIMU5_nyutFg=5T."-,acyU؝KS: U(mU=|L|R8QG jL}$'xDqtQZȒX<yWhHݝw'\Xai|g"g!9}{wqY}2"7>5VCp:v͹s_!G=6ux9`Z"<<^cP1 . pcfP"+=/S=r%(R@Y^ JWkzE W쭔jXsޭPˋzb,UV0EQU¯^+M:]sH[0)WdQt/Oוe /0$!ɾ6jl̾4l0Ne>m}i76H5{d)4.-FK=xW]Lhgly|q)MBwk%DZΞ-?m!Ȳ h j_ngX;C$ŭ+`v&Rr{,X  )o)yiijH%%$2\l^1.8P\ bm?)} {. máي&d;zq/Ϻ.^(e"â_b{$ #bhH斥@ o#BǺFv.N2xCgAhߐ!gJM)Kr 'Պ2:A/nsJObI02CmӮy(]]UME8 ,$zRY#:ARp&anHnߏ9[]%u*z M :A>Ń('JhVBZ˶C/z70khCPEۄ]m@,Eѧ@Ǒ{H5_1 ?q~ɵ> endobj 96 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 588.3 null] >> endobj 98 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 481.996 220.344 491.246 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 96 0 R /H /I >> endobj 99 0 obj << /Length 100 0 R /Filter /FlateDecode >> stream xَ۶_qЧHI( ЇN4l%G;!dmLgqŀk5qc$%HNW\(„T+|aM͉4E;@{yU(|WྂǕz?m8Qأ=WWW-՛w `D3)"MR&;ޥ'.-6zuyz+z{*ǡAlH^Ĩ4cAbj)w & -00Vgu٧ +Hk˲0ἣ*?3P nIjVlCZDgxÓIDɏYYSzW;$O:Y)3[lMN'J$gz</ IrkJzGvG +aT &J(;JZì50aH=J(Uv0ڐ9G InHPe5@8 :1d1C5bp^פnN(Sq Guz8‡өпv1){J_*3)1eV՞p7\ܱ7c񮴣-k"gcJuRVpXfhlߢ%k<>0kHF.!"`@l1T%NU_A3P$@i9H" NU^4_áDz:l/fhICD otfm!JL<s.X(U<'H+Ēl.%Ś8kϪӂ@loh-ߚsI*\6FÊz|}Vźbf%Eڅ5Ʀl!ؖ15G_&xTML!zFs+p86icjul,}6.iXcCG6W`bQP?TPԗ~|<\P] ;atBO-Q+4,hX,XsOPŠ͍qT 3R'c3 `pRSoW?~2$"13:1oJv`2I>[ $` %p٭IC^^smv0hk9VؔNK^B.&Vk|P[p*,fPX ҅5(m"`;oF=fF;C©бm(?Ħ.MYƸ֨]ƒs8 шr LYo3le7@8cpBWEGa{U8Xz@]1ږJڇ&^m튃ZME d=һO>h\7zb?zB{1L7riՂ 7$-&Qo60Whd_.- y8f1 o|Fx84Zh>]^|BȏH< g` m5?EQ)l LR  | Є__­`(t. դ"ҡ7OL_#* endstream endobj 100 0 obj 1949 endobj 101 0 obj [ 98 0 R ] endobj 97 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 101 0 R /Contents 99 0 R >> endobj 102 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 142.573 null] >> endobj 103 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 648.975 193.908 658.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 104 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.788 402.022 475.148 411.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 105 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 389.022 121.648 398.272 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 102 0 R /H /I >> endobj 106 0 obj << /Length 107 0 R /Filter /FlateDecode >> stream xZݏ_AC IؾkӇ (y\[,${gH}P&=8֤9Ùp~3C\1BQacDA,c"x ~CPP&.[DŽ`wWd> ~ؓV~f0/1baح|HHV3r ?vkS0 ?[SVuo|GZ<6H~*Vo~![}?5Uڛ7D}ӟvjY/VC C2^@ci԰h/Qh{(TAhgN #D1 CՒem#Pz OKC&{ZUY{U1::sG7ROoTRCk+E2g.*ih1wQcy櫽ɲ<e}xȿzxOT bPsZjخڭ[;6Z+v9qQW0AL1-ccS.N@kyhJU} 8{C'פm#ց(<./%Z0|OjVN&œJ tȱ{̔$#&dEe$F\>r ynJI%Gapؗe@Sɗ wr3[p*1/X+I]:" ws ]cRr2HXErw\!|\,0"[C-!6(&SYsN ky lҧTd_<_ (Q0fL:SKǝa 4lro"F: aġ@7BBF_}_i<8gF ~=FY՗egr|zŚ$ H;Mʶ`-V<ұn' x,) )SMXb%.Le/U )遛lND/P6r#X c՚lѸW"8$K+Bb@ #' 9:0951fuCٻiSg* \,w$OtCZMMq8$`DQ;&$ rͰ#tA S~xSozX_n9&:э== FGc/#ӨLsC(R7p]\F [WS.彌8J/?u%%b} -ɒ|wJv 6ǤmsE(mKxiulA2 \`$U8#p<( WJ<0i;sfaI.$Wv李vP]6/cpYvMjuAҧ 4-G}cY@zk\9lLj`h&͘h ~tˣtO5xG!b ,x"~4[KvMcչBp Ra!1MיE16X ¶2_WP@E;F >`uM?m& pxio~3l1d%D-LDgyl/XK_ڐ$Km endstream endobj 107 0 obj 2430 endobj 108 0 obj [ 103 0 R 104 0 R 105 0 R ] endobj 109 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 108 0 R /Contents 106 0 R >> endobj 110 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 183.209 null] >> endobj 111 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 669.775 300.714 679.025 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 112 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 446.123 300.714 455.373 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 110 0 R /H /I >> endobj 113 0 obj << /Length 114 0 R /Filter /FlateDecode >> stream xXKoFW̭6`3&4iC Z \ID(ÎR_Cbj7ng_5 xI+ƥC ւ\0HBKdn -H~]|KxXXwc 2y鲺9׏Z r}J"ʨnf!RǫһeoA%x2ן`uA6\Tωg\n.wQT]GXH=5o!oO>pRqEw_A.Qy*@MdXMB6EH'ThX.=)il4΀8z8jc|2t+>8L2 􏂆хD(t(}R|ycs!lfc  8c\̙<y+}P]8͋8ַeiU:e.qз:2HOaqi8-N /; A**b]jlvYS0}mHj\\Űl(:qoXgXg ܂G7Wl؇uQ 1F㩆o:L^]2d !$2\!`ucU *%01mJRA@Plj;\:S1<}>TUفg<*ѣcԋA 0>͆a&h3#ILR]:9,]v,Z0&L#fhvFsSÉ͊.t;1-6&f.Kms@&||J`ui Eյ-m5Tp"kfӬVm Dxd _S%w*+ü>H_v_7'xl UtrZC}V1aF%qjۿA~2~:(@od*Y$< DFg(:*KuQ]B"J<1@ioHaߙc3${6enz6/?i'NͅN:GJ=y>;v+bë0Rib ~>*l3ϳ-oFGf38ٗ{F-RG endstream endobj 114 0 obj 1516 endobj 115 0 obj [ 111 0 R 112 0 R ] endobj 116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 115 0 R /Contents 113 0 R >> endobj 117 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 529.3 null] >> endobj 119 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 87.874 521.675 null] >> endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 667.175 202.574 676.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 121 0 obj << /Type /Annot /Subtype /Link /Rect [ 314.854 580.175 534.934 589.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 122 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 250.746 null] >> endobj 123 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.874 544.175 487.264 553.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 124 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 531.175 254.044 540.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 125 0 obj << /Length 126 0 R /Filter /FlateDecode >> stream xYMo6 r `3!)dwdE0;^fwk%u$ >%JݶxlQbի"J2+1ɢGf:FW2\*-bRmD 0@[A3c!=vǎ*VW1nؗUgSqa4@>KQ 8zkۮ_}s'~spU c$/>>Սg]ҲZ\qFj BF+^)k/& ׮΄]`>ձ'ԴKELmyd$z^W,H!?,Ή7^X9|6%5-ӕT|>gD~4%={đE/P3Lapƌ"ML1v[0RSލ.%0Ĵțхa.A^h@\1ŲsZ2g\b,b.D:߳ʁMUn[ hB)Cb{:8UeߵzMNF fJ+ao菌 Y!22:uW;Ss3_0 QAv¼`G}:iŮm}9&F8 p HKy3zN0ͨw*֨o5S,oԩXz)T3)|%> > R~<F c*!]nKC{|ͷUO{mO*|3_HXCєD|'?N endstream endobj 126 0 obj 2091 endobj 127 0 obj [ 120 0 R 121 0 R 123 0 R 124 0 R ] endobj 118 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 127 0 R /Contents 125 0 R >> endobj 128 0 obj << /Type /Action /S /GoTo /D [129 0 R /XYZ 53.858 515.254 null] >> endobj 130 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 365.384 216.928 374.634 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 131 0 obj << /Length 132 0 R /Filter /FlateDecode >> stream xYko_AXtRL4|Ҡ(v~l^ N$$O6-{(zٓ,Aآs/、?KO]`FT&JsЁ4xAx7z솃wӪXq_кAa+?{_v{0v;41ϯW1WMRl|d?>Սo=>׿=h/f~h/Λ!BZtT<"cϽԪҫ㺋麋hYIdaTl{(&+ OqPaDzszSy`YdҤ8mO')/l@nN)T./?EU氮y\SͮӦ塀W{נ+`cs#"Zu2wRT6IYh"ٕ=LNb8V;z; Uaf qO&6nC+ [:SYҽ'ۚ,w _xYZKbSݜF'4hm8d3d-R. }b_83﷗pSk[_j͊$w{Aۀznsl'SЮ1ͶOpۤ9{]Z5܆\Ӝi͡K]?B@(#+=w[/:hT-,ݯYS,݆l]6ORb5 .=' ^v)X^## E8R8Qz '8-rpTnp@Fp%3,g`i=Y)=hkJEsLVZȗfsޤ(Q8QY2 J9<n(}ϮR a!RƦ/ i[aΩs.T)͏Q5:Ys5yG1\Ɲf~ԢntBWhp-Ț,]*DXͦyA/1$kG@j{|(dxz[8ғs gm{u28T7ί}nk3U@ ~R8jV@O?l/ddo?&]$LXc'/i3:IJ!6 b+lA{ endstream endobj 132 0 obj 2150 endobj 133 0 obj [ 130 0 R ] endobj 129 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 133 0 R /Contents 131 0 R >> endobj 134 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 513.3 null] >> endobj 136 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.774 405.259 282.054 414.509 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 134 0 R /H /I >> endobj 137 0 obj << /Length 138 0 R /Filter /FlateDecode >> stream xY[o~ׯ.l gx[Imy)]TH^wCױ"Y9sVqпHlsXf#/S=ɗ'\2zl6ˎW}c=`OWzT/wR@?i9{X}}z^0DaHjϴǃNIm؏Nɑ}dyUM]]nX}{kd8k$<&k}Fi$~ZN־4v鮿,)UCmYvi`dgOIŒy]MRL!PLMG8 }/LbEi=EB67]<^2+c,:O.ٹ8M #CRov:l ٞ h,K&Ҋ=eNJ)2E~O +ot {!eh5'gwg|,MZMCl*G>`ZDH.L9BB0E8G |?HDq8O%(݈(=b!)>d6{|H5Bw$!Fe+ $LSUl"87evGkf7'uyu*r12娍 qMng&Trvq;E)?p{vR}JuaƙʇQSJbt$7TT B\}0b^s: j`hkWT9/ .eCsr8?wX$ڏQ\Y @WbKh* $a]4`JTuT_3o* cT5,@:8by.(%Z !=^|@:M/d:2Ȱ6bpZzU}Pr\'a;F\ևżOטUÔXռ43KL|;U48ϥl12,Z-H@OgODzA ţB5<Ł7Bv pV u=*SDD88i*˶"{]vr`Y^ooZ/ N%C@jKbtȰŲ.-$S(kt@N5JE0+tS&0w~s_<@}1HW@$\B;ؽCO Hz}Ai[KZxʵԳ@_F}h @MV8=@Cr?sKZ..4dD D%C|t3b$ItSvw ,)%ٔ8-2 |I\,MЗv 13@ܐAwmþ/%gL)/ɓ/8 >!ǐniRe[ DR 2[8yGxKґxT}V1XujTzv4Yu}rxԌ`E(}{U8 fasi.$ VSǢQ.3vuHْVZﻘX%G{.p_}#=ҹ AªB)eogwMw u_S:lPT6qpEOfbC31p7bqXʴ'"]V9;f&tRЭ!ai|Ck9בBV`-35{e4-hyqz QTf5 vo!HF^d55rVBcsExm{%)O韴6@%x\8v,xh+t 6L%q;‘w -^ϔɩ.9x, ~ I7ٝJx5ĆQ,(M%V+} KHF1AeM-IK ͍ pPҿJkَfs4֞8xl[)# 7uJ.b{(,w=UԡYwH;ح5.y=hpaJ(`Q)j&Hqh t|@^ل7mD3O\e! PЦ6Wpi7mvI~^m8XRsPvɼIG pP/R_/˛ʣEƯ!s5GlԛiWZt4Ho+8/z2wX8IV endstream endobj 138 0 obj 2349 endobj 139 0 obj [ 136 0 R ] endobj 135 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 139 0 R /Contents 137 0 R >> endobj 140 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 650.3 null] >> endobj 142 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 467.329 186.108 476.579 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 140 0 R /H /I >> endobj 143 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.568 372.429 280.818 381.679 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 140 0 R /H /I >> endobj 144 0 obj << /Length 145 0 R /Filter /FlateDecode >> stream xZܶa]|h#NR)\jwh9Rݥk]Rpf8ߌÊAևՇj%i ?RQ.=$ :" /H&`˞JW|W";c@;x[}}z8djەP՜\/cDRtE8ݑ3(Ux$?go__V\aLGu~|}wİ CPy7R_R5.st܇%#h܆y$QA<"Yܑ$[ )3XcD.8ц)%W (L KҙL|Ӹ$m.Q0Gcf%:}883RR؈@nEo lqJX'HmDp@#EQ- fLd7an\/l&٩, \ƶ7YӹfID&)x r_Y[5h.[Zk5qi 3r`c?c Iwp<79֫$pa[~TSM9?P7Nc J\Ǯ J32=Qj%(b4ns 5}?SA#-׵zqs0w5vU8eK{ўYu`ZIqQL}˧ {&m<>.oH0G` a%0D)-W&~Q  L".D FNt>B+8c} BP3ZaD0KHJB63󉭞 ҐC'A5H_^kSOT`7"\?{Rxͫ_|맛imid~!TG$D\n@{*}_X a@BB/Lz5dDט6~8ʨ r!u\z 25̧oŗ"*KU-(A&wQ#"4= !NY)Ei%6,GP!@[RP8>ja7(-I0HcΌESjA(P&1AqX/X& ?epK1d@Aqe|[CJYo9.KJSGZ_7}'d4SilЄf!0v{hrLX:vp7!Ygb =Ptݬ{cYh)A=T0,B:JJ5HW"*J Ω3+:_LfFczC. hKFitTJVSx%ȝ:T&f{#90ǐ4ـrv(9KA| 0o}b6`E0 4+mo4e'*Bh, [C"_H;BϪNB'sO~hӓox#aS-;-N׹]l#A&%Kϧozr0FY1R TPVt _n1v7 {3\sM5'Wg/CCe*h<"< _Æ۹B܅9E-/I)c9TFk,Lgl{+G!BGk58ԼʰˁpP) p!2ځ*:(8ppo}*.CU.usbrLR r, ["rAⲨ51ʳ :Oa7uUT :!aJ*PŴ͈8@8REo/<.Oi L)9`R"uv8mmcN%9m woX[j^NXT_0*&q>=2W ޡ5-k<' dCd//m^qW=pBˑiWg.jRw42Ɵbc~3 {9Mmn,4d,e[ ņ%sGo endstream endobj 145 0 obj 2517 endobj 146 0 obj [ 142 0 R 143 0 R ] endobj 141 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 146 0 R /Contents 144 0 R >> endobj 147 0 obj << /Length 148 0 R /Filter /FlateDecode >> stream xZmo6_A)6KD`C{}5{PvEٺh >]ppcDqyyf҇N~̿0zsTH<?O %|lN.6W"UEP7zsoɻz_\介2 ^?mlۮ݆a)s/  ͣvBWuSWָ|MiCN3.qT{ٺ 1krQ#ь8WT )0[I^5qVFV5$nd>g ףʑ*aU")$yɚz(eSRePs\m]ӖFрT-n1Y QNϕnˊl"uCWYuANV j`^W+Mʴ:1*Wn50eM2єXM\'yT*t-V^ljϿ'Rbn~27;QGũeO`{өe֍y=޸"K0V:^UO 9 V0urwM@VqM&,=!(qpKK]2A!AA2hYE]qdPA^m/!-wEB36Թù=>5ȹ01a\m3f a >K;- *!m<ܥ~fSX[_`GQ/ Ԯ*ZPd="[64k+ JCHYv^&D.X8hk})")1p@57Ʒ:GrYjnvdqYˑsW826*'GU%ͨ^8 cp<`q>RF Pg2z~C ta`2g{#X*nWƇA>\?2[k4mp9ZG$e-gQ Ȳom~2"jEZ nAzm6-'P$/._?U}yYisшTHUgh7lj}$X/"4"FZTzLI| M\_gKK|vUQw-.5y6s5*xOm/͑ * A-(+H)-"WV Y%}S7 Q[O& }ZF}0:$s5vʒ<js񈥃E6m$ssF @rokrl!̶ҷ]>+7ƉM 8GA"| ТvH5Ig% l|*Ohz>{"<7 )C9g)~_Iȵb! )MbC+dqI*BAH .C|۟unfɜdt].7T7H-be:O~7vkLh,{͕EMYu);7fRL{2g1 STzω_O\.NQxw=7{߶糶fsM|{<7# wgNW;/ga( hsǪܹAS+IuK%-%"Ge#9lj|d.9N$6ңGY&dU?TϟH|)z>{"<2x:|BKaC7-݈ MH]hm\Hŕߔ>]ԩ-;DKC ؕ*]w V`-L@XǦ]5âY%k9psep3Z<7v 0a$U'EyQ ŋ"W< l=~MDB> endobj 150 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 410.049 null] >> endobj 152 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 154.656 null] >> endobj 153 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 491.924 251.264 501.174 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 150 0 R /H /I >> endobj 154 0 obj << /Type /Annot /Subtype /Link /Rect [ 107.884 223.531 364.094 232.781 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 152 0 R /H /I >> endobj 155 0 obj << /Length 156 0 R /Filter /FlateDecode >> stream xZ[o~n xޙI6EKyaLdv)R!)"ߙ!ū(A.+r82~Ӆ`O,^T V̵-ODGYq9wp-S7?X ihbn\ܳ/ ξG Cc滋oǼj:wxǏ\=?h9\|~{ᗂ n׭ _XA6Ydqv~xu+dȻTdA< (  8r6ڎbEA؊|h!ll,[$đD-V0X,od="hLÊZna\'EF~  ;baϮrEdƘJ>bTZﳸJl.k~W$Y_"fWW;Yl˫동zL+ř)s.xP]63޿mD#7~o zuu1rӓp XtB($Pܯ5Kw4eemkX&Z*gξv2YYsY…w*UV*9(ݾb"Xs~@|_8nez&be\$='= h]_w*֚_!,;!~j{F9Pw 2lg8o6an"Hz=V~w"rBEb潵^2M WznqXr^3|^] (Na(;Y|u1ǎܿxjq!0c2ՏOrlL,|_z3:Uōmשܔ7 }6_GP2Ɣ !?[.YQnNi${ZƯj.d7Bb"ꅤ#Uj JY>ex[Hxpw&~a9d=>+6T Y [Ԏlצbn}, 6Ox !eJSY-p,3RPdtydJJGF_Q^`+EC.OH%#͒-^ѽz]$yD,5IV  qHY%,~yIJ4-6-MNv>3E=ȧMkꙏǼ uyi WjI3Ke9 jU ͝T\ΈȴN+.eN¤(=:V+_(RuŒd8/ WD΂TA lQ:S;E+8Rڎf x\!LAW( ћ}8m Q@6Q5TK2mvζ%Hv)JERFN[ &&VAD11oUgnt:^Pwcg4nU`,xN"Z3I,nУqPmc)#\qF؁eTgY9ӽQ` }͒Eۻ-Ԡwht:Q8:~C? ;뿪w{ nk>7JpЮћn#=a[yi+}4'J1!Sm5 ڻp1=k]F`dFEPגțoKS/ۥva]ѧ dȋB'n7v)$A~ҷC U5}v2*]ep9Dh|equʛ}7h>e}.W#v%'v>Mµ~x| bV[mAhQȞXۗ|9@3*}8m>ի Z endstream endobj 156 0 obj 3025 endobj 157 0 obj [ 153 0 R 154 0 R ] endobj 151 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 157 0 R /Contents 155 0 R >> endobj 158 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 398.121 null] >> endobj 160 0 obj << /Type /Annot /Subtype /Link /Rect [ 71.858 197.095 184.678 206.345 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 158 0 R /H /I >> endobj 161 0 obj << /Length 162 0 R /Filter /FlateDecode >> stream xZo_Z49~"/w%<-,"# {grI[-ofkGeW+9Vtk(D*"W\ I L\ۖ _QܑD%<haO>%]3na]U+a~^ܯ]lM*Ea7#ɱ6%G5eU'6ߊ69Ez{;5FL/0j?O:i\_ٵj4pP!l4BeM4AڟAVHFI4|?=lܪ0x#@`Q #=YF`[[~RESҐ$2dg?yvQͪڣsTS6ǦRq`3!\<_ > Y)&()1FH6+d-MU7f@[mɾ{ ?Фot XJ! {C+!@]'L^wQ7̓TU8I*S]zoHq;Xyڔ&RɒlPSXHn6ݩc8b* ٥iTO7$IQBG~[q9 H+Mf>%9(QSev XIeqg) G8PR4G`[75+dOgs>g19s]e/%ḻs,+hx4%z!DNwkiPGsYe&7r(vn9&! !<8[㜬B @Omqzj|PfhANyOs΃@2ʃʃ'rW,@HJO x<\gj{X Oh_.~+xKTi; )Nv"ݑ!PDBGvޕA 5SCrB $L,:K!w9x(O@ETZve@Qpe&.>z{BpntPI‡I1sF{hȌc~5S E|^BHȌja6 .r,X^m b( 6\2HL+"g  2i;2Fpn1acɀ?ʧ7 l!;MĆy$RRcqvļ+"›Ѭ8P@+BDEDPvyT>:mRRhkva^*VX$9v'rUo!|!e:b_%r̾sPZ9>uwm:ŠK95L=s;k4ڐO8X&esvͭP9zGzJh'#Q;~)0hr^8m|Q3[:G-eKZ:rb5LƽGb>^沌i%sa(8gogi]vCFK}V%LOy]d{~V3=cs'M,؝ &vտNjյCŤF)]gqÇD(k K\/o)1#!w13_Fl{uz0eP_*(Ik4+߲0q:s(LzϛuH]uܮ9F/w2]ňyP H(A\\5\2I.snuȾx $$Ҳ>v)@RgF1ƅr|w=h8waoV/ࠔ<9 ,LҺnT `A> <#k+""rKl6&\}7( |W&\Ǿl.N<':*IP./O g|)-q[_M'*ή{\?3 W Z @Rr܋[^\+HTS̜'6;^Z3hrZ~mbv!>.j,Jhײ|{;H֝~7Hj|x`֋[Bh)\7P>À\?=*g[,}c}Ky 6K;MXJ6/5lWV0(ƿjF- endstream endobj 162 0 obj 2266 endobj 163 0 obj [ 160 0 R ] endobj 159 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 163 0 R /Contents 161 0 R >> endobj 164 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 192.556 null] >> endobj 166 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 106.067 256.264 115.317 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 164 0 R /H /I >> endobj 167 0 obj << /Type /Annot /Subtype /Link /Rect [ 311.824 106.067 437.414 115.317 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 91 0 R /H /I >> endobj 168 0 obj << /Length 169 0 R /Filter /FlateDecode >> stream xZێ}yU$(F5jKCׁ=x^@vuSM~H& "ŶvN0a`QhHi˥6Bh& WO& C"LɰY _|#כ=l67|]k͇P'Z=COߴmvWIo rguEZ k%޳^|m'iU{v͗׭q6_Zdw~hZ[`O.qђzab+nyG%KT/+T?mmz$?%S8O5R*m,К9۟ʊm.씰XV[LlK|ڏ:+!2=Oq=qbBE^uzeag#{[g)sbTIfet 4ۤ;9xpq f1mAnox\E%m-06Oh`Ÿ@])3_~5s,UCn2>ԑ}cpb<'Is8Kg{*LK,.D;$sNEA1p2aqoYWKN0/36y,W=U{CRT5d%t˅ -BaQuk(ŁKy_{&W1{O~Z9fY`1U)EJ6USh3k!%&X%& ⡶~bG]σ~:y8Hn!#ſ_Z0֝uq@T법1ٿsB+3C4m41R&`zdT[/ _ WMiFL w#d?)&|L".K ^ ۣ gkWf ҆{XYczzmqNV`FN Oj[ ke`!iE*PΔ>"Y'9HO><֐+?? zԙy=nmƜ}[I[6Y#d-{,N5!V`G`P?۵n,;Z\"Df#誾Xަծ,Qbg+ۤ˙#~!&e qErsX˵C! kяt}ߪHO%@w 6̏Eq'xHGZIţyDO;䙉ٿ)F]DP@ J^Vh>4,7p??0k!lP!ݸ=48\-Kh 3;4!,x pYSz RIntFO(4:'Koa%3: ,4]:p,~HyS%8u$t~a :9W+dIu:='`N8-{n3'fHr5&#ݧY\ Mxdۣ5lM-5>+';V,ۈ"&PPvƻ$ endstream endobj 169 0 obj 2154 endobj 170 0 obj [ 166 0 R 167 0 R ] endobj 165 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 170 0 R /Contents 168 0 R >> endobj 171 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 588.104 265.714 597.354 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 172 0 R /H /I >> endobj 173 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 510.132 null] >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Rect [ 287.974 434.33 554.164 443.58 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.334 128.162 535.494 137.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 177 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 115.162 230.124 124.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 173 0 R /H /I >> endobj 178 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 705.3 null] >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.014 115.162 466.894 124.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 180 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 203.964 null] >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 161.794 80.065 429.104 89.315 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 182 0 obj << /Length 183 0 R /Filter /FlateDecode >> stream xZo߿w%ER!isEPzN>V+IZw%Ji}8[$g8N{t܎qiiId@SP ɘ \@eº_0w W\!6y XǞ)6us F01aq H\.R] _o='D1x\kS:NwuyqOCImɿ9{\mu" .A"TAb4&u6yY8 rG}Feݐ<D5TUDʚT7:9Q{ *hJCR݃8hȉ8RREGAhLJSQK* Pc-":#{XY#OmO瑅+d)A ?8 3`%L|{7A=PjPh1;9cG9Cp62;nA2qvqRMD E0Cq_gc.Ty˙ऄ@x?^"\sީv9+VD>coa 8(42  @6"9f]*fnnb8&r΄ԯٗSA(Mi|'-Y+E#$lN75ټټ9Y2~O2W6I;i?6AY0#W ;PS}H/kz"wf=L: yӼq=-l-Y@=;d%B*dy0[^Фrцÿ{BfyoX\"k>-=]!tڙ$77 9&Z/O!p1d'0v<TЦ2A_)MB(9#=#٥s3~Z,yQQSm/k,3scoP ECG0 fb?g짰_ Mex}W~φꫠ>%#E1!M2 ;B"pb> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.348 588.907 421.658 598.157 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 186 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 386.033 null] >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 278.013 192.248 287.263 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.598 146.445 357.868 155.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.318 120.445 230.588 129.695 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 191 0 obj << /Length 192 0 R /Filter /FlateDecode >> stream xYߏ۸~_& (JKq 6mC66"K$Q ߔ]{H%J3ro k3I84zH!d, \RS?0? odC!6u/bG~]+F F70c<[zSMY2x=.9Ԧ$%):7i~GV<6@~-/O~0Ӄa ^ۗ:=mv k^ Xμwiu g:ݛbINg7TX+O!"ɦ0wiEnOU$Gk$anChH pNUD=lyFlboH29a&c D쐔u>fI9&X1#ۢ$ OsJԏFnM`LNꇂ{I*qYeJc:-r]Bp!Hq0ect*Ұ#DFUX8Ά\T1aSbr;$}EvDkYY6IQi/X3?df4$*60a"-㭣 (bu;vN!ȝV}wlT|CWyN d**{uŻGCzHG:h`>}ظ e& Ʀt}.4jK )PqDIZ\@Q&@IKP<~6T"F@85RDNYsy09]W˼개gqotd@_x2M^PtbK h_b} TB+r#DBT &W$Ծ X;Ceٚp7K.*:"|@ Bh!!`΅E7fzSҡ "T&Ϥ=VF:VmOc[eb=~[Qb1&2y/N-x@S[r e)Wy9 rP<[6z)>}Xb $Tcz'>Q~z?k 9*Pf:'E ._E0U cO񑧒Ҁg»ɍpP]/ -b5|dzW^#m:k aj#aohAY"?"JBd+:1GDt8qFPD3ٴV3/1Ps!Fˢo<52kL71CǎV?gPBc"xxڰƊSme Ó}A~+iY%bwo{f)bi ŨV'ˋyvu>б$oYʳy-h̚#UOᅦp$E%-#YHQҊTn ]Rɱ~썖㰶7 *!iLIwn/=Q4%$]—efu:k?أ'XP(: xsp|ml=~2axmm2,1J}.BKLcʡS`vTO<;t_L(yUU1 wRS$jhFKf] l5 hr[k?,ƚ֬E芘d6f,sĺD,aZ;+nXI L1X܁_j\V0 f$C6'yHHȗ|;@)a ?5xug݂yt8!rD=6{dk;8GXhnMn;Dͨ'GÃn\[;rhmšſ=q endstream endobj 192 0 obj 2376 endobj 193 0 obj [ 185 0 R 188 0 R 189 0 R 190 0 R ] endobj 187 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 193 0 R /Contents 191 0 R >> endobj 194 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 652.339 null] >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 190.164 480.646 368.554 489.896 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.634 429.685 463.024 438.935 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 198 0 obj << /Type /Annot /Subtype /Link /Rect [ 299.944 364.724 478.334 373.974 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.374 93.073 375.764 102.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 194 0 R /H /I >> endobj 200 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 224.138 null] >> endobj 201 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.104 93.073 543.054 102.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 80.073 184.014 89.323 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 203 0 obj << /Length 204 0 R /Filter /FlateDecode >> stream xY[o~ X q4HQҾ2Y@LТσb30x}Cʲn Xl ) M>g{&XzQ@G 6×GEŗX`=`1`yiթ_yjuzaŇgGIHq$=tnٗd&)_Mfj|a*bIq_lM^Wᄇۿ/>6IF*I>J/G#n 3UТ.SYMղ}3/)Iˊ9teUuu,Miޱ"]eX ~? ҅t_&Y?#b$1ꤶ6Ι}"ҍ)E{5>e ݐ?p0#Ff)"@8Dʙ-=mwl+}SyU5ϢF=.N9LQ{h>GJj߻#߅6].]7U(ZU؅E*%,ݼ~$HпIMlf՘E}GBDZCK2f=HH_HG~#`d—" 8Nlҋr$W_̯f'[Z ZKĦ@dO:ݚҫVWrnJN鎔uME@Y2d3)$ Fgg(gi^߯~b?7lX2n:36,/Zm̺@w*țDQ"p㏲(0Ew7.剤G aJs?BĈ As5zƾ ?[Ձc]"]]Eg[]66ֺ#'uֳ ޔ&_fJ*uqՌkN4,n#OQIMTA?vF).@6BRk"4ugTUN{ÞlghN1B5Q3)g2bϒbWqH>5J(Vvq-Q պLj&u տn>_6,ӪNt.UKI,yjNEo ɔH [8'a-$+~ݺ(KS=A&IjX$]+`k.`ŞJl(g2㪉1sNCepLzؾ K>li& FohS;)|7=͙*oi[ غuiGllpKVYl:lQ 9J6Ld/+*Xnzlv@pl|g(8ܘM}a|h1!jwA]r9CmkJ-hYD6%; ޴7pq6ɷA^cKX'C?to֮.U>SO8Q8N5;\ߡSV:8>5{]G7$s pQ!C/1DGcÞHCwzrv a<%,8@To3ez i5moZ%>AD\%K/(D8Ako\ ]5 $zq'c,̀5ʾ \_]Ѱ7C͏[BI/]fz1Gf0cY;;{"^zwcUm򱩕0TՕSL 6:_J{v#]}tWn6jYS! ^?꫞6grO:|ռ\l eʵK[L&cFCH-djJZ \Ã}EJsMW=R/0UN}7Z膕t|%9j# F9_9q8&c)4(]vShb_Y!ub]3fWth$o$♚F nv\x iSr@H~B-q*RS܈vC{.Dۧo9/^` kl?V ?oZIK> endobj 206 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 53.858 638.3 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 456.175 260.048 465.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 206 0 R /H /I >> endobj 209 0 obj << /Length 210 0 R /Filter /FlateDecode >> stream xVYo8~ׯ(C-=ނx(<(m ÕƢ}dr<"6 𛙏0/?ʜo)H p9,/q! .KUk//Z"*ML c _ܡsw1K88v[6/ 5"Xw= 4EwOhW?XUqoǪV"zw?ϋq0ӝithܾyϝuр((hKq޹$~Q@\@9=4\VJ\T{UAZ}ոp4+QYFG_QwZviRmq5`_ie @%X> 57Vbʨ.J >3$,P"8;e2%[^kiL /%B=s hA0#^tiؤCae|OqCmweu]2!'Cτ@ QN}W> endobj 212 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 638.275 351.744 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 213 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 172.359 null] >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 373.984 638.275 517.934 647.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 215 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 625.275 221.684 634.525 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Length 217 0 R /Filter /FlateDecode >> stream xY[~ׯ8`3 9vѢmjxۢF+’&)o Iq8rmXu;  GfRX=y&WP 1\&o;&l "[,Xv/a Z xw׸yؼYth?1_c'Z/^o <0&L”bH~ooєGO :˶rmmy^}>3Fc`ǝTQU| 0:ª8haܵBA'[T$x.-vk)&Еڵ?{l`SW.IK,INUQG@7vEA$*LSZ ]Wr3?"5\2YuN8fp>\4Au&E:9' r'?k'h'L9_OuzNp? b݀-V[:gr>x gY +l0~Y ^82Ӊ5Z>L4SubZ111Gv[5c$I)6m$MUѳ2,w*倌Քj42KTSOg둨//C"E,oNTb,ErSd%V<b#EఓK\VHŽ/@O7\0O J kK[h+L: JI:Z=I$BAETw?G^B+i6oOvu^,o#τk)$ ײK)mu,o]㱩 xn7_\ 2ծ/oVR_u228PO |_߂w۟[T*3aj)vتSbS=D._g=/kT:9 "vt?rQ4Y;^~zu#"|LJK8??@, ޺>Zt8)WAQ0Q-1N?H쁺quXbR^A,6a[[Q, _utY@S]Qæh,{QOhE{ \g_$&+Bv ?!~ۈو\ɒRaP s+ཱུO <&qLEOڿA q'F=LW]ڜ{Ӵo t+vMGETIڅ9Pia_n;99D񌑃PM-jGl LJ< ( eEB?v.jN+[~}n.@csq"0,8 pHS!E orh\>\títߟox16XQclh:/;@b ]+7wCҴOYK!$,e, 'F`9 G.KNS@_f(6J(}6J"=bClʌ?X/qH@ØȈTZG9\R 5qXs4,TXvN%CCh,$֘V1SING09Bp//#f/*!IF 8m`%lŸGEj{2Z"8 qeDMnzY endstream endobj 217 0 obj 1975 endobj 218 0 obj [ 212 0 R 214 0 R 215 0 R ] endobj 219 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 218 0 R /Contents 216 0 R >> endobj 220 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 197.421 null] >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.568 596.975 328.398 606.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 220 0 R /H /I >> endobj 222 0 obj << /Length 223 0 R /Filter /FlateDecode >> stream xYk6_A(0Af> 6EL[ȴ-,y$9dS`wqxD^=W+Iwn_ȏ'+!}ʥǘ$ܣV 0WLm!=Xǖ(x}hxw@ڶ4fsr#/&FUDRKRU$*+6|xN䷲_ސ_Oa3\cl~v4Ӹصf8P!&JicO44?fE)zӓ4 < s,պ&! ɳ!$yeZ$/q>dvCxE hı o5nqv&&W;]d*N֯>QNT$2͒o?%A G")A!ɧ0<ul$Y㉯84fBl}6=$ z#ݮDVپAH"K1H8tw,R9I%]mK]G"&)CkU 1&R[dl?QDH@R,4I N^:Kɡ#wQgEBvf=3䑒wJ]v/5~$FP4[E5r6  97ءf&st :/xJ śA++TW% yŭ :3 &GɺQ*I6 ! |$|##q/#_ 4/" '#mbjT y0Ӥ嬧r^&FHgc~,&uswbq$"zOcʞyzS ݡp@ouRX6e9B ݄?{0̛ Ho̙[R+2?phkwm( ]@?DsK{йЃB2,gg.qƒa@;KO<Ӑp%&KQTjD1Юpg"v%9j:ץx5&SQ&U؈Z_4@(k۳ݾ0awȡwuB=U$w.˓j̱*lM:TV!eWGvKj{lċH,gn2SRemFR 5 =w?̢5j4؍Xh89b 0d?AJ1ͱ2jJH` _5Z/ endstream endobj 223 0 obj 2073 endobj 224 0 obj [ 221 0 R ] endobj 225 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 224 0 R /Contents 222 0 R >> endobj 226 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 676.3 null] >> endobj 228 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 542.575 257.954 551.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.814 434.675 331.774 443.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 292.675 303.744 301.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.784 215.675 303.744 224.925 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 226 0 R /H /I >> endobj 232 0 obj << /Length 233 0 R /Filter /FlateDecode >> stream xYKo!Y[T2!a[n z$"=Uz$Rr{7nQŪWҗ ' >o+6_1NlDmTxzKHMTIJX2ClvN`{Maͧ`t|ݴ6fj~|6Fǿe؀\|2zGN8#w  ("1eZ3@>[q84ߓ$֮N:ݺ|ߗIo;O5:Qy`̢>qIex V3Cu]ۑRF\슜*☔XgFh.Oƾߟe')уh_9e%[s'9 506:OZq5lH#cs&8X^)ʡ]A(˘l|q6뿛h6Jl.I; R* !!R@^>p"ഉCTc? bt2Ópz,ֺ46%`G >*ʨ~ (pNC>482δ(iA@uӠ^(`q ^CՋƸ%FUV&nt Fqn,npWQ*i~pS I)yL;$7on@ 㟶):8u%!xl;缫+ Kû*9 8f\!ȍ2P%`XU?#W6RP.3DīaOK'XLWb5y#O+P Yv'@X3>РbgPn,G'&(V ]= }8eusq O* |S1EV? OX- e_= I* ?ᓯNtMHqc꧵B Q6n,%v^x1qQ$ZwQ5iФ"'9_@}3#aϝ-IuEI/qqB gj@Fu¼_LNֽAOrt 褧uPھលZ;'PWoV m@[}َTc.۹5 ܚ\M;4e`+ O͡(=) z@5{,= D<( '2^֭E%ۺe3L0\01whavM^+!\,yq܆%#*-+E@ZDI+Ͼ8dƄ vl]NGw\W$)T=JgߋsS l6Q5OH˲natex()}Hڊ\5%4BGڜJ7Ԛmy<X&d@Ӈfn:DJfY&E|1-Z> endobj 235 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 613.3 null] >> endobj 237 0 obj << /Type /Annot /Subtype /Link /Rect [ 64.978 443.175 237.258 452.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 235 0 R /H /I >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.798 394.175 320.078 403.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 235 0 R /H /I >> endobj 239 0 obj << /Type /Annot /Subtype /Link /Rect [ 139.438 260.375 255.038 269.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 240 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.488 113.375 300.648 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 242 0 obj << /Type /Annot /Subtype /Link /Rect [ 322.888 113.375 419.588 122.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 243 0 obj << /Length 244 0 R /Filter /FlateDecode >> stream xYY~ׯ(,`d{l<$32N7%Ӈ=SE>(X:dW*R,Ν 'whwfz;cC/O w@)$tM %qƈC릨h~ A055Oúqhe nЯ2B0?1 #x)VN޿EL9ޚ,R61٘R(Y]*沉3& mW_xK|a_yVM̟eծW?i`u&_]&ժa Z4%1]].|2kf iImfw{zLٜK_Z Ir +(I׷Rp;>mjXKl$=VK'K^=,h"F2ưc|V .C ѡu3 Xs^ %֪.Q*$}5[zixԙ e!4@nkKh#>bPXa}23<4$ jͮ6 ?. X-Fز}k.E`ºijs[ڱ(Bc̢rQOǒ wV;뱰aE!!PHb0оus]?V ĎOފ}fSI,I-׭(iam e~ՕwA2?+m)?mQ8~ȳ N;+˙:=ēxI5ӚqiXaeuS9HTC>4-p[|)/N 4 jn%E53wJ~ȟ8ƸANȳ?5VX*P!;aLIe[heŮJ6퇹pJ?\ڎj]s X彘gزZ8ĂyK U(qPRϢiҀ; E*n=d9y Ro"3ޚuڌ`QW7U y9bͱqwZBW438td⥪vVJv sxQjm_.vI5Y?n%v5>ݘcbMcA eo,\bOutAwG}F0h䆪mjܱm6.L&: mC}aXP[d.x!9+jU!j.>B\ LHQD}U?GHaԒHڬ~z^TNBXZ jF!3JNhJٶtn}Frn2z/ S8rD %:/%fD>+PotzO=U=Y ǿA IYj;^B"> endobj 246 0 obj << /URI (http://sourceware.org/systemtap/wiki/utrace) /S /URI >> endobj 247 0 obj << /Type /Annot /Subtype /Link /Rect [ 509.724 446.416 534.744 455.666 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 248 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 433.416 255.144 442.666 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 249 0 obj << /Length 250 0 R /Filter /FlateDecode >> stream xZ[۸~_ASIQ%@4Mv/b"K.3q}!%Y"egRmdy\?' 0Hԏq4 }{Txr3&'†0?3颅!f}4UyWKpe^wjLaȧ)c#*FvW/W77Fۓo<0 1egCj#\^?|#pPp!L,üw144i~ "Ƥ<(8Pq#bf1%ŵ"[4@0˦vd4RHc_U4$U]]mrgΰzmO`ćFi~H^mőlkTF|Tu~ق*M`i BnԆE98]&y 6UӢIur&Fvu v]a\CʤUq&uW `b*Ћ+V{1cp_2"$ = ^8q|Fnă$σЧy1! ) S:&BRKҩz3|쏥O׀0+=Ȩ|&:ao 5K!2uWy߼_ojSU*m+"7^ -Dd9VUٵ˪k]K-|} ̤!&yXỵ!#k2>Ag9Et_g1aEz@Bm4mݥ 9Maj m϶T;{RP޵j' T= ZջU&C1_);G<͕YB{ȻO8S36ρ_mV-Hǃa':NH^?D/82qd|;4ƅbt'g'K6o>ycy"F%`^p]FūңA?yG=g\jx@`0 w ECìks+N!Kx$MY;={LAg?]Y b>oi ("DKGnv )pӏX/ʧBաZ/udMk=oټJgғ%y;2dkЧKxW|9L<rQ-,氕UPyHwHsPiӁ-8lR?Ig?ׄCR튤vQDB>k5[Tb4ów/?~~'δڪF9dr 8y]{dX\ޙff8qm*< 1,0CvRn $0i]wIsRMS]{N}]B+BJo/M")]Zl 'kҤAg<9j؃!tz`NFV2SnQmH%eRN6A {G,׽o-gTpm6}hT(sr`S oƗ҉}zKġgŃ9(|/}[wzાbêNwK.3=Tڰ$كT++Ē{<1/2W%?w_h@Xs)|gߝ-<>"^p10]d%cc bgQpΞ`X ̧Ǘ;OL"u|s ’V+gVRa8qԳX&ӕ d]ztiy3ciA"$`BvS]b/dDy rhɽk`D9q#.blɮFmBYY3Ʒ{$:jL~\g %\0baÅw?Ͽ0^<(/N/3`?eNT2-\bǯ%<O z/)D%D~l!'.& endstream endobj 250 0 obj 2392 endobj 251 0 obj [ 247 0 R 248 0 R ] endobj 252 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 251 0 R /Contents 249 0 R >> endobj 253 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 259.194 null] >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 411.788 141.175 507.948 150.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 255 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 128.175 98.868 137.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 256 0 obj << /Length 257 0 R /Filter /FlateDecode >> stream xYi_"6;(N[1 A6FH"ǿ3<$3v:׻|cw& ?7#Jv?5|E~D|;>>]ϲ\=1,ROc"Ò5/[yQ,,߰bݧE'c#nl.EҘYoi;߷|_![AWy&dMY!I,jKTк Q|,='_6qm90 1Zn3Ii FP>L8ދ1>!@A 1X#`T_Jg 4 λčawhJo,!xj%h_fE=vb*<%y׉)cAe;b6Xj'p8k~)Jxj~\iKq~խAf5D 2A LZwjA [SA V`*Sw'mVM&Xzl" 1$Bokr^ȾpZ7yKn'z'4:8ssf[6#XlLiu_sȗ2Ut/lK#bܪ/KUR>˄A j#)^=R;.Lsh*6Xlb{AMX&h E-)-ZD΀d4pD߳:\3HOG#&^wдeIܵ'~4:QPF]J]RU'U\|yܑ hC>[ qV$ ܮ.!i&TVGZPN (rzUw);Զ% BSoXuh6~8+ywɡISCTQ vsHl5>*zD}RCJ4>Pet8ng~M糃#@:x=̌\w'+kGU[ W d 4ZgBƶww$b , 7n 9lRf 8v0Sۊ|ߧF߾IubZaNy?:CP77`\!Ǟ\QnE)5 eSZ|]ꪸD=S^nXg6al*8;Ox{[jW(a?}uxL^zwp;~}ӽ,k4}Ab ihhZ&yA2as6p$78an_cm]lW|ڪA{ endstream endobj 257 0 obj 1943 endobj 258 0 obj [ 254 0 R 255 0 R ] endobj 259 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 258 0 R /Contents 256 0 R >> endobj 260 0 obj << /Type /Action /S /GoTo /D [259 0 R /XYZ 53.858 210.1 null] >> endobj 261 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.594 263.841 444.124 273.091 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 262 0 obj << /Length 263 0 R /Filter /FlateDecode >> stream xZ]۸} I )J4ERvvYm!LE{%%냒E 3{yxxxVq?A&X8a1u| ow8LxQ?@ %>jÞWe˯u=#5WlS2O ۟o;#J8A.Yp~y}f,^ͯoZi.j@;(-o0Q!>_%FFb;T;SEmG)p 6 D+‡< ˎR*h>&S"zPB&$rHO2n༑~nŖ 5X8pn27?l[Tfu$wnxx^nCzW9}\w>.1)y}WeJkP]a`g/OEuw(;3|‹99LEQdjeYNe&ݰ3z\"T> I^b;%Y1PaO@5ϧ[ymq8O7R.#$%H:Q@\]y{\:.IDxcMH_UX9Sr(ٚ,N/dXlWlx;&'Rc,$Da@?>Y^% f\@IY[LxN+Gǡ 2lPk *VZ#[Px[G=+NJŵ ={ǚA(# ?u"EEZk&yهrCƈ(LJ],! ]4lm#XV&Y͒8gk2mZyR`-n?."ibbbS6)I"Z c`*X}a^yLnK'ړKP:̇boiS9ÃQ@6!1aDcZƇ >v>&{Sd[9l4Mukl]pmR޳d*M D zhJuh0qBEMMa_5P,x_%n-x]p&%r& {uca:='Vqjk1Y-cCLeF)$Ѧ6I]DSJI  |?ђ +Ni#krl!Qx^8UKmiCzx(>PV:#b "hųZn8WOm)YS|׸ql +&f]Eh^yViP>Ƈs0;X̀GuTkvm]pA] U bA[4 ..7(a*OIq>x.z#g m+NA[$ĭ =' CODG l)qtF?z% 4Q'$'Ap &6"~AAИuq s YCIjn\׉TXX. 2s@HnW$._RX^v7k1LuŐ2 $uzs00(C\ӆm`GI+s.o}QVJJ5!9 [䋾k5N}?=w[[,OSu 2Û?r Ț&!j'(Ij~tyQ" %cv/]BqcA$ξ@5 8AJN2ׁ(}n3]~+7o{2u3!q CkaIAWN+u\pb'ٛ#g6^nێ?:]mȫpܻNĭ 9@T2&x֟MʪU͘#ԨkiG7Æ#(ҸkbHzr퓪@jrĄi0aOr|?~,1TWӞOՕyPHa]G&kU/ TlHp^fi#)M7{N mc|{w!qBךmu E ?t8=;!tհL[ۦwi}QK>Ë./yjfNOJ!J_ C, 5sw endstream endobj 263 0 obj 2542 endobj 264 0 obj [ 261 0 R ] endobj 265 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 264 0 R /Contents 262 0 R >> endobj 266 0 obj << /Length 267 0 R /Filter /FlateDecode >> stream xZ[o8~8˴!%ff.eQ4>4E Kt,T\]x.,r&Q:?++A7wg0)[+p=]s$vJe>oy" eUէM0.i1Qab  Ǩ?\~j9=~[ݾ$8mNF$\0q)9VbM(B.q]Lw_g޶Oeu4ou7;g*!S(IJ]U5c2WY%,7؉,OǺҼzZtp|lR Cw[6EahR5h_شMSsC[Ѻ2[*<53ej]?l\\j=A)* us1C黝 VD T5> J:zhC O~),޿MuZIG i}TidQIYl#Nڽpj-:ӥN'үM.&W<MfۇyӌVke+J.$MlG\`ežF`†6a(/LȠ挲Y`; Hy߰ .Ctg޳ DJXd-֢ @OpUDL@4Z˨3kπ`9$\pZCQF6 &Mr $K2C˶pIS~035q<$~f;Mt<^5g^ZIڑgq,ğhw23y*<2=z"ف. r<h!6SJslѝb39¤`t{A wĽ~-$oze@., ABNw<,! C {BB]-6!w Ersº+o_ʪWoX}=;<=7avVK ,MLn_]t{PȭMǭl݅J"m**zߠCmEdwF;m)LjFF9\p@?aaa.8a ^hcGL_ `8Z? m7 3T}P|#2>w:I#Bi^Sc<*U[TZ{a"NgBqTyFmZ?TpWe<ջi~nt9ʹ>?EG$NYQ?nD;tצFDUbeM5A'G% bN?Q;~?;>Q곭5gg6qHfE"&oQNhZkh"_6g]'PA^imӎҚ$״ǻcC^WO1| \5D]}w[u$?/څ!@W捋rf] endstream endobj 267 0 obj 2313 endobj 268 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 266 0 R >> endobj 269 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 718.3 null] >> endobj 270 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 707.175 124.004 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 271 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.212 707.175 560.772 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 269 0 R /H /I >> endobj 272 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 686.1 null] >> endobj 273 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 694.175 229.0 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 272 0 R /H /I >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.216 694.175 560.216 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 272 0 R /H /I >> endobj 275 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 87.874 557.698 null] >> endobj 276 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 681.175 270.62 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 275 0 R /H /I >> endobj 277 0 obj << /Type /Annot /Subtype /Link /Rect [ 555.046 681.175 560.046 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 275 0 R /H /I >> endobj 278 0 obj << /Type /Action /S /GoTo /D [29 0 R /XYZ 53.858 188.662 null] >> endobj 279 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 668.175 260.675 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 278 0 R /H /I >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 552.879 668.175 560.099 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 278 0 R /H /I >> endobj 281 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 485.339 null] >> endobj 282 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 655.175 248.97 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 281 0 R /H /I >> endobj 283 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.73 655.175 560.17 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 281 0 R /H /I >> endobj 284 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 189.995 null] >> endobj 285 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 642.175 217.333 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 284 0 R /H /I >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 550.826 642.175 560.266 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 284 0 R /H /I >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 621.175 158.528 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.987 621.175 560.547 630.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 608.175 229.553 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.648 608.175 560.208 617.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 293 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 595.175 238.373 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 295 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.588 595.175 560.148 604.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 582.175 246.525 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.534 582.175 560.094 591.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 299 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 718.3 null] >> endobj 300 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 561.175 185.143 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.818 561.175 560.378 570.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 299 0 R /H /I >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 548.175 230.597 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 303 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.642 548.175 560.202 557.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 74 0 R /H /I >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 535.175 258.473 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.568 535.175 560.128 544.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 48 0 R /H /I >> endobj 306 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 522.175 422.864 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.386 522.175 558.946 531.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 51 0 R /H /I >> endobj 308 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 630.03 null] >> endobj 309 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 509.175 224.815 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.81 509.175 560.37 518.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 308 0 R /H /I >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 496.175 349.564 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 312 0 obj << /Type /Annot /Subtype /Link /Rect [ 553.834 496.175 559.394 505.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 122 0 R /H /I >> endobj 313 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 322.352 null] >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 483.175 258.078 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 315 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.456 483.175 560.016 492.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 313 0 R /H /I >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 470.175 316.311 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.152 470.175 559.712 479.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 117 0 R /H /I >> endobj 318 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 410.752 null] >> endobj 319 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 457.175 317.428 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 554.248 457.175 559.808 466.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 321 0 obj << /Type /Action /S /GoTo /D [63 0 R /XYZ 53.858 679.3 null] >> endobj 322 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 444.175 286.054 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 323 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.886 444.175 560.006 453.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 321 0 R /H /I >> endobj 324 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 423.175 286.03 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 325 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.576 423.175 559.696 432.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 80 0 R /H /I >> endobj 326 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 410.175 185.847 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 327 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.346 410.175 560.466 419.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 72 0 R /H /I >> endobj 328 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 162.2 null] >> endobj 329 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 397.175 217.358 406.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 330 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.132 397.175 560.252 406.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 331 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 384.175 190.463 393.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 332 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.458 384.175 560.578 393.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 241 0 R /H /I >> endobj 333 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 203.773 null] >> endobj 334 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 371.175 279.403 380.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 333 0 R /H /I >> endobj 335 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.818 371.175 559.938 380.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 333 0 R /H /I >> endobj 336 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 291.989 null] >> endobj 337 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 358.175 300.595 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 336 0 R /H /I >> endobj 338 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.57 358.175 559.69 367.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 336 0 R /H /I >> endobj 339 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 183.794 null] >> endobj 340 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 345.175 206.515 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 339 0 R /H /I >> endobj 341 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.342 345.175 560.462 354.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 339 0 R /H /I >> endobj 342 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 332.175 239.123 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 343 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.108 332.175 560.228 341.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 253 0 R /H /I >> endobj 344 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 53.858 691.3 null] >> endobj 345 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 319.175 337.893 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 346 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.488 319.175 559.608 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 344 0 R /H /I >> endobj 347 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 627.607 null] >> endobj 348 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 306.175 250.991 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 349 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.153 306.175 560.273 315.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 347 0 R /H /I >> endobj 350 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 334.385 null] >> endobj 351 0 obj << /Type /Annot /Subtype /Link /Rect [ 159.874 293.175 361.422 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 352 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.308 293.175 559.428 302.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 350 0 R /H /I >> endobj 353 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 690.5 null] >> endobj 354 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 280.175 268.928 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 353 0 R /H /I >> endobj 355 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.892 280.175 560.012 289.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 353 0 R /H /I >> endobj 356 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 299.21 null] >> endobj 357 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 267.175 284.913 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 356 0 R /H /I >> endobj 358 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.778 267.175 559.898 276.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 356 0 R /H /I >> endobj 359 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 254.175 215.699 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 360 0 R /H /I >> endobj 361 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.144 254.175 560.264 263.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 360 0 R /H /I >> endobj 362 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 241.175 274.281 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 364 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.748 241.175 559.868 250.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 363 0 R /H /I >> endobj 365 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 228.175 304.205 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 366 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.64 228.175 559.76 237.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 178 0 R /H /I >> endobj 367 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 332.358 null] >> endobj 368 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 215.175 295.412 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 367 0 R /H /I >> endobj 369 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.704 215.175 559.824 224.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 367 0 R /H /I >> endobj 370 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 552.664 null] >> endobj 371 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 202.175 308.895 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 370 0 R /H /I >> endobj 372 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.606 202.175 559.726 211.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 370 0 R /H /I >> endobj 373 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 189.175 349.832 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 374 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.31 189.175 559.43 198.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 200 0 R /H /I >> endobj 375 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 176.175 365.572 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.196 176.175 559.316 185.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 377 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 271.621 null] >> endobj 378 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 163.175 341.014 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 377 0 R /H /I >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.376 163.175 559.496 172.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 377 0 R /H /I >> endobj 380 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 158.698 null] >> endobj 381 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.874 150.175 328.85 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 380 0 R /H /I >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.462 150.175 559.582 159.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 380 0 R /H /I >> endobj 383 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 366.3 null] >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 137.175 168.127 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 383 0 R /H /I >> endobj 385 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.466 137.175 560.586 146.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 383 0 R /H /I >> endobj 386 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 718.3 null] >> endobj 387 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 116.175 195.601 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 386 0 R /H /I >> endobj 388 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.156 116.175 560.276 125.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 386 0 R /H /I >> endobj 389 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 326.453 null] >> endobj 390 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 103.175 219.573 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 389 0 R /H /I >> endobj 391 0 obj << /Type /Annot /Subtype /Link /Rect [ 549.118 103.175 560.238 112.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 389 0 R /H /I >> endobj 392 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 90.175 311.566 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 393 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.494 90.175 559.614 99.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 260 0 R /H /I >> endobj 394 0 obj << /Type /Action /S /GoTo /D [268 0 R /XYZ 87.874 506.3 null] >> endobj 395 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 77.175 266.822 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 396 0 obj << /Type /Annot /Subtype /Link /Rect [ 548.798 77.175 559.918 86.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 394 0 R /H /I >> endobj 397 0 obj << /Length 398 0 R /Filter /FlateDecode >> stream xMwq=^̈ȈXJcI5"1Hp3$Uc^s5h@gTu__?X +4Įhkrzӓ/wO:x]|x ڗ_ܿhW{}|qO՞~Uׯ_?ocr W(-7/D.^Ԯ޾ݵW= ͬԯ^ի{dgUY忼8J۵f̃.Zm>Zm< Z~́7npK-[o7  zz>_"(% XH<~|'nSϚ)M:r MqtR{Cz:IՆ uvT#$5"5yeͣHM,kA,kEjd)R KA,Y*4diʲeџQφjADuNBPjE5Ld2e˚GX< ԝX<IJQ&5"5d)R"KE, Y4dir"ˉ,'tdґe @,Y&LdIJQ&5u'5"5yy KA,Y*TdҐ!ݾ}^} 7Ljj|Hͺt鏷O>7O>O7. uAE/ǭzAZOb&kIjCuz-7IvR&DY:td2e @,Y&LbYœXֆIJ'5MIM,kxR#KA,Y*TdҐ!KC,'r"KG,Y d2e"DI,k?yRQԝX֞&<}I,Y dR"KE, Yr"ˉ,Y:td2e @,Y& IM,kyRtIJ < K4Q4Q4Q4Q4Q4Q4Q4boZx\ ֊|.߮wm]W/ÛO=t}&)'Oqy^~tE HϏē :H 5aow;a8N }> KA,Y*TdҐ!KCYNd9#KG,Y d2e"$uà&uà&uà&uϯܮ5d)R KE,Y4dir"ˉ,'ґ#KG,YLd2eaPםXn Xn Xn Y d)R"KE, Y4d9DY:DAAA#A3ACASAcAsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsEsڿ8~f_إi?|X=7NY(-ITS L5j2dT^#պu(Gu%/ʑj]ˋr*LU0UeTS5Z绾?'Orcy;˕h,3`T&R|QT2_wZ֥$H.E9S*LU2UeTS5jLu2T'SuLՙ3`T&SMHF9RQTJ`#պ(gT SLU2UcTngf׉o:{w >;g~٧`Q~n77nt-"Bk<'9֭σu$DYT&SML5jMPTkZGTkZrZ:#՚֡ S*LU2UeTZǞU'@:HՊj'u4T e D,XxIJsIJFs&5 5#5d)R"KE,Y4dir"ˉ,'tdґ#@,Y&LdIJo&5{#5e@=eMH,Y d)R"KE, YIBI[ih&~=}ϓ=jwzwNW}&H88pwM'G

    ;˕ro,3UgTSML5jMQTkrZD#՚&| ՚& S*LU2UeTS5:dNLՙ3`T&SML5jMQTkHTkrZD#՚& S*LU2UeTS5:d:SuL5j0`T&SMZD#՚&#՚&44LU0UaTْْْْiGorǶ+~x"5_==o(9TFfq'ZLN:jADuEPbX;A݉eIJޅ A,=ؤF,Y TdR"KC,묓 }N^W4\Y(+I.,,O$73dT۰QT(GVl#z36Rc S*LU2UeTS5:dNLՙ3`T&SML5jQHުMT(Gvm#z6ʙ0UaT*SUjL՘1Ucۆ%lϟlo/W;9;ktzv- /gNpOwoΏۇwOWܼx~o?'q2D?K<;.{qrGrady|}E:SuL5j0`T&SMZPT;Rsf(GuΌ933UaT*SULU1UcT Y#[_`ȏok)z\?;xR,/_3VDn=yrٺ-s`?x'_~/~`wzpNm Dkrcy|v+T:SuL5j0dTe(Gu?ʑj]ƏrZ| պLU0UaT*SUjL՘1T'SLu2UgTS L5j2dT2~#պe(Gu?ʑj]Ər*LU0UeTS5jL՘dNLՙ3`TSML5j$QTk$ITk$rZ#IZ#I3UaTْْْْْْiStoDfk:>\۝/gG_$ç_O~ϷO>?=>|ܭU$Ws~qvrfh̃K@re| D|qrgz.t=1Xn,'(W;t=ʑjG9R(Guz3UaT SULU1UcT'SLu2T:SuL5j0dT&R(Guz#:]rZQT SLU2UcTSLu2T:SuL5j0`T&R(Guz#:]OTt=ʙ0UaT*SUL՘1Ucu\be?;ש[8c۞j?:m^ϋa߾{}vJk9kncw+qݚfy@zre|A|m9+sX(k3H,w׵$3`T&Rݮ 9RݮyG۵$G۵ Hu6LU0UaT*SUjL՘1T'SLՙ3UgTS L5j" # # # ]Ar*LU0UaT*S5jL՘j]y:QkZ֭qyR˖i^[o?:OYּymV|Uj"v=}3ݾi'/rk'ӽ^N$wN$O'k' T SULU2UcTN:dT:SuL5j0dT֍PTF_(Gu/#պR} S*LU2UeTS5:dNLՙ3`T&SML5j HnETF_(Gu/#պʙ0UaT*SUjL՘qP{BZt}N/+W]|dΨ4?P|^7o|3}?f}{>6ןE7s= /adk3cw]?!H^E\Y(_/?Q.,,O(GQ$Ʌ SLU2UeTZFk9y"QDy ˙j2dTkH#zʑjmrZE| (LU0UaT*SUjL՘1T'SLu2UgTS L5j2dTkH#(F(GQ$ʑjmr*LU0UeTS5Z?h1(2U[k~qvKm.~9zG z뛏w^޼¾>|ç׻^Z>ZO|~qp|'j PT S*LU2UeTSLu2T'SuLՙj0`T&SMHi(G5L#yG5LC9Raʑj PT SLU2UcTSLu2T:SuL5j0`T&Raʑj Hޑj PTkFTkr*LU0UeT*S5Z֚̉R]>Ўi]ǧ?ݿ=?r>q[%zdzσO}~qrm"σ˫:I]@mRy)P+uR Ԃjd2e"$ۦ&ۦϯ;656}~=嶩, KA,Y*TdҐ!KCYNd9#KG,Y d2e"$ۦ&ۦ&ۦ&ۦϯ65d)R KE,Y7jQ ium}}=8nh#,\i0}|~Z]u&v= }] )Yo(O',ʍHNɒ| :%rZdI.LU0UeTS5jKufFˍr,W;ʣ\XT&SMHNɢ)YwZdQT,RS(gT SULU2UcTN:dT:SuL5j0dT)Y#:%rZdQT,RS(gT SLU2UcFk=ȶ-B ^߻n7zxpRElu؃'??nP7{Drcy|}AQ.LU0UaT*S5jL՘dN:3UgTS L5j2DʑjFTk6#ڿ HoC9S*LU2UeTS5jLu2T'SuLՙj0`T&SMHoC9RHޑj߆rZ| ڿ LU0UaT*SUjLn->Ȓ.&w ۭc7Я뻛ǻn>pnV1s͚_魹xSsE\X>Y(f$7'SLu2UgT:S L5j2dT&ɑ6$9RF$Gn#L3UaT SULU1Uc5œs=Dy0In,rL5j2DHua#mIr0IT&ə0UaT*SUjL՘1UcN:3UgTS L5j2DHua#mIr0A>6$9S*LU2UeTS=.FM0p[<b-.vjnUԴ?pSkx~wm}i>s`7Ԩ:Z'˓4u6+T=h(gT SULU1UcTN:dT:S L5j0dT{PT=h$HރrZA#@43UaT*SULU1UcT'SLu2UgT:S L5j2dT=h(G4#zʑj{PT S*LU2UeTEbZ_GqD]$.+qpnRoY۾G]XNw]$v_ڮ}yv"7">ۗCwGuޚrcyb'Q^[\X>YTSGG?;ɕڊDymKrc9SML5]/ɑ]/ɑ]/ɑ]/Rݶ%9S*LU0UeTS5jLu2T'SLՙ3UgTSML5j"m^#m^wmKrmKrmKr*LU0UeTS5Zub>Q}􃣆ඝw\#׍ye=-??Ç5ZݷoG>:_Z[?۽]Q(_Q.,,O(7ʕ*SUjL՘1UcN:3UgTS L5j2Du^H˓#:/rZI>jG9S*LU2UeTS5jLu2T'SuLՙ3`T&SMHˣyy#:/rZI>jG9S*LU0UeTS5Z[kVyñvXtT^v=gGzRi^[/cೝז]/ʅ@rjLu2T'SLՙ3UgTSML5j" H6 yGAʑjmrZ S*LU2UeTS5:d:SuL5j0`T&SMZ$H6@9R H>jmr*LU0UeT*S5Z-Ҏ?ΞK_fq#.ɧmNzo?~H>==}oޝ|{~movz}i_/|ͣ+@Qre|B|@#:HT| ʙ0UaT*SUL՘1UcN:3UgTS L5j2Du>H@#:HT| ʙ0UaT*SUL՘ZԻncrYԃW.f+fL\Zoo~9w5o\/K_[b^;6o5mwt $y@h6vk+n5X+^z=̨E)~y oa Fb!$qjCuwTމc"Y d)R"KE, Y4d9DY:td2e @,Y&Lb9XҠrtbYw"5IXm@-R KE,Y*4dirs>'rG7 '1Xn,gT&RGͣPTQ(Gu(Z7B9S*LU0UeTS5jLu2T'SLՙ3UgTSML5j"UmHURՆT#UHU;RՁTu UHUS*LU2UeTSq#2V׺]+h-z[wloV9+=('ß~cf>9`~x~ƋrGwrady|EY(X(\Y^ٺF>'\X>Y(X(\YT&SMHrZ #yGu0#պoʑj7 LU0UaT*S5jL՘1T'SLՙ3UgTS L5j"պoʑj7}PTa$Hr*LU0UeT*S5VWd3?Vmg_k8`|^˶ _szǛ9*v機oDg<.mxkkApVcy<;˕N˅TGG#1Hf6$*LU0UeTS5jLu2T'SLՙ3UgTSML5j"՚٠̆Hf6(G5A9S*LU2UeTS5jLu2T'SuLՙj0`T&SMHf6(G5!yG5A9R R ʙ0UaT*SUL՘~f69ֿ>8SW/__H:|8_^~-%鯞m=Gm;vǶޝ#-v)h_W|q߽XY8}vN> endobj 401 0 obj << /Length 402 0 R /Filter /FlateDecode >> stream xWn6}Wc4آ)P@uQA`ű;|d} HF0{xJ~\$;dHaG %<|ӳ۶~͚F3whEq~]ۼ>~0"@ Ԇ`\,At-*iJTf6j+I5z`RswҰè ;SQzB.x, .jH:P!QG&FT,u(95CeRsH C5a8 ЃDnS}Gb%RJau`^4])0CEpHg*GجeӺ]<"\2<' чL{d9Ay8=D@Fpi%1:c wkS[)+hT,_U6oH<VhwnSLኃMo9bv6  :|)WuѐݾU  NM>3W7U~;p<("LhݶmCzM k9}6qBeS]K$C0mUOO;SPu&?}iZ_.\wūP&p4<ѹ=<ϽsGս)ML{fpLU;e ;J?p} 7?4;= endstream endobj 402 0 obj 921 endobj 403 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 401 0 R >> endobj 404 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 500.712 null] >> endobj 406 0 obj << /Type /Annot /Subtype /Link /Rect [ 325.734 515.587 369.654 524.837 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 407 0 obj << /Length 408 0 R /Filter /FlateDecode >> stream xXmo6_q0 b_$ ].mn@MdɵdŰ,`9p,Qs=wq@ʇz^p':3Q a@ Z̏?$掤;gX 9Xt@k㸀AeÂy;xr-9u=wH#-+` F`8?O AyDcFaOWѦ[ރk6x> .(Bux##q浛O !!2FRnnS Ku.hNjXy>:wymqZ7|d޻\/vqm)*&%FP;pofu*tۨ9zG]ye>g;E)r E,l Q:8뼈PXܲ< infr' d (V8 P@ks˷|xbmFnB2@Tײ<)ZoZ.6J Y:ӥqz`Kx)ON| e]VQBLH.n_w$!5RB\ YdqܛqbYIb/JV[`aKY&8Cm1g0..ƑMd!>.>^4j>=UICԓ4BkI`S\(Y~wrPE=N~1&+=6^^lNCR!bXcY&z!SdoXf+'(>e.Ab@G<ThSSLNz1\y>%c4×>iD@ &A)G$4qjSԲcK6ER]/i9۾hi' ݕV{1'MPl:hއP*\7._[1QvX1'u(4NG:piTӖI6/>zwa0q'%B˱ciz1Zy,OXB/&g??C*$=pQCfų 8{W<{yb|sy}y*fex~yճq>ٹȶe薑Zsj |TPt7f9hbr~Xߎ>̄*5y~$Wrѣe's(u/G^S*`Vp۵+].jWz];X%GMl {dKacEA %DX2吙Dn. nΌC_rΗza c`)Y`7D)`IJe?a@P;fX$G.*~VN  2 endstream endobj 408 0 obj 1586 endobj 409 0 obj [ 406 0 R ] endobj 405 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 409 0 R /Contents 407 0 R >> endobj 288 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 718.3 null] >> endobj 291 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 634.1 null] >> endobj 294 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 363.94 null] >> endobj 297 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 146.068 null] >> endobj 411 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 718.3 null] >> endobj 412 0 obj << /Type /Annot /Subtype /Link /Rect [ 291.844 199.943 456.344 209.193 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 413 0 obj << /Length 414 0 R /Filter /FlateDecode >> stream xYM6Wv!MiJ.V0$4B E$(Y@J)-P>k40Wy_ib<,K,Xx1/ a! ⏿~>g]|زWgV%rs̆j1M^߁|OQ} Bj*/{cEq%ϣA`? `3-tG iQ}]S@~UueE P&=nBԋ Q^.+NxhlKnHhPY9Z9.%>rDU-Dd^jX%wJz`tlqA؎n1"C,J(^!zPRY*z)l'3$)D<׶#J+6؅nO,+^- 2Hig0^߉i4áUz+Z՘n􀶼ԇ . +"9-P;.P9{s^k} _ i!fA_[ydg+7I-O(f Xb( E+~0lʾ؎_RqdyD4K?qB.P5;g`Ú vURD[a°RfC[<('nG@R9h1+F|QuMГ\kFDxBBn1}q,)Y3~x%>h"+ѪR8-UhI7PX} 9L dskZy\mM,A)键t؟aq4f*lnB q;.wl!}ÌA8nTBxFȳ~@ÿg půtx_hlwa8,F8#B}]A"T4ͪKd~09EY'HͥGC.@9kqƞ'tQf5{,S,V[A\֗[aMv)N2X$&! GEm9< >Ή5|ٕ6fajt45>NL[t`RearOkWވ wvg|u368t&ZbC;YQ)3۸?Xr98v%nyx9V]X/5Jɓ8{V"\X2K}5{G6ׂ̉zyJ |M<Ћ߰;~q xW$P@iк+ l=TnNb"ȶahJu'vpr>MgsB"t ޱ6ˋ=׷kವqּ]OQ&y r(L}_NudF2V;^Ԍ(tCyݓ?T!7U,<6x7ğ+\/te,"V5d:|HK""hF;: ~p-.Odzۣėui=jtǙǣ૗o7zrx7a ]E] endstream endobj 414 0 obj 2174 endobj 415 0 obj [ 412 0 R ] endobj 410 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 415 0 R /Contents 413 0 R >> endobj 241 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 485.641 null] >> endobj 417 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 547.144 245.034 556.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 328 0 R /H /I >> endobj 418 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.354 534.144 530.164 543.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 419 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.874 521.144 182.784 530.394 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 420 0 obj << /Length 421 0 R /Filter /FlateDecode >> stream xZKFW4|I$Sv/7cfL`p w)RclaU|d7)$6XW%}qw#I'a@@%-!5R1& WThxc†p?>Md5]BAb͹Pԫ P&5@ ëoQhc[P^/J\!iKODy5F 붇9V(^Z6(7negCw%!-K3z̡ f!>^&^qڎ`qNwi`qD=6ՖI*UL.Cn!ByhW4ȗݿUQ>Bx"JB }ZƮe4PD6N 9z(hh58 sx8⌼YxWZs # a|ޭ"As漜Ra2fVFS-By7tPA :/lD:!6)mW@iR> z=IC薤mo}rBqNaTugK7'YE[䝪le1zb^ǵhYj4K/Vj#7_S{;TA7i$0-C#ɺI!hq'atF$5|.mO`&dE>ׇbAێ5\moӍSereq6w$ W[S;_Gէ9ޏ؀ ކ9lVEx(=,[w[\x(C=j^ŷ9P7-jQ)d+_6j+)D\scZЪU=_x{C ŊJ*?#*> D;bݗx_D[%\]ZW:N'g8.g*?F` endstream endobj 421 0 obj 2516 endobj 422 0 obj [ 417 0 R 418 0 R 419 0 R ] endobj 416 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 422 0 R /Contents 420 0 R >> endobj 423 0 obj << /Type /Action /S /GoTo /D [424 0 R /XYZ 53.858 188.21 null] >> endobj 425 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 429.851 97.778 439.101 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 426 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 231.085 97.778 240.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 427 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.768 218.085 413.968 227.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 423 0 R /H /I >> endobj 428 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.898 205.085 167.818 214.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 429 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 177.085 169.918 186.335 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 404 0 R /H /I >> endobj 430 0 obj << /Length 431 0 R /Filter /FlateDecode >> stream xYm۸_1-_DJ ph\rw][d@+^!,b"^,bgpьg+Q aQ*RY$r/1."cB88bJ|>#f Lɰ_@Y9#8;y~wxa9jv="$p-Uj Wkxmiu "_آlشp٫+49#/b[{dg㸾#@C%΄G5 n.SBD&if#)[-;eTla߰ iy4Q^EΊceA؁v9 %Pv'kSq\# $ITn5zg%A(Niҋ[ӈM]hh 'p^.QUHvD w 3lmqWOzRqMIgG % Xk۬'Ks UAT=nfcZUEyS}]SN#:%k#5|܇dhKMHúfg9T|".O1ǣD#])?9qSC`tuŸ/v}XMT3w7u~b%%,@|q$l[k sKʣ1 nuԅ6<|W8W0̑LuBfX鲅`]ڼ@(1Q(ؓȦy%F(5q␈5 2R8Om X,zGHC$(EL1HD mqLFqqIraLF\)buYP,`?}0sJ"HSRB%cr*7$Cc_& TdW1caZ,LSKRmv3X +5r:?5p[XT9җkK]gVUɬ^,25Kus#{W̧ŌGYL)AQ.zueUvSm[sOgX1 w͘8\ѐϯ_$w7I:^4l~ ~>"|&*Dz'#ŲF|;4A(÷BƠ:UvB:[W=-OV&\w5ƈDr]igmxۭ%f/}RA k'7>AK  ^I"˄̓m>\/^v/tpǑsu6rOs=gjE""1 >$;Os<ScF qbqgH ' њL:;]?@@6+,oYyWv; ÄBJ 櫇Ē&)j@fpؤ98*8=5$1nΎB/\hA\2"&! t# 3;k*&#6XJuႍ2fR/= gԫ;sJzJVT<;ؼ.r_čSHNTvJc~z)ng좧pH@f%ciQ`kV}_s"oDMWʹ;ܿE#D`%)2wIcu͎:+F˱JxњР endstream endobj 431 0 obj 2105 endobj 432 0 obj [ 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R ] endobj 424 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 432 0 R /Contents 430 0 R >> endobj 433 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 476.1 null] >> endobj 435 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 310.966 158.454 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 436 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.814 310.966 366.884 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 437 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.924 310.966 537.494 320.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 438 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 297.966 131.224 307.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 439 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 269.966 230.594 279.216 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 440 0 obj << /Length 441 0 R /Filter /FlateDecode >> stream xYmoF_͡]X})&i+6+"RI*q,_r)RK3PD]ehڎQd46Z q)pDf6 Ľ"C$m^ ݏ$]¸DwfPZ&oO9ys~=ˋoZesק߿x &G*ͷۤC ,F@ƪAԖ+c/64as)>]eFԳqRFO%^tw 1N<4`RQHn6EZ3]*6Xʒ26~1~ӼAX"$z Xi ȶih 4myp2 j\eb*D~qn AQ7_τ NVGBM9~y/Sx(ǫPX1fuɪ1yFv H KVXVoj3j+|.weq6/=*60qL8S6n}DŮٓ'ss,(O6 OK4'dNsFfgtv~[lv>; ']!)*NשH]ǴR+5FVi5=A-`}3&&aR#XjK(9 `lN X! !k(=œ0(\NڐX#+\U n^B*Үli*PTA6JW&xw_| `8,ە`*sx@a:+pbٹce@uu 9?"%%.L*1 #GZF%66w7׼pj̈%T7BøXe޸]~jn5S+fOs\0uM+mp$6EVưva2E9U];)n <ϩ[J}o^kM'GK.ڼNs{>^mYBJu}YNnd9֣pє G̵&f_2k2OE{r|HGKG>d}0Xa3u2C:":AםQݝǡJȀUE-mOHBI 0LvgQy@Hs_^7ӕ,E+fqXWQdCud;k 43NUc}YN.⺌43,z'8lxvx%l;}#IOD~|= 1~u.GHpnLy&rʱוM X)-<òMSgʗ? endstream endobj 441 0 obj 1951 endobj 442 0 obj [ 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R ] endobj 434 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 442 0 R /Contents 440 0 R >> endobj 443 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 281.091 null] >> endobj 444 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 659.375 261.718 668.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 443 0 R /H /I >> endobj 445 0 obj << /Type /Annot /Subtype /Link /Rect [ 465.168 659.375 497.398 668.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 446 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 646.375 92.208 655.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 433 0 R /H /I >> endobj 447 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 633.375 150.558 642.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 448 0 obj << /Type /Annot /Subtype /Link /Rect [ 153.338 633.375 298.408 642.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 128 0 R /H /I >> endobj 449 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 550.686 null] >> endobj 451 0 obj << /Type /Annot /Subtype /Link /Rect [ 81.638 331.38 170.018 340.63 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 449 0 R /H /I >> endobj 452 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 173.766 214.378 183.016 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 449 0 R /H /I >> endobj 453 0 obj << /Length 454 0 R /Filter /FlateDecode >> stream xYo6m@ $,z +,k..Ec!,(J6%ʮ[$GÄ Cfc T0!)$ G =C? gm.:h {YlBɻػ~w#c5L~M@ )̖!JQ`w/WѶJ PޖɲFelfE'aAcM֞f6Yz}Kfh DAmk78}AOPZv= Sv-/џ66& }tP V{p'F~R.y鳽T-awXc:;h:3K70ڦz@I*vM ;Q%ˈN}NX?*5`|tLmmRdɚlKڣSNO [)&ݏ~$ERE4ngrI8wܓ.ax Bڝ,Y@hVt9$΢MbZ۶ە$P29X=S;9bܫm^TFor7nEtccbo>=/U۪R ׆.@f#Ldy.7]h:˰?*úmV : N^hb5s4 TjIezE{hx^]E@*Pc*8Rzbc$f\4Dx1Ջaz;_^kL8DktV]Wμ)nlwtv)SBCeonƫF\"Ld!]\ၐ".3`Үn[RSmL޴{EkaۦZ1 9{=L7hb$f_&i洴s„1"ax8 q=%G85ࠔG|B G6r=m /A˧֝2=TGްYw 3ckEZhB?CLw]D*> endobj 456 0 obj << /Type /Action /S /GoTo /D [457 0 R /XYZ 87.874 692.3 null] >> endobj 458 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.654 416.493 185.124 425.743 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 459 0 obj << /Type /Annot /Subtype /Link /Rect [ 279.644 311.913 349.114 321.163 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 460 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 123.333 229.484 132.583 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 456 0 R /H /I >> endobj 461 0 obj << /Length 462 0 R /Filter /FlateDecode >> stream xYݓ4_ter:} (00pC.QO;N+vr| :%Ƒ_Z1?0یDDFD1~Ņ"LHJ0I·$tWԏX7zhY +x3JF~;α_èљv*Zbjt 7&3p}}3]πQ,Fĸ! kKRL6$.,N0n_FMjTd.h%*L#N*!w"N]^dJHaS,1n+߹9?Br?(¿]5 L=ZW +- "%#)Luy ,ÐxjEL K:`!jYH4zgqrwm_ IVtupNя\H1hZet2NP9{:aX=C?www/BR!+iP}n]6s ?/]^ۛ4+]=^ W|=btGcZ ^3;;L[w-&_0%sO SyԼz#sqҪ?t>0-gѓMWwz;Y->B3.[1lGE#񋈔l7#4JJUvPoU3cd2ٞz7jza2:C\l%.^CXLjڊn!Q\_n&M F (alEF΄k\[4.-[~Pt:>™Qh2vt^ZU`(.ځ4xezT#)Z7gFV endstream endobj 462 0 obj 1849 endobj 463 0 obj [ 458 0 R 459 0 R 460 0 R ] endobj 457 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 463 0 R /Contents 461 0 R >> endobj 464 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 491.7 null] >> endobj 466 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 506.575 116.108 515.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 467 0 obj << /Type /Annot /Subtype /Link /Rect [ 366.878 80.072 429.128 89.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 468 0 obj << /Length 469 0 R /Filter /FlateDecode >> stream xYkoF_1۴ $ ihwݢ/4!2 ZI)R%)n33$ŗ;H,8{ q ",5N Q+O(ʅdL.a,?gܑv7M,56lgĺ"ofN%Xu94drյ4L)9ܒgĻJDQR@++wբHvUy~E.}{9Yf`u٬]̰ p`188Afs&x=;KaMaM0bPų2d"1eet.ǚ}FdG>L_;D BUXk0o<|[Q%`J)GO}Tn7:S.ʄRdYZZ\6?o!$39@OɛMXwV˛kE#" ѡs7v%&ZVN=Ⱦ FxC<ЇrgL2ԁUxb+tvwLQ}ɋ稥IJˋ-܋lc?|U&"s &ـuFv iolrz&^$M ef5A#cSU+̋xJM^/Z1r#z!cN"3otiMM2f-(HRI#bFN8=ɽҦNi}yфҷV?E\ 7m./J{@ #oluA7?SM?٥DuS0gk]jZwIڃ :Vpgi[[n"gV/QSqEje`$|ɼPx+AЪnz5?JʻmiULKjVA4 NsW!FLVfݲD1CeځR*>Z9vH\ s\7ZWjfp䶿@y5D6qId9MH57pZZ۬ YKq}BфϡQ-%vb/NP<=Kmj#|PȗkRR*O)MlY+6P350nލ?@= tD·\m| R_If(>1BikO`Y@3e\ќd+,Z%MN((lT'J~ rmԧᮝR/]> endobj 471 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 513.504 null] >> endobj 473 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.684 556.379 556.404 565.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 474 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 543.379 157.904 552.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 475 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 502.379 222.264 511.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 464 0 R /H /I >> endobj 476 0 obj << /Type /Annot /Subtype /Link /Rect [ 98.994 220.091 298.524 229.341 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 471 0 R /H /I >> endobj 477 0 obj << /Length 478 0 R /Filter /FlateDecode >> stream xZYoF~_0.`$^%Xy r4\2B*3l:N$@3l~ d[ĸԸ(A5[BjʥbLpeX{xH4F#?#Voj#$u UFUY)z?8<4 9؇rØ,eR4GWCZB`߲F;ryOl@Oq['P=-#ց EU-q]R e_FM$\%PDn- rLYW-|M!3*p1 T BEaAâ*IǬn \i¤*|"Hyz"DU )/R@Qvm'JBvp#]F=7hq⫹œ[+oAxÁ6y?RYp{%H\> 4ɻw $4X)c !+r|WH~!"ߒg%/".g}aVCB"N =\{`,꼡NS%8,.]R, JqUB5PVWy]2J/pƘjHq 8$ )~T^~<9y'pO1j_7ai .E44ʪlT DlITpPHU0 lwUW#!&oLbH~' %_R+ޣXfF1dIkú\yM/G6یy CG*)]j;֭!{XGaq ֺeA@g|uȓ˶GOf0.~<09hPIȓX>%-D7x֭#Pvf*kNMEZƀ{c 1M¨t:CXwazN`p90X č_i8&ہR(8STо'dn7T,4a].37waU,rq.EC' AFZ552#zY{ِ4t]VE'EOvG=`gTX9^U^ABI œnwYvw]B0e"9R'΂N#(8U|>c?J✭X:q_%;iZ-['ji:16驑FfyW̋L$uUe\v;NyUPCdwpLD܄]G10b*KC@'v8ZjFQپ:K]3Nk3ǘ4!(p#gm&'Q"D`dp.ćLއ&FAt.,VlEq;o]Vmnþ& n:f<"Ś3Q >A:~E(;ad+cBΈɲ/>M-Q|X>2HmGX-nz:h\ }ðgUl N8@;A99#,hL@k^Ͱ9Z>`ՖSQoy`x| uĕio 06*jsPTw²C&Ӷ1\yiev: عx˺bm {Ҩq8s[u||5  3FgƉ}W. 55rs:.il/-(A C (Ԅꚓ v1PG9[.J!LM22gph} Q[*G0 ؞6JК28[NM>y@b#>@!2TPrxѻ́R?|ѦπV|Ur=l/013Rj)޾|M| ôzŌጟzǼ;4h[L2kZbf.y?b3A+9\.W:ܣzoVTKZ endstream endobj 478 0 obj 2220 endobj 479 0 obj [ 473 0 R 474 0 R 475 0 R 476 0 R ] endobj 472 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 479 0 R /Contents 477 0 R >> endobj 480 0 obj << /Length 481 0 R /Filter /FlateDecode >> stream xX[o6~8u iHJmݺ,ꢐmjK('J- Cm˹|;(80YUmkX.u!.Pf9{K!d{}cG,:H@7 =gOu{^ {+pV4GS"LsB%lT.W0I: _{CZ3y";R~nYFa6]kg>\]ţӖly֊pj_fQ.aY4)ie&0KM*JRp)PrGI SGc`\C@4q6p& Hd"0ld+mLU$USmY)ZPRiV[hUĪS!K)ZwF.P"0<.à2e _[k_ba;m?6f751lq&,/Gd`oF5 ߈H(/h!l7)UPfN1.sNAEu:q#K.(w`孌bdTDP.ݔb^v;) TdfPo:YqC6~E$>ֹT1m k37#mrOkvxlP.=filtcM۸GO|`ExA=geo4|Q:S0KK^flw^^BRڗRTYdMR`MvU]H|C[0<'\.^sy9]_oxsxzml,0xb2~z͝9& XA48DZ%=E lbeZmv endstream endobj 481 0 obj 1526 endobj 482 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 480 0 R >> endobj 360 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 705.3 null] >> endobj 172 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 393.036 null] >> endobj 363 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 130.004 null] >> endobj 484 0 obj << /Type /Action /S /GoTo /D [482 0 R /XYZ 53.858 659.1 null] >> endobj 485 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 269.559 101.658 278.809 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 486 0 obj << /Length 487 0 R /Filter /FlateDecode >> stream xY[6~ 2HEnM_Af,X,9<e](CE\y.+ H_aa21-y#|}K=Sx0>4# c3A?*_ b\U#c ^ܭ~Yx  -Z`ncmJ&9o5eU'6{{jsI]Q~d7~:=Op8Eg]cUaRDd̛i "F}P!HO5! eU4{^er6ҋW4ˆ 8†M,IV:EYWv +v,I O9+J]R}R-Ks,Mer0IXL0Iv2Ql!KpYf6uZ䤛>o1;^V>,65- fۚCWu =X5)|Hj_-5ɠ4 (O ja9Lemuj,Qw!U.ڔ9/lW,ِ"Lf3i><G®MR84Hjw:Ps2>]E,H)6+eCS}!}*J B3g<=ø7yRRΕ9N` LZyVW`Aؗa)(./=x=kƠqJ =ʯh{o1ҥY7l7CGN$eܟyr0m#*gw5c˟ 5 P[.S.3~ɿJWL$))f 22 lϨn)61t3t)UѼCrIS:TFDu4;SNJC37f͠u; ]45L A/Q/ lD*+ej.jj;Jk;wFTKd`  Cpx #H订hJ^)qkrnH 8ܧBoJjJ%Z`} dHhm?<L;v :(@im}F4bِcGB&;5 "!!pC$:bW.m'iNj?x?Tް;!#@)f0D)~C:#+Oen;6\T:jYѼ)x##U0%L8)0ee;uCoJVXT$z_QIk`[xVyWy;tgh+>QFE(1Q{qKAM!Q3$%H"z[ϔ{C =nh/Б0AYXzXcN9%(r@g:R=c!Aޣygt[_Di@>47JѬ=Vv;v/jO'#XM w 4#wtdA'( QFܕ-2Q}j3'2sVȫxЅRa) sn*{t@MԞj~1Sm oyLFSy $g<{uf5Iˇ Ͻ n~q Dޜ\e7Tx$WNRqrl?v$#T(ԿPQ۟(8j](|qA$c;aGJwnc*Tİ}t$zs0V+#}㐪0\7Ӄ]mqm[%_ܫ_";q̠ȱte~Z/.эRxC˩1$yٵJnr` 5J!ծƓԛ8 q|ײe@{vͺ?.> endobj 489 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 146.145 null] >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 491.39 135.674 500.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Rect [ 488.624 491.39 546.984 500.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 493 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 478.39 211.814 487.64 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 489 0 R /H /I >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.194 266.205 287.994 275.455 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 495 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 135.02 207.814 144.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 496 0 obj << /Length 497 0 R /Filter /FlateDecode >> stream xYobS\wCq>hJBRs%ǒ~IeXc籿m!+ " 0`a'QT q@xLj|k}4b%yvo."[pG|>/;WWS1?Cj2QMD`R(q9 n^?$^_/*"lm aIkG PC릁bA燜kxVr|Ԍ\ oiE> {0hy|.>/UeF=]7_6yīG/URnBA*ztV6ݑ"慈j46w_1\_/!wwWKD7 eXMkki2Iogte7j5f`k3:G~Xmu\ͥCD\d` 5q("\D!PX`\stKPk(Б֟wIxG[Jq`6Th $`-O#|h~ f zh%*TSE`5D%0 r0RI|UlY ,>7C?T%T ; jGSIϳ2&̨$~J2fHie3=xGi%(`03| 3—,6B**\iFm\B el᪱HK(WEgk aX,7v,}R| pUnr)P(Rqڎٹ#p "k6o`FY$|R tq0Fy^u T Ԑ -PtT3Sӡx;'CY5ʣ+f^c(GM .@I\w.\C3E+wɋ*:x}7_O.cUbYEФ!-M)`DPNU>2%<ΜҐvzyoR ;<Lk*ӞNX2pI6\1>>]~Lg_u ˺6:ӆw֎.?`T@KH:QaєzM)IJ0MS1?*ETBYȀ b]mաZ2圣HP.ٌ:L0COM˦>IE":~TJMC*Yb Oc,',V7%3CLVy.ac廆97/գ딁?XP?!.A,p=7iFD۶ n$eVlY:Е`>邻!C:d7;٥M[.a4X1MgL CAk񰋳WRbګpC폻ܸe$n%ZˊxK.l Fa]û`D0GNa#m^ Oqڹ=ƕNڦݥfQQf3b$7?ῡV>cͮcJSH%qfghJtՁL+ 2yb˹ڔ̤ZFc&#$3 ђ#ڲj/aطv:})TLw:Caj5:;ejϩLS>gK%W:LhKyPω~xߥ#5{=}l մQ@]Tybm3.B&2tKnEmotAt}{x .]p{HAPG^7?/Sc'%:29:ՈlKd#3<4'sAcNcق]MyuGg܈${eՕ %K)`.SҜ]AnDkHHqWms~psvLٱ$y pJBqW"2FdlRe_u5o^b-ιaP2ީcnQW 96#d?VFj_mOIHm{AF- endstream endobj 497 0 obj 2218 endobj 498 0 obj [ 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R ] endobj 490 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 498 0 R /Contents 496 0 R >> endobj 499 0 obj << /Length 500 0 R /Filter /FlateDecode >> stream xXkoD_q!vQxvHPKyYVʱ' s8ۓҦU♹9g?&LZo&9pdٮ!l4maX픘L,o:1eXӛI>1_1`ޥ1Rj <4iG뚐4/O.QȊ\^rB]<*U\eS?_O.zTi_hyzKօavC6ޜm!B|.AG6~yV .a)$xiBo2hCЫN핤 %/6Ub_{C?*tqo+(tǠt S!;#R_ /mGNF!,` |VF&ܻ 24FM)ob5W'˿?s:[ LQЩOܖu20&UŬ~QrN7)XҭSLHnW_v^]_蟋x˟..yY7My>m[cFQfYg}v"jj Uʄ6.%Fip%;.=L7yخA5jvqti8+j},5S}GؾVϮK(2\6Ϲl)VvH5&qVLJ(*$j 1>٠D(دapt[uS`8B7 i8+r ١+X:292P??8-[?M\@tӹ~Xpb2MOM`iJi}k'$&Zb@ta]߆mu(V;b&xV&J=cٚ:n8LW:_-Ƥx"LbR p8t!gcXRQѥ]"?=s(Ξޤc-n6ׇZ3_?AB^i%^.Itwjsm#x?`8;gVUOSn:]m$pnc)B\d 'ce,:E0CS,k?p+vWCYc{뛬jHٽvMhN|~pOMc^׍ Np rsx-zp}oP6;-!砲 endstream endobj 500 0 obj 1870 endobj 501 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 499 0 R >> endobj 502 0 obj << /Length 503 0 R /Filter /FlateDecode >> stream xX]o6}+PIQ!ː@ P,:&ˮ4]R,G=t.PIṇ (wf.R0[6mbĒAUUD@'A(m B6l01_ݠ&<|#GwؚbQ݇j9u;wHqH^?GNF(|k0ob"2 ܎'dwVʠ>=K%~sW僆%y,W8=%| 21jղ,\EзUNSM-W5Л 2l`Gi/pn)9|U7]@6bY/zx.ux}TwM-< RJCQhtAM8oI?]gӓ\do"<%EvUy 5ބSJkJޢK=uH= q묨)|,!tYyi*e,V5/Lլ1컑!48w9Fc|Hs~bs̡-ToCx'JHoݫ}( ά9O%LAK_?GNsDl ~xti6^C"iK ḧ2wy?G8+]Tx퐼RzY\PP6 ܮpVwpqqQ͏W'z-ɋ}P*gP}ڹoA3AM"}除nYLT[2/e鏈-q]i)ڞ9c~mϹ[=*Y\yWX+v6ԲD.\UujπV?sgZoE.~2Otm$sپnL{?"z弑j|.鸵A(&fFFDvy;gK;q\[wKwć}۩tRn|]Z4&@*7x?>@<;CZ s5Qҗs90@7g}646mPHÒCMy|ϙ կ [FY h}^E"+PNC݌op#6 endstream endobj 503 0 obj 1275 endobj 504 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 502 0 R >> endobj 505 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 548.9 null] >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 96.648 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 507 0 obj << /Type /Annot /Subtype /Link /Rect [ 153.328 694.175 196.118 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 508 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 642.324 96.648 651.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.068 629.324 354.868 638.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 510 0 obj << /Type /Action /S /GoTo /D [482 0 R /XYZ 53.858 718.3 null] >> endobj 511 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.428 629.324 506.028 638.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 616.324 159.978 625.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 513 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.998 575.324 168.788 584.574 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 514 0 obj << /Type /Action /S /GoTo /D [515 0 R /XYZ 53.858 586.449 null] >> endobj 516 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 414.843 233.928 424.093 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 514 0 R /H /I >> endobj 517 0 obj << /Length 518 0 R /Filter /FlateDecode >> stream xYmo_pVKZ6zi..C4Eل)RGRv_gDr)i"`gfgg^H&yE_AX[hyRp=!4WLDȇD3Kbn?w엋B?_|5 {heL|n/tuz  -0F`dW[śxפ3N7{pxt{اvM +k`Y|"-~<׷ )ԅ_ZdG78d:lmf׺bfNN qddʂ5U,;FXj<,󜕻/Yu*5TŚ=VY֬)Awe2GyjUXD8IڊM2Jq//HLE.w)+röYR,Gְ&;pAQ1Ɋv>!񖤓uEV'~iX_ Wu q`9Ƌ\Wi(\WP5D5B mU PKOb k=N!%q\랉R7lCU:W]{¤$ڄ~.B e ;{ڬ^hk!ja01} ?W<~2|"vUF]vo-^3yw|uRfܾ,~u/vܕEϓ;\FG["ަ3b$%CT&y\6O>:/AGS|Z04QpmH\f<02σwKepB~S۱ƴuSKgvv/DŜ&Q3S9.Bƞ.ocyV}fnƕ , 1YSK+ήD~7t*2΅f濭NݤUlNnD6{HC `wՠ%mSj碿cqڎ&db;#SؙԸcjؓX$ϙ-9@bVhqPTvYoIрFpPcC UrO#Y^4+{7qAO.`2lHl 5yҌ;oh5*maZcGy@d5r;aaot|> endobj 520 0 obj << /Type /Action /S /GoTo /D [515 0 R /XYZ 53.858 151.215 null] >> endobj 521 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 210.024 134.004 219.274 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 522 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.234 145.273 177.364 154.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 523 0 obj << /Type /Annot /Subtype /Link /Rect [ 447.794 145.273 495.594 154.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 484 0 R /H /I >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 132.273 322.374 141.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 104.273 206.144 113.523 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 526 0 obj << /Length 527 0 R /Filter /FlateDecode >> stream xYko>bA+GAmvM.Rc3#HaSi$vA?60QṗWw_P J_X|hGA ,4?b\ B8P0O{2\A_+{즃YN$5A"O#Lŧ 3O Ha^W:l[X^~NsF=1ԕ]UgM/z(1ʁ* n6m!QAݕʍ7z5 )ZA :ålv-֦i[׶jݿ`Ԣ2M1Ԣщwny q a8yǞOjU77? څCCK٨!l$F=[{05<}a-1b3"=ClF88Յ1i~^*Dh)FfSvCǮ-%T&~3~1b;~n l˳e69 w#9&1&\iU>F_[|dAG6%$wfqfߤ!q4uc 3%l.ڼPu,ϨWAAW\@^_x"(Q8Ϩl^Yu,_`۞1A.@F\8n 4:[ԫv0x V+Ȫ- u2YX(_bc Fau<4yRy} M֭ܔBDv:l VfH!$!jh*h0VSRyPz>]mƤam^n{IkLǪ;N]\sXgP- p%&R&dln^ӡ]UU}暗 0љxT85ܦUVί[k>zQjn!S fO\t<]%2L"a0pq_`8ÿzNuXtǡWרv ׻ɢFPU4Qn8-'FV櫭6里1r=xjDAa̧ۺwo̭ᗪOdzKeWڥ$iχ~a7$i邱2=8atZ&}|a (LY g>+NkcoOiJTWtfBʇNp0]MHyKG-={-'e6 x<%9ha(w"EȔPr'YWUot :l xЩIxR1MT,O[6+H<$& Xϩ[0-<lCζ(h(~ǐtŇd endstream endobj 527 0 obj 1957 endobj 528 0 obj [ 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R ] endobj 529 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 528 0 R /Contents 526 0 R >> endobj 530 0 obj << /Type /Action /S /GoTo /D [531 0 R /XYZ 53.858 437.1 null] >> endobj 532 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 143.842 105.548 153.092 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 530 0 R /H /I >> endobj 533 0 obj << /Length 534 0 R /Filter /FlateDecode >> stream xYkoF_q7mpyrln[d(D2$e(%%NHEgsCpb>?&4L6caR1&+Ohevƺhdn'ד_vGk jqoQ,oG iYIMlⲊ6D$:AZ_Ȯ@̋mzQDtCD92NtniOF?a,iXy Qܓ ou!qb}ۼl<8᎜;7J 痬X9H\悏kr$hL7h<)yO'AFqvr'~O؈ n)VSp_0GG3Cd 3_ T< D_sh WGu4-U_Y>oQ˄c3CQ'˩]!P45Cr7qequWqz[g^2ULs7ZgHgMɖob6@mZfm^d1]ǫ$?C3 :fUdeEY!ӊvѝ! +" 0K_1ͳzA@fZQu;j6eKX)~g粧*d#۸*SR { * `[!3) hMZgWCz! }*=ϐ^~˟f/ ^~=g8=-8]ޟ""# G|}*4vɒjٳ#,43#>pVrvx1{BKbGC<}w<6uKʓEs[ۻZCX33;*fM \Bd[]F iԗ#0TEsv0Mt ⪎f[T##UtN`0c[rEV euDkKfA ZOcF@2SF?:I}7wNyrd:Fɾ1"x|Z|.(blAw{YW%j[+y\G 桥 4 Y#0jC%ճK1A1C&M!w> endobj 536 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.584 707.175 201.274 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 530 0 R /H /I >> endobj 537 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.014 618.068 211.704 627.318 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 530 0 R /H /I >> endobj 538 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 455.907 null] >> endobj 540 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 275.072 154.574 284.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 541 0 obj << /Length 542 0 R /Filter /FlateDecode >> stream xYY6~`lHQR$)ڢ(.ڇ8(l%GE{g$٢DIMo'X[$7973N{_~ Hi81>5G(#A^KԸ~fX%֤Y!g,swYa'Ey8s ¹*c\I Ihw\!2_ a,|{5$98!n}L2R*BD&fr$) &g @d{.~F.7AN|B2W*Ϡ Qق y7bkI8o:hV4֭n]?bS燒lisph큦\,@l#aj 6'mxC OfD=v6:xO!&0v.~SR}FqqTh $rg~bN z4~mIc'[4} Ⱟ=N8u.k|'qSf6UޱedorrF@a4U/aLY;{\g u;Þ .$1RѤf8g}EzǤ6:VW!Fr$?~W5 @3ΨD.x@MW{D!7oz<g3{`򽘢uʺ⏞h#km.?6=Ձ?}d>Y<>PЎTJh;D Ky=:pLSLK\("Arߧqy-/19PU`YW4eنՂ i`! 5IETHHK*r~'piCEz,+S\#e^y_@RkfѶMM r D~;1U7bsnn*ym jc% t`09fUp^ZTt=_Zcqt)(FO$vx{&'dq,m.-N;L:%!&6ưCj< 4xLM25kDù#au:I}_I.E{%$YC?|ͳ?.C>%C\z_x*EC| dЧWjJ\-eaAmų# YV !Y5?xQQ*jbNu$/%Au'I:Kxg i`Q~6@zv|G$#-CɱSsB+ɓ {l=i?Vr6k;{jh=WQyͥdm0 endstream endobj 542 0 obj 2043 endobj 543 0 obj [ 536 0 R 537 0 R 540 0 R ] endobj 539 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 543 0 R /Contents 541 0 R >> endobj 544 0 obj << /Type /Action /S /GoTo /D [545 0 R /XYZ 53.858 590.099 null] >> endobj 546 0 obj << /Type /Action /S /GoTo /D [545 0 R /XYZ 53.858 102.954 null] >> endobj 547 0 obj << /Type /Annot /Subtype /Link /Rect [ 142.778 632.974 352.318 642.224 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 544 0 R /H /I >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 578.974 198.258 588.224 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 74.978 233.03 141.678 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 550 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 522.107 null] >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.238 233.03 405.108 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 552 0 obj << /Type /Action /S /GoTo /D [545 0 R /XYZ 53.858 455.738 null] >> endobj 553 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.668 233.03 482.928 242.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 296.178 207.03 511.828 216.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 194.03 73.298 203.28 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 556 0 obj << /Type /Annot /Subtype /Link /Rect [ 118.898 171.829 191.158 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 277.298 171.829 343.998 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 558 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.258 171.829 473.518 181.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 559 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 145.829 268.958 155.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 546 0 R /H /I >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 361.238 145.829 433.498 155.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 561 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 91.829 203.818 101.079 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 552 0 R /H /I >> endobj 562 0 obj << /Length 563 0 R /Filter /FlateDecode >> stream xZ6/6Kt@GPٻ~֦mJoFeٛS8<~ N|_??dē4x}$GTI>:g yL'qN!wQn&yfo%YxnHޙI,U\$Lc'i֥'@,Jn\_ca_BN}/ Cqw @Z#Ե.B ¥,1F)ɋ(+6M"d5"j`~O#vͳ4)+LHOFҊ!vTCT4/v=e~Vx4%Sk :8P^@ K%Rw]} $I`G2>8g* HV*@'Tg16 &d&҇Ṫ\ a@b1WMTvR 1pv8yB=O@$hڌ!<ؾCBJ>͒ ! ͣ xcڼᡣ. Z؜Jx:9΢L;YfXIְ!ǒe!j{d` f) ] =B9wt(펃I@X$*4M/s#)b]CeuaW!єyeٍh*=4]tжݴ)CUo`]1<j34Y6iΨAƶ-Q;rjmF ]x]Dz()x #5"4)rB+&!6j]qX0x0aM;CsLAO,ZP@dXwvkoQH[o"0Ge`<1%R"n0͍MO;N{U[Q  B(tVO%8٭"!໲6Wj/P>Z:H)N7 * k) CU".)sA K4M6z`mq C5]LMho"S˸L MZbmAQwQ`!I P\@YOdϳ]LMrOc S% -jA}ss_!_i dкʜ]=K"^~-<` T`-vdImׯU~ S\VbYdǙF1YJx %X_wx߳|\ͭii岧5R~x.*爷> 1Nپygr|^eJ`h< 캏 +laz/zv>id CdCT>=Z=AbhU'T\pʑ]F46`DY=S$n$17Cuc09I^v~ĎI9Dep+N\zXU8M*V"^B's>7+;JF*y_DwH6J\a2orJlmyXV@Oe0sol5gOύU 1'8)!z\rI !X|&y|j 4H V{j|g|_zĭ7ŧt96,w5x O:R[xMy@Hf=Z+͝bw:ݚ/D~Nw B=@MucuXKŏ7 GHt>%G | }LV!aI5~У^9?.nd|pj:ؒמ y#5X mҕoz]yͱCt'NEЌ#}Mʷ?+EXhڧ]sFc>Ď?$Xk^KM}pgpӔxE7Zy:ؗҫf=;X>WNj'fJ9٬٧cQ@ɁOutspwٖVr  endstream endobj 563 0 obj 2646 endobj 564 0 obj [ 547 0 R 548 0 R 549 0 R 551 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R ] endobj 545 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 564 0 R /Contents 562 0 R >> endobj 565 0 obj << /Type /Action /S /GoTo /D [566 0 R /XYZ 87.874 608.7 null] >> endobj 567 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 155.02 143.444 164.27 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 568 0 obj << /Length 569 0 R /Filter /FlateDecode >> stream xXm6_1wņK^hK]r]X/MBdɑu|EH-hsD3<H'g&Y;iaG/ !q@YހFR)YT]Ȋy"yifѼJ O?\Wr[k]+GΤc IIe8Šq$DTƉƉzOqgR]ttH -e/ZߗhQpŽ Ы|ZXJEKH|nKcck _BQFIh0%>KHˌ>ĉJ<0xfx1qKɟZ%AX˽Y%%ff<)gE25%l\2-*`Q xi֔%mL6/a'6ɖȋP &.Yޤ0miEL$#qA,ˆ9l֖6 W1ELKDp݃BɃ*+=^LqU؈JiR1g XQfx'hlTݻf3S>Ey<9z;uSKB%0d Lw%RǤ>jh$'D;s6UFI.:ޖ4ɮM^$4TG.h2ͧqJ垂խGU- " $MO Pb6`Mr牨WH#yn6M;}m9O.]A}hĽCC`~umqqo1> 4aۗ3 ZjRh fӝS|;Gg1 endstream endobj 569 0 obj 1918 endobj 570 0 obj [ 567 0 R ] endobj 566 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 570 0 R /Contents 568 0 R >> endobj 571 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 692.175 256.174 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 572 0 R /H /I >> endobj 573 0 obj << /Length 574 0 R /Filter /FlateDecode >> stream xXnF}WL;E-})eHKD$!)A,o"$F"{9gqAߕ5~^ ̓TOTxLhk?a~13vcXvlA{ciѮayx7pu'0GƬX}_Z/ DTR1& G$ůno˨²ioNZǥ9 N)>_~M7Bil+&DOt2. 4M H GEfL6Piv^>pf@J{Z sXRsP@؊}Qc*P9YRQ ~Ş]F~\.ͮ:*󋰀{\ Զ5osX{V܈gS4B.3x:=.4^]}.g$k[2yeZs, -Y;a_K|NF@Jʀ{I^]<짫3 0Le(`pi}:!R`^nsߢ3q|-]~Zͦc(e~sE7]ϳa,\3߫G^2eREs-{:XH|npqRi`Y]o(:ۗoKWOye_ߵ–S|0 eO1ON^Iom#: endstream endobj 574 0 obj 1568 endobj 575 0 obj [ 571 0 R ] endobj 576 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 575 0 R /Contents 573 0 R >> endobj 572 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 410.048 null] >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 692.175 187.128 701.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 579 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 703.3 null] >> endobj 580 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 585.103 252.268 594.353 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 579 0 R /H /I >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 143.162 144.458 152.412 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 572 0 R /H /I >> endobj 582 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.568 93.072 206.168 102.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 572 0 R /H /I >> endobj 583 0 obj << /Type /Action /S /GoTo /D [576 0 R /XYZ 87.874 703.3 null] >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 288.948 80.072 522.388 89.322 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 583 0 R /H /I >> endobj 585 0 obj << /Length 586 0 R /Filter /FlateDecode >> stream xYYo~_QZ}y,`Y$Ԑ#$"=U͛M$ YxdWGWUu#5]@.dZGRi&ù0i ޠ 4#.Zv& CSi.ۃB5§eO@b@cȄ!CŞ%Cv^YB}T%έ%u<œGEc݆L~=O:~%>g!"g͹g\s l%[ ^2O0PN&kÜ!ģ3!Kv+f0@3!H$ Y$MA^pA n9i/Ҵ8j@}ZqֽҔa×B5iNd`VIST?vh9ۜv<`b4N0xGF{w )=2&;IU B1!b?q~/iMd] .]Ov?q{CPڊ]|MP:/q0$PrLhVQ}*.ZЄ}@vH6REqgJ- b” ) ##E'@{Td9,Us:}# F(l!|fdm# j6Ay.tXI|gi;9/ir^'~ ]?^|x9]W\$#.R N\_ʌ=FetXb5HņYPƶ%lo- !:Q7b'GU=5D` ZՏoG{eC`Vom/ "s][߬ٚ:@*wuj]S>UC'qik"rjs6UQ\Y"7~l?$O$oJBOdo/^Pv}~oۋn嚮e_񷤡'; ]M lnw=$l8!1I; _:ҞKF@?P$A}(K܈z2,}w!`yxtb%I:JWMkH!K+icݖ#S-LIywo]oo#|#̊=bdUˤ<su09PBJ 6ĴMdr5Lˇ.ngssҋhӋNHP7h,R` WEfL^Fj+lxs.=XZjyK> x:%= =XN!> endobj 588 0 obj << /Type /Action /S /GoTo /D [576 0 R /XYZ 87.874 311.846 null] >> endobj 589 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 624.77 133.888 634.02 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 588 0 R /H /I >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 515.365 133.888 524.615 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 588 0 R /H /I >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Rect [ 232.228 489.365 328.928 498.615 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 592 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 425.96 211.588 435.21 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 588 0 R /H /I >> endobj 593 0 obj << /Length 594 0 R /Filter /FlateDecode >> stream xY[o~ׯ8IX;3ù4hdZ45Hk=ËP&X Ĺ9 ?K~s;@zė>N$ SܓyR \lCv_8`%+&=6 hcZ ]khx,v[i@W3¼2H?fs@ eea7QUynvjZ0}Eh_Mھ{Z/e8V64.oy7 N}sB#sS*kG\}͗#BzPAoua`3`)4;Ѯ:'8`1D)O`1(."[C8Y fO! me8zȩw"9?HY P_A&e$doD(;k~u9Y[: b$ ~#`WUru Sf'G{#BEz")5'RV}PQE}F1"$20:a."w򎔥|J(TGSBAa^&qj ,IHct?W5UCdŹ-cu;LCUq^JȤx6 j?fkH.D=.9U9xbǭJ0N]Z]=Đ"8dP(KאV0N )%"n 9>V=O)Fehqڱչ+{}vn!K!jWp ani7`Bx1U0KH2dآÉ4Yãs5I?dJ4QE4m|]1V]Yt1@B6xfB+ }xCU8֪ޔUϯKbdrMݖ{sX:6glAL3<&vaqyUӔc`iZo1&+a.G̋6vR~peьӺ.(xL&e !@&nbQmͲ2>Flg7rݕiTgh?ϛߤ@V" & X})_E 'OO\g,Gc>vʌ1c#ꠏeGX,=|^ͱ (=ГrnMuJFY=RcfݓфXopD,3q65/Tde#,nOppdVhḃ{# ʉ?*hr͆w'Sě;D!H6 9uY0- ||.'*a ùl6F&ɟpb Ŀvb3+;{jM'N~\NuiKĘ O$J~0 Oۛb 79v\G^> endobj 597 0 obj << /Type /Action /S /GoTo /D [598 0 R /XYZ 87.874 177.056 null] >> endobj 599 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 146.561 null] >> endobj 600 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 269.753 159.564 279.003 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 599 0 R /H /I >> endobj 601 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 206.931 302.404 216.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 597 0 R /H /I >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Rect [ 505.294 206.931 536.974 216.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 599 0 R /H /I >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 193.931 127.884 203.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 599 0 R /H /I >> endobj 604 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 165.931 237.264 175.181 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 599 0 R /H /I >> endobj 605 0 obj << /Length 606 0 R /Filter /FlateDecode >> stream xYmo_1 ` )DIŵwZE|P,,[>IMP!%zsηkvgp^_fݙH ZmgsȋI/=OHm cfE'rLѰYgl7c/M1/۬1b04j1;Xe~e}ȉ3Z<3/dX˘"1)sZlumvkZd[M{)t9%~tJ|_g?,Z5!u|}l{I[ "l5va9 '<bOP9KMO(AO2xg .:ى!&'xaF'#D0Ր'''_ ŭZ.FX~[?stcE#<GJX4KtO;Z|-VŮfŎ?6Y=g;]Үu^<&9U$O>)䵢CƱ{x1=i.I{*NꬪUEz]uRʛp8c:u~gyEvV܏=a}D~mZ*]{U[wDT->J #:d^`$pH93,+28*_ kufV]xSH6|o<9 ZLxXեW-4n7~ʣҒGz6=7!Jhз!~d"3lyM_{yy}G ˚ c~T.CI^=Í!aw>"!<62L&)4FgcVqNUk@mLDb򎢱=ZU4%)6}yn5ԭ:0[uZL1F@ܞzR RsV?XzQyKK!CVwX:ďb<[y#WS/hr4R8]U&BW^t8 }ݱwd=θR258 Yoۆ?ې!!~oI }{o~БJ xܧ3iw534> endobj 608 0 obj << /Length 609 0 R /Filter /FlateDecode >> stream xXmF_1UU-qEB!I& w/vB~"yfy' (~؋8Dfė>xH R#\Z m/a/j%V]-k~YI2{ܝᾄSz o,&N'ϑ!i@L2J$0 jYO ^Gyţ0{t6GDhܦ{o_}ڍ%ԔFAA}̫aqjA0tRq#cwrA>8!*hHW6

    Y28k+^5zQ;4;fmO`U`G@Rqr; 8JkyN`)Z-Mྯjq~DUiњh[C46{cTa4]{c8™np `Ygc cuhoZlQ`ÒG\," E=4f#VI=HL8Yt_lGaI3t g<g~Sje\@a")pߚIx06 e-!XmV![jY)U-`nPW/f>2a$&2E;@k]w{ (L`iVY? ͖IX:;F N2=/r;Kx *;]dX+ T>e6$E9'' (Й}gP*i`/;/<#BD| fQw>sBއE1O=: VգCOI쁁lɏ?/o$wPa+g&y:2,I UlV%Vtcd:kD#OֈӍbކ+߶ hQIA/Bxt_qYa> endobj 611 0 obj << /Length 612 0 R /Filter /FlateDecode >> stream xX]o6}ׯ pD7Ň}%*NGƂ#DLǘ!c*i77pR ;nx~_OQKt4ϰ| :<|bt}; |sNbSc,yͷv,\湽_vy,whCjpbCuKTXE\k2XFXImm,b-aK]9RD ( MRB|RJu$t5cXx}0+S ( D!O;Y vUelJBѤjkl'i@ڃ v ObX7 ygPG<<41LPOo$QoEA\M܏|]]W7o_}ӯ3@ehyLk²ɶ|hyқ㭝[C5䇝M1V0Ģ0i!t POBqS΍MC`עvΒ;%yaS 9.> լ H@5wH$"w:6~7UalY,+ʗ",qJYfRVTʥ熔 ֋$Rqq,ݪYٽ5{i5[>W^__q"1# Yf+/hF'?00FbǛ1G1kAd^%$kxgk$f;ģp&CBaNĠWCQ-mN`كL%y} H>؉DAp#:E#[- i׋ J\@"*lfU-2&ʵ| ͯ3ѓ 0ԋkw|OK!+v[f=x)koJ6mZ  6zs.sFe̒ WI{Z8 . @P}?^us,Ux9 t &kxz_Gg?#$0gwpԄշUU p﷖M8~t׽;}r8(PvF:b-#,~N!\7@mŊIFYnkq endstream endobj 612 0 obj 1197 endobj 613 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 611 0 R >> endobj 614 0 obj << /Type /Action /S /GoTo /D [610 0 R /XYZ 53.858 483.9 null] >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 542.575 102.768 551.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 614 0 R /H /I >> endobj 616 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 315.575 180.468 324.825 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 614 0 R /H /I >> endobj 617 0 obj << /Length 618 0 R /Filter /FlateDecode >> stream xY[o6~ ; ݀ E3l@,B-K&CJIV M(xwnfMQw{t4Wk_?l{{Sֻa `#ñvô8q2X-$t,az6J$:.tc WiHƐZA%4c"):AZ"1.htpQ:([K(r||sM ;@!X%IӾM)G̻MoɷDx ΂`/Ъj4۠75*v+ʼwYuh[E({FUm<!6m]mjmuD##}]BO>XfV##ir'G.U6Yuv@Եzڶݣt$mn'7~&rTdS(&}XZ:}VwoƨCWhL{׬{7WS? JLi*r_BBrUVx$Bk!I27 WwoLjv CNeE,e\ (FN( x)8Q%,m}E@ 4ܢMtlmAV v[=5j !@Yݶ(ZD}H.҃nRDUi-ʿUYo'(Ro(L@B""ӠS/Ƙ'dEQ&"kbH6gPU9s ԯA&"0ē&"}' 0g$/B@EOJNRf(1@'6 !%PDk!?sɽ#!1:\#9# Nvg84ϯO90ZLD@㴉ƅ,ӵD!]Sĉ(|7ֺX q:w\<"UR#^\OEБKwrz =sv߆A/2^be&#@A]NDL{ }D/ }$h`#H_F5 y SE4c+a ZMP' ƩA @W# Y#YQ^j:!lW&=u|TCXN *^,PC_$pP(~m&د]Z%?xjv :IQZ {i[ ߲_ ^ endstream endobj 618 0 obj 1742 endobj 619 0 obj [ 615 0 R 616 0 R ] endobj 620 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 619 0 R /Contents 617 0 R >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.558 679.175 176.578 688.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 78.858 325.182 349.498 334.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 624 0 R /H /I >> endobj 625 0 obj << /Type /Action /S /GoTo /D [610 0 R /XYZ 53.858 576.1 null] >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.088 312.182 520.028 321.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 627 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 299.182 143.888 308.432 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 628 0 obj << /Length 629 0 R /Filter /FlateDecode >> stream xXkoF_q 3$gHZɶHZV("D"%Wg_lt XϜ{Ν{ysI8/|rmK`8d;˘Cܵl_0_+ff$fبYO`-H,~+ _k`n1Y|\\CFubB0/a^EZpԥ-Ün"KZ~9ՠ͞H[4Yg-ͨBy0~ꜞcycf[p js*+NM29񷤔2Ôc.Gj,uA;;T(ZlȈ͵$y㔆HN2  cy@b9u~s&n}n\w->٨w*[c}Ma2*\u(6p&,0NEep1RO%s[(J2چt81O-WYDEerd?"}YN0];/ssp9>H0Tv8Y vz6qyd̙Yu8;Ãe.ʏ:EB3c2kfp\vFfؘUt8LV>4tv2S0GG'x3e&N\r{3.T/CJ=O]rN,=!wW$3uè!x]2ruKZ,SnBBf^cJ6 M/`sycrk8MTYJquYҴ ޸Rvq~G[u0!D斫b [ExUC+[؎v<"أ-! g{NZn,ˬF,F5&f ;bJ%#*޾xZFlpiN\Эm; B}ޫL>^7Uc6Xy}iѯ`aj D #z`c0X28Zbqz7}.sIm #l#WJ˓peJ yƖǐad3Z?SٖcwZk/h9P =ꡜ5GM9SN}N'U݄g:z/]uqy*=l%wQ#_m5]eMeK$L߽@[S۵LY[Ap 7Y4e^M讱s\ayXY^uKD(OQV_T(.l]r~:8%DI 1mgcS\K]]a:J5w-2mƛ>"L Vտ!8R6뷷/!Wa W6ݾ ~ZղDiH xrEIXfv"*O LdFx/I }e{"< 㴺}֛ oJDrtfdwaBm}/<uh?oGMjs8refy=DKP`U #E5 endstream endobj 629 0 obj 1907 endobj 630 0 obj [ 621 0 R 623 0 R 626 0 R 627 0 R ] endobj 631 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 630 0 R /Contents 628 0 R >> endobj 624 0 obj << /Type /Action /S /GoTo /D [632 0 R /XYZ 87.874 653.3 null] >> endobj 622 0 obj << /Type /Action /S /GoTo /D [632 0 R /XYZ 87.874 523.124 null] >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Rect [ 500.834 707.175 549.744 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 614 0 R /H /I >> endobj 634 0 obj << /Type /Action /S /GoTo /D [620 0 R /XYZ 53.858 326.7 null] >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 297.934 681.175 489.684 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 589.999 136.784 599.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 614 0 R /H /I >> endobj 637 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.344 589.999 369.094 599.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 638 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.894 524.999 172.914 534.249 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 639 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 93.069 132.894 102.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 640 0 obj << /Type /Action /S /GoTo /D [631 0 R /XYZ 53.858 690.3 null] >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 357.984 80.069 545.844 89.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 640 0 R /H /I >> endobj 642 0 obj << /Length 643 0 R /Filter /FlateDecode >> stream xYm6_1C eHD ˵w-vC M{ʒ"JE 2%{wQe&53`@}z؍1B')HAiL.qUBpKHB3C>@/wE8q ֆjv4@>FǨO-o׋W2`N(Z4RRcpe%vcn+4kUYij_~\w|5Cȱva@B7u$@9agd@ug"ů&fʬlEX]x8 ֑ Ī\` ⌆K׈' B,ܡR+J5j*$*zmy9D*N2ېH\48"OSe\i$4DZqvhط`#$)yGjd{5z[ɔӘ㌢%d.jjϭQKXqȄvfpRWPF"z TS6D=m>MYT.u2X(Ju`llπ٪ kOu=m.,;ֻ$}SC: xW-.gV%9E" D?3<J"<`Gnhmg "D3p~̳KGĿ=ztu7M8?iLZX8`L6o=]r|,dY=EqiqQ-wַ45:O+ PXsNVy9SS˩5)hs m#Qsv<+|֮p玫hF4iiZ>kXk#<֕|.<'UQil!u9%o-#/LhD[j:Qm1VLфfaa LWC(s@.lG1#-v 3OqE3?{`]:uOΰpbq6-/(BN 6uS%g.yVz ADkES*x\Qu_S,߽GRM{B¢wlI( %[17ea/3O"d0= 7"JAbm{mұ"'hn*W0J?i<&EeO>!zXg5Dq)0 1bu^ն|udL l^,@1s+NlLȉp5C][7~ym1&츓jcQd)?)LMa79SS)5~Op|: :>`[.o6j@ݬ]0 ;:C_6 ,cPy.nH HyVn/*{W?_7?`Q5c"mE&qO*tY=M S݃ٞ˙y.0]`tes%R{mm,aO`*Rf/?s5}ɘGAwRM\Sr1iN` eR!:)] B行|?C?|›M/VI<7}jCHxL}}Gߞzx@bP;}U(P2.yqg}S -h;7c/yF)_] >~(uHq^e*\bW.|YoRj Qs,xj#?A˕?//D|uJ8Gх Ǽ]JJ endstream endobj 643 0 obj 1966 endobj 644 0 obj [ 633 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 641 0 R ] endobj 632 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 644 0 R /Contents 642 0 R >> endobj 645 0 obj << /Type /Action /S /GoTo /D [646 0 R /XYZ 87.874 513.504 null] >> endobj 647 0 obj << /Type /Action /S /GoTo /D [631 0 R /XYZ 53.858 284.307 null] >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 556.379 180.124 565.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 647 0 R /H /I >> endobj 649 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.674 543.379 528.594 552.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 650 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 530.379 209.034 539.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 645 0 R /H /I >> endobj 651 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 502.379 210.594 511.629 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 652 0 obj << /Length 653 0 R /Filter /FlateDecode >> stream xYm۸_1Mp.֒EJh>)פپ!٦ɖN1>ԋMIvs@WWg3Ù!ӌÿROnSH xBo[%€2ϙB!6zl'l?cz#Fqy?{7`W b6c'T맖v89T\{, 8}~L[zj$oyvizKz[+]U;F pMCU:#D16G.c|Ln8b cFCԴ@m6,qN1f)k/R[EC-^8| 5r< jYz([a9yi~|Bqs ߘA*RG~E/5-6ӿȴfsL;(}MwyUm}ԉyt,4e6:'%)ٯiVEI!bbq=1#c"n{2EDl_ڧdt,">5z9RAN>r^">ǦhKb13nXTA(n 9y xdbIe B?By_%N7ytԊ~sVKЭ~Wv ?\vf /rY; ^B]V?-=^֕c"Ҫ~ڂ|ͺBogܼHi-ҤGoYmm>䏴3Qk].:=:EI4_{q(0Ljbt3]H/|?mXqo|CwIhҔP)MRBU3otzi'\B)p};_8څcb ˛kq;aJSuT4n϶M\P@҄iO{f8)ISd:4#6 S w( 퇞TܰYat򂊼!mй%r״$1g~MozKӘRK'=' ؼGS X~~6FM6PDSAdQ8#4*Egsi'yR`:bpwDTǽ.ǕCg|ѵjvȠUSdɠ2.?5 k*0S8Lu0$v֦YH20Z!C>JHG^n"CZ|vZݼH:o?" zu9GƱbHSNIYWj0-VKH#Z"A5.tuMXJU!=RfazХC6#r>`}l':Jړ@xGׅh{ :zdmK9T7tt3;*Ӣż 60mJFc=u>q&a *5>҄7u8]FX[ +փ,~08+"wPR3A}-O8}8z^#H48IC ~x7g>3f endstream endobj 653 0 obj 1968 endobj 654 0 obj [ 648 0 R 649 0 R 650 0 R 651 0 R ] endobj 646 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 654 0 R /Contents 652 0 R >> endobj 655 0 obj << /Type /Action /S /GoTo /D [656 0 R /XYZ 53.858 262.65 null] >> endobj 657 0 obj << /Type /Annot /Subtype /Link /Rect [ 73.868 264.525 122.228 273.775 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 655 0 R /H /I >> endobj 658 0 obj << /Length 659 0 R /Filter /FlateDecode >> stream xYmo_1M Zk˗^ 49RrZDVq㒶բ3|&%.wfgvˌ?s~K3A̗>8I_ [2n;ewVb8@wnь+41d  Ve?͒>~5K6j>ϋ[Dhb4`ǗW;:G7%j8B*aey ]/1| [7ܶ޾u\_nTpP~N-y?NNf=8w}˒#-_`G\eƶ: &s 'UyNP[ dWA㧈1uSx4 ^_ M&tf_~(= TW(kLJwT(9ւ^)cAdy|*cQ*c LU+(RQ*Y:2Y \&ϖѱ=jcM}&O 'ӕs0[#gng>4c/(k#Qqܯgy+NЅ1Ӈ& ¹xsy xo Mm7iUCDTi5?r|ٍާ (Nד+p{ѻ|ǜ%gAqDo _G*tFӐEVpHKH4cUR"Cn4TD2iFIm& *^#QPD{4(WE&UG2oM`}`P' GGN [0Ĕ\L#k93g&|1P%ה[!0}Ayv5 Ԧj0M悼tm&x Pd&ٴqd:㽂+nU=Quu RTƄoE\%)Ҕu I}Dۆ7g>i_ U K20Rqˉ") n TN;v (.]/s!};̓(,݆#7k@*M 6,x2jx?7'j%&;b*U]k*+m`WթXILe,&cXUSG1V}&aQUJ4RzmNZz $KEQwPd^ja+&W_P?$W4p,>8P'(mUr¾4+왨=8 Shb^;œp<w mͨ _&1QY,žS6٣%ONhid;pLt6:/2i jYNt>(~@/3j1 %)^8o=A3y׽>HT7je~nla [EuD?=~eDm BymGn $cI翃䗫(Bec6]aY > endobj 661 0 obj << /Type /Action /S /GoTo /D [662 0 R /XYZ 87.874 316.5 null] >> endobj 663 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 461.375 136.234 470.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 655 0 R /H /I >> endobj 664 0 obj << /Type /Annot /Subtype /Link /Rect [ 87.874 346.375 279.074 355.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 661 0 R /H /I >> endobj 665 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.504 346.375 500.864 355.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 655 0 R /H /I >> endobj 666 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.574 305.375 213.934 314.625 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 655 0 R /H /I >> endobj 667 0 obj << /Length 668 0 R /Filter /FlateDecode >> stream xXmo6_Ȑ`Qh֥]l][w`bӎ0[r%߾#.ʩaCEw=<À KփAR8Rȥ'~e!Ř!:\.`@XX5 c>?nA4`|svy;xmc5țpap\k1Z zAhIę$})9uh||1WQ.vaD(S\ѻT%o7Lx{zrF? GT-4 K6SsD5rXIxuje|zԓKeK#ՉBWZ)ֈj!!N%Ȑ:,y #jKqEtjAo)`"|x?BO^yҜ$V(ݥ`rLݡ?r6VRқe 49{r/o.~=O_\3z~7g'')߽?s2K%_͕YV8 V=EKx1vm-iL:T]6ϓcԌ[]xoq Z'Q6z<,|\G>{ IUI! զjmfxvz"gxe6+8`p|''rNTD #QLNF>/*ulS Y"Gz@~Pe1vh ih,l1̆((8*5LUA ~aЙF C;/"Pk+ WGEAJ:=o*!ƲQf@WCAJaZyǷ:|3-U6H]c+v[>$X*W[@$vyo2P28ڊ z"TFo󗯶fK^rx>Qe(&g*dhkcGlth[3yxΒR(;xCY>՞eW|mI:KBlr,2b! aS*T#搯hV vYB~bNg{PfPbziVLSpvo.tո^}nӨn^Z.R/9}d$s y%wm6QM]rGb{o5@ 7x;,)ss]lt,E dLjSZ56BF!^s^12>qt"w6(ƼNu;v[뉮蔮6׺`SIyQ;gBHQz;Q…td'ZYSOK%éwOB*!Cp1.lu)fk%>k(~:)H?vvq7!@˱m ̯ ;^39sgwrӽ+_{0C:|%.b'􆣔.q=Ѻ}=,u{ endstream endobj 668 0 obj 1686 endobj 669 0 obj [ 663 0 R 664 0 R 665 0 R 666 0 R ] endobj 662 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 669 0 R /Contents 667 0 R >> endobj 670 0 obj << /Length 671 0 R /Filter /FlateDecode >> stream xT=o0WX;;'+ĆjbjU'`Y>I4ZñřFn]։aW9XQo*BQ RI *)Z+ E/X^8e0> endobj 673 0 obj << /Length 674 0 R /Filter /FlateDecode >> stream xZmo_αzLa+2De A]v#nw p$)LǷih$'td'}p.bx-<cN0W)XL^S̜I) u[½\hs oaɏ 6#A;I.QnMZnr>=Fwi326xƻtE%qvw,t?y56hSEU"uEEtIYQkGP,GcD8S,}EZ6GI)U`*^Qji{g \ BI1ii,vcAY _FzW FP6UMu)YR`mk>TiQ5OmۼA;SI^JZKvGc Z S91铽i\RDJA|b %i>DS4/)vUՋfo3IHh&zlz\-%$[~HsqEG7~hoҢ_mܙR.lnK t<(V׋JdP21`Ai"qg锤AHH9XhF\@FLIn?}soZa'v.rYsgJ֦{C)QQ'!0E*4$i1P\z{Z&krbQmQSԈy3l+ GḁƩa4JMxhlCT0"CS K< -C!:x_XyenDTU5`tߢ??_ѷ߾1(֕Kֺ=m3:T6o-k3Ӯhe(W1L3AoMՎڲ6#{ l\Ġ\$Kj-mQWAWb[ؖՇ cƨk\;om獠HQ`ԅi:m-܌3\Z m'3oΰΕikml޵9| ,¿BMZ[:B I,lnM]Ym1kuо]ە嶛A>|zZue. ()1յN3!|81].at`!t>OfE#Aĭ:zA#@I|f0j0a*')%`{7/>5\ɪ> Տ)A9H^p{ب5#>jd*pEJkp8ڷʵmpBrvq~}syIU;0W;I3%KJűOVۡԤ<T;PEK` )B9 Lx ;ze3Ʋ\׬KZFD譒VF7b!JI%aBC$DVatxli|ȶ^e@[o֏rC5 aPGHcyUv$#(Tr(d=WlP/,b6'_L\t1d"Hh*G!A2I}ıZkb~I]6qgSK'DNȲ rڰ ߬)Ǫ,T!.osA/%Db*4uv*$+%W6]89/LnEK~B4].&kt s-ޔi7K+Mkqز|-!5׃Q cJ#Oۡ$_ 5ZBٽjza)_ӸP%8bjXu55'?xˇf *Ũ' W.G` 3b~Czz:\z:w2؍u+? L v4D&/xS%p)<'h9/_,2F:w4O7K endstream endobj 674 0 obj 2307 endobj 675 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 673 0 R >> endobj 676 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 718.3 null] >> endobj 677 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.928 217.069 484.778 226.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 676 0 R /H /I >> endobj 678 0 obj << /Type /Annot /Subtype /Link /Rect [ 187.678 67.069 284.378 76.319 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 119 0 R /H /I >> endobj 679 0 obj << /Length 680 0 R /Filter /FlateDecode >> stream xZ۸/M]/[W 䲇M]3ÒHiw 4Im373>m8awA$6|8$ (A=M Q.cpEO[&oHD!6N`#&0/=iטyy6oނǚFyٜeW:ƧZDPsR:O%w|gnT b|lPr}j0@ݮ `d!*ޓ>^uvˊ{Rʢ9m0Inf  @lb\Nq ˔d[dYH]ɯT29 )dSƣ(wL%S<\&$jVb6*sWud::)r&(EY0_ <[wyU  $HϺSNpwL\z"L rcqekRjXTZȩLI0֑VFpLGs\[ ` :!V"\{YlBN XML6e}QMR5H8V{&eQ$nueL(b> 8;+ f 쎼|!8I(DsXlE(pꘜ`l"#1Xf>;W]9doU=_ NJoMEXyck\Zx? QR Q 2YF"n뢼P] <פx4/fc6CП- ʤSmEhF5LHj^\PJ vB< uن1z]\b^<55(H;:MWQbM-DmgD&PO&֋8B8 b_HȈ Pq/ ƹsLeeP+)? d?))C! wdl*7kN}:o u͸P+֯Ke}k1j.Kh)z.7,l&6?SiPAQ}LF bJ Mc1hAjǺKz *DVmHaԤ53)< AXvQR)!ͅ$ $3jt8G[D/&L9TǮJR$,Kl-5O% C4+Fm3%oy5 Zso6]? QZW[)$= jpz5!qdhJ fiDB{42 tTRycsL5K#gH#R/F2|4"=ٛ,_(H%tcA9@HdPW^ɿcRxߐnnd@CؖIYG̿i@UӤ2!7N3"pp^n2mZVLynώ.fU9koЮxB?־'7?pi4T! M7nW:NҪ/ۤGmN xk>U1\OBE! C<MٿtSd<8^6sӯA 5b%G\֑e.6LWs]2拀@PImZk5QOϡT_cNM-훔${S|[49;a˲(|N M4[8d&M|a7k@AP͈ Iy$!%e54D^rtiF^@>@RIgι)[sN}T$wP>(=:ߵI`Ilge TņӂaӇaa7on+vr;(*ײdPϴy*p,. {a+x:qnrJ$KOYd 8]hɝOZ^bBp*2rLK]C> endobj 683 0 obj << /Length 684 0 R /Filter /FlateDecode >> stream xY[kF~_Q RI%U 2lxهtd--zlwTn]6x]swh= |G&/:G!=%xj{N7!|po47VƄ͗g<8lv 95}ۂ췛?DUkj"1uFEiM~Uc]us;ennN1]P):~׷8FA!)yt9W!~vU sc1FW;VuyJik#^ .; =XR*XLX{n#ߛl⺋GGvy!L| k y-%Ӝˀf ,pxhCV?mvnB{ cUn}n{]n̓(7UiBv3n_O[W`}@G:[I킋mchӘ*Q?cQ̾Y\٧qﭨ)o}Gd?םٗrJB@”ܕs^"y'1ƂSԁZ !nFug~vlLeǖUrw.Cۦ,a%=O 8!mXǺN<,BNt+#f={.E d1SQ([Qd* ԙ|JryFQ0{|HN+X|EIEΎPҝꮚ>>:rSr9U&n6}âa.f9Ԡ+ӯCI#<tDf}5S K (ނR'[rˬp])1ZJJ_|oH?ފGHxC_tt/p!rؘ(]Iga(}3v@)P=@"߲v=/,ڃPĆQP%Ŀ:5و~RjTS݃p2*16L)?v={ĝ։-bN9rg 3 о`&5}K(ilal\ s==E}z$m|LT!W=zXfMsniJS(aH|<1qO/gs&QcaH<# _btrފhJH/]zw39iȁsM<5 ~$it~=fw/iȄQQUw%N'X".&D iVTlj;n x9% ^?p~Q ^߻Fn}h2t|eJUbHGm"XlNZB"{ q,BkOm 9 hZjAFsZ2EB›fIj7M+)X"rX5@rk5F$N戰~FWy:)& ZRhic@ءbU+!6_ qm,6Ӳ,*CP9fuHi(;q櫥u[a9/XM^||~:\aƦ/Ʌ9kt'_|fZs}{##ۜTl7U·~ \ endstream endobj 684 0 obj 1970 endobj 685 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 683 0 R >> endobj 686 0 obj << /Length 687 0 R /Filter /FlateDecode >> stream xXˎ6+R`F%E=j A t$dvA˴-Df~}IYHgE-=#nGW_kdi f[!#J9aQƸ.-OTE Uꏿpu1y\=&f>>̱:L pCKn_aoEt8ϳ8"y@b!#5㍖hLYTޒ%0Şl[E]Krhܐ}YInٍo"apw 6OO`]$ii/~r=o)` 6Y $6F,~ɧ6R]F%1^4J*”ms%)IyNC>q0hPv,JJ7A*9v B>̤-NiŘ^6E]`cDۃlf M++F&3K&+~mݔBK}׵4Or<;  v*9 MWOc7,٦)8,Mk#N[}mpGƞ{DA~~.DɭT)}oN+yC֝q#T #YLn橃Ow,ad&g=j)G ! SMXm}(-`ʺ[8nCT oE0D}9fY~aVzE|&a`8ד,:9/7ga 7rvWـzkZ@iu͹ӆhUmm-̢&ψ&.3Fz-s↠">7yw<,Ⴅߟlvi'8|j~o:ϭ_;\A`8=.7G"b s{ FFY2rvqW%{}ҹs ^Ck7'|O|LYqхAG_hBcڕ6x_A31' zu^K ;&#Ci7CFH35[J AC[*+e? +p&$q,;aㆱhn < 00IkkQA2;:&lŏ.7 DN6"xx+D>Ί(<1N BUN2e74u%-OA%Tm0z3ztB[=6_#7q ڝ"ҥKt5o&fq[Naps_5ɛa endstream endobj 687 0 obj 1772 endobj 688 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 686 0 R >> endobj 689 0 obj << /Length 690 0 R /Filter /FlateDecode >> stream xV]o0}Wa?0Ǭ&SWMZhk iB"y6s=o烿Cc !Dd I)B% ts?Pܽ͗9 l@SGs g`;RHJBA.z67n ;uݘEp\~ C':; _v]ͯONzett> endobj 692 0 obj << /URI (http://sourceware.org/systemtap/wiki/HomePage) /S /URI >> endobj 693 0 obj << /Type /Annot /Subtype /Link /Rect [ 310.424 611.975 524.944 621.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 692 0 R /H /I >> endobj 694 0 obj << /URI (http://sourceware.org/systemtap/tutorial/) /S /URI >> endobj 695 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.744 548.975 441.594 558.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 694 0 R /H /I >> endobj 696 0 obj << /URI (http://sourceware.org/systemtap/tapsets/) /S /URI >> endobj 697 0 obj << /Type /Annot /Subtype /Link /Rect [ 349.904 359.975 529.984 369.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 696 0 R /H /I >> endobj 698 0 obj << /URI (http://sourceware.org/systemtap/langref/) /S /URI >> endobj 699 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.574 296.975 548.284 306.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 698 0 R /H /I >> endobj 700 0 obj << /Type /Annot /Subtype /Link /Rect [ 105.874 283.975 187.574 293.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 698 0 R /H /I >> endobj 701 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.674 170.975 542.174 180.225 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 702 0 obj << /Length 703 0 R /Filter /FlateDecode >> stream xYKW< f'$'ٌRDB#PM#ߧ ) ig㋳S;CA@_ل$w'#R6 c!R1#W4dq04`wΨN/=Ȏ˟?b?HVTh\ Y1pLM2+8$ n>Fq3NGClhB)lǀD!MdE_ ;R!%Î0HݱҤ/$;a&a䒃IU'a*W!mi'ZJ"(˵$ZݤL /Ԩ\A ԁT勀Kvjj$FZMWbyF_&sf$ v-2yg,Zm ABId-@0xea -:S585LJry O x_)_dZ\[ՓB4Pƕ!Z(2_x4}:`E'Ꞷn qݞy?'q1Ki"ȳatިicYV}GlcyR0x„ι1$$sK;/ (C'G%assߦF"@di-ɢ gD )~F^yPeɹ2G;IvDύ:ײ|dW_z]#}1N҅İD.k>)Y ȳѧ >ơdaA#&\ȃ8m+E2J늟`/ Jj!{DU\0viOݷ+=xfZA8eY!a,%ʉ,ؕ}'K2ҵRۣZZ5EݗκV+ =9NU-׎@dVա*G-tiU8K`&T=ChL#̹{];% ڤ7R{4cw@۠oe"  n, @#4'qVD5܋F^ޘzv̳O|\LErãB4qH(.j1W l)y@rTg`MSK*yRW,Xt&@-̻Yq:Zo;r_X-g}Sǂ2Fċ*rK㰩'ߋ/l7oߗ8Z` km15@H35yc/_Fgסaذ=uR੧b[Z$A^K} |;W8h8V=Wm9 .J L[j8F65~W~Ō#dA="2R]_'9Tdac:`(0E4=|lg=dyz[C_,t/x'q[%gIϠ̓C8s+AJ[`c=Z^ 1Dm~u>F1<8c-ln S%x5C6GL,hx1 > endobj 706 0 obj << /Length 707 0 R /Filter /FlateDecode >> stream xT=o0Ww/NJRԪt(qBl]lt̒ {QiEopwN ;O䐽\@2;[&]Z&?@F/ʬ`9zTrF%љ,D'I@GmL\Գ{Ygب?, "]AT-OU&p ^檒0~5Wq7-^he ,:vFIM~E endstream endobj 707 0 obj 262 endobj 708 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 706 0 R >> endobj 709 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 673.625 509.338 681.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 710 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.338 618.625 509.338 626.305 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 12 0 R /H /I >> endobj 711 0 obj << /Length 712 0 R /Filter /FlateDecode >> stream xVn@+F9z4)RQ%4w&TrH ˾}ΰ#@~`" ӥB#B/h{I*-H RjK/np#tm|Ýy߼F-VG6:0 ^g7^mFcZ@KfNc% NaOgEd6 gn_i\U>?ƻtdR4? aOHNZ 8 JLxfYq9Ah'TQӇG \ELY-;O;t}zEB)WP mɾǵ˝)ߨGf&hBy 5#qf!6i52/z:U]&Ci_鏢K,%'*]XR9Pp{}#ui ދm}p\cۛt QdvA؛r{hv9O*ROD~`nGT#^z5j±؃ endstream endobj 712 0 obj 576 endobj 713 0 obj [ 709 0 R 710 0 R ] endobj 714 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 713 0 R /Contents 711 0 R >> endobj 715 0 obj << /Length 716 0 R /Filter /FlateDecode >> stream xT=k0WܘV$e-T!dji:ԅL9Eȁ&wz,w?z8 8J5ݥ:1j"\+MEh4 Dň< D28wT\il\Ϝ2`(gu=XkM2t"x tF1!ikö7u/,1^5=)1YU抐1]a…TYʜco]48N endstream endobj 716 0 obj 262 endobj 717 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 715 0 R >> endobj 718 0 obj << /Type /Action /S /GoTo /D [719 0 R /XYZ 329.008 81.3 null] >> endobj 720 0 obj << /Type /Action /S /GoTo /D [515 0 R /XYZ 53.858 670.574 null] >> endobj 721 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 628.923 191.904 638.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 720 0 R /H /I >> endobj 722 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 217.27 null] >> endobj 723 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.784 589.923 191.904 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 722 0 R /H /I >> endobj 724 0 obj << /Type /Action /S /GoTo /D [529 0 R /XYZ 87.874 173.523 null] >> endobj 725 0 obj << /Type /Annot /Subtype /Link /Rect [ 197.464 589.923 208.584 599.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 724 0 R /H /I >> endobj 726 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 71.858 707.425 null] >> endobj 727 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 550.923 200.804 560.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 726 0 R /H /I >> endobj 728 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 333.925 null] >> endobj 729 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 511.923 200.804 521.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 728 0 R /H /I >> endobj 730 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 128.925 null] >> endobj 731 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 472.923 200.804 482.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 730 0 R /H /I >> endobj 732 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 179.925 null] >> endobj 733 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 433.923 200.804 443.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 732 0 R /H /I >> endobj 734 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 105.874 256.925 null] >> endobj 735 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 394.923 200.804 404.173 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 734 0 R /H /I >> endobj 736 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 721.425 null] >> endobj 737 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 327.071 200.804 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 736 0 R /H /I >> endobj 738 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 683.425 null] >> endobj 739 0 obj << /Type /Annot /Subtype /Link /Rect [ 254.614 314.071 260.174 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 738 0 R /H /I >> endobj 740 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 108.318 null] >> endobj 741 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 275.071 276.384 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 740 0 R /H /I >> endobj 742 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 121.325 null] >> endobj 743 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 249.071 188.804 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 742 0 R /H /I >> endobj 744 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 53.858 702.225 null] >> endobj 745 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 210.071 276.384 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 744 0 R /H /I >> endobj 746 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 235.089 null] >> endobj 747 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 171.071 200.804 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 748 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 98.874 679.525 null] >> endobj 749 0 obj << /Type /Annot /Subtype /Link /Rect [ 241.834 158.071 247.394 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 748 0 R /H /I >> endobj 750 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 489.425 null] >> endobj 751 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.144 145.071 221.264 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 750 0 R /H /I >> endobj 752 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 310.55 null] >> endobj 753 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 106.071 274.164 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 752 0 R /H /I >> endobj 754 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 670.128 null] >> endobj 755 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.934 80.071 241.054 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 754 0 R /H /I >> endobj 756 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 541.257 null] >> endobj 757 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 67.071 314.174 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 758 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 111.329 null] >> endobj 759 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.588 707.175 437.708 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 758 0 R /H /I >> endobj 760 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 134.323 null] >> endobj 761 0 obj << /Type /Annot /Subtype /Link /Rect [ 481.048 694.175 492.168 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 760 0 R /H /I >> endobj 762 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 53.858 721.425 null] >> endobj 763 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.828 681.175 436.948 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 762 0 R /H /I >> endobj 764 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 98.874 679.525 null] >> endobj 765 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.138 655.175 395.258 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 764 0 R /H /I >> endobj 766 0 obj << /Type /Action /S /GoTo /D [207 0 R /XYZ 53.858 669.425 null] >> endobj 767 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.688 629.175 400.808 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 766 0 R /H /I >> endobj 768 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.858 616.175 514.978 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 742 0 R /H /I >> endobj 769 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.528 603.175 477.648 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 726 0 R /H /I >> endobj 770 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.868 590.175 485.988 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 728 0 R /H /I >> endobj 771 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 577.175 480.418 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 730 0 R /H /I >> endobj 772 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.518 564.175 477.638 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 732 0 R /H /I >> endobj 773 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.298 551.175 480.418 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 734 0 R /H /I >> endobj 774 0 obj << /Type /Annot /Subtype /Link /Rect [ 528.098 538.175 539.218 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 736 0 R /H /I >> endobj 775 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 570.825 null] >> endobj 776 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.708 525.175 440.828 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 777 0 obj << /Type /Action /S /GoTo /D [227 0 R /XYZ 87.874 399.925 null] >> endobj 778 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.598 499.175 419.718 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 779 0 obj << /Type /Action /S /GoTo /D [219 0 R /XYZ 87.874 255.546 null] >> endobj 780 0 obj << /Type /Annot /Subtype /Link /Rect [ 516.638 486.175 527.758 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 781 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 533.397 null] >> endobj 782 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.828 473.175 496.948 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 783 0 obj << /Type /Annot /Subtype /Link /Rect [ 500.518 460.175 511.638 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 760 0 R /H /I >> endobj 784 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 536.589 null] >> endobj 785 0 obj << /Type /Annot /Subtype /Link /Rect [ 486.068 447.175 497.188 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 784 0 R /H /I >> endobj 786 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 417.158 null] >> endobj 787 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 421.175 364.128 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 786 0 R /H /I >> endobj 788 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 187.695 null] >> endobj 789 0 obj << /Type /Annot /Subtype /Link /Rect [ 474.388 408.175 485.508 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 790 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.518 395.175 536.638 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 791 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 683.464 null] >> endobj 792 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 369.175 364.128 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 793 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 111.327 null] >> endobj 794 0 obj << /Type /Annot /Subtype /Link /Rect [ 391.918 356.175 403.038 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 795 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 330.175 364.128 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 796 0 obj << /Type /Action /S /GoTo /D [195 0 R /XYZ 87.874 392.974 null] >> endobj 797 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.188 317.175 495.308 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 798 0 obj << /Type /Annot /Subtype /Link /Rect [ 489.758 304.175 500.878 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 799 0 obj << /Type /Action /S /GoTo /D [174 0 R /XYZ 87.874 297.186 null] >> endobj 800 0 obj << /Type /Annot /Subtype /Link /Rect [ 464.938 291.175 476.058 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 799 0 R /H /I >> endobj 801 0 obj << /Type /Annot /Subtype /Link /Rect [ 497.508 278.175 508.628 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 802 0 obj << /Type /Action /S /GoTo /D [187 0 R /XYZ 53.858 672.057 null] >> endobj 803 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.938 265.175 453.058 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 804 0 obj << /Type /Annot /Subtype /Link /Rect [ 517.508 252.175 528.628 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 805 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 666.435 null] >> endobj 806 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.348 239.175 373.468 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 805 0 R /H /I >> endobj 807 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.358 226.175 464.378 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 718 0 R /H /I >> endobj 808 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 200.175 429.938 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 754 0 R /H /I >> endobj 809 0 obj << /Type /Annot /Subtype /Link /Rect [ 544.188 187.175 555.308 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 810 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 161.175 441.938 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 811 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 603.245 null] >> endobj 812 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 122.175 397.468 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 813 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 83.175 441.938 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 814 0 obj << /Length 815 0 R /Filter /FlateDecode >> stream xZKW!9n AGC&ߧRUɖl60_uO+%${~BuE^E(}#~vCog" |ɬ\@Lya&{ KDhDonߎ3"Xtp(]~(6>?^we_uDSP=%vI5[R&ݕ?<$m&5CΜ',2N;uL>_jǸ_ƾ\]5c0kvj0c5U2Jq[q` S}"]CRK*} fjB !p)U;]a}[xQd)vK%Cph}n@ɍ_tϱόn/I&?t]0a0m|jB}[>٘ngw<} %~SLSz?@pt:ؘjMceb !b82R3KJitzoFIHMza~128&ve?Ļ!60?pj LHsn"^ʄ\C9 ն{ugx,L(+q."&L L:uʆSei9 ө>%ð?MƒQ qW:yD冐k\R_ѡua; XF#iRBe IpC)$*L_Pb/,9Vi~(>W4S03WC$:If osՏ{+sReX [.Ŧ)uZs)hbStxNJ hIX TNA%UQ<HJ9?U~eŸs~TRw*?,xO B`l6K+R\z„Flm ?~#=e{5 B''UH1T,C &Hyb^ΪD ']WM5v4]ªIOq GKvLip .XϔyzAG9q58;4{=Lga s8db_ľ>o0 4%C%J *$^R 2&K_°"nȳȏP=t w| ai<L\hN]+E)+f{pbi!I9tgQlpp1Əs?O:+1Ǒ sDmqw!9%"!%a&]N/DӕDMEυ2mb !OOə^Agߧo=8hcH?oym2YJ]mSٸC Zg;[pW|E~ endstream endobj 815 0 obj 2080 endobj 816 0 obj [ 721 0 R 723 0 R 725 0 R 727 0 R 729 0 R 731 0 R 733 0 R 735 0 R 737 0 R 739 0 R 741 0 R 743 0 R 745 0 R 747 0 R 749 0 R 751 0 R 753 0 R 755 0 R 757 0 R 759 0 R 761 0 R 763 0 R 765 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 776 0 R 778 0 R 780 0 R 782 0 R 783 0 R 785 0 R 787 0 R 789 0 R 790 0 R 792 0 R 794 0 R 795 0 R 797 0 R 798 0 R 800 0 R 801 0 R 803 0 R 804 0 R 806 0 R 807 0 R 808 0 R 809 0 R 810 0 R 812 0 R 813 0 R ] endobj 719 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 816 0 R /Contents 814 0 R >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 707.175 191.267 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 818 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.948 707.175 526.068 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 411 0 R /H /I >> endobj 819 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 647.1 null] >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 694.175 135.207 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 819 0 R /H /I >> endobj 821 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.442 694.175 526.562 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 819 0 R /H /I >> endobj 822 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 579.606 null] >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 681.175 207.301 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 822 0 R /H /I >> endobj 824 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.076 681.175 526.196 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 822 0 R /H /I >> endobj 825 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 555.3 null] >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 668.175 353.853 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 825 0 R /H /I >> endobj 827 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.02 668.175 525.14 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 825 0 R /H /I >> endobj 828 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 631.5 null] >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 655.175 303.588 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 830 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.384 655.175 525.504 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 828 0 R /H /I >> endobj 831 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 117.4 null] >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 642.175 240.223 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 831 0 R /H /I >> endobj 833 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.84 642.175 525.96 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 831 0 R /H /I >> endobj 834 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 596.9 null] >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 629.175 329.412 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 834 0 R /H /I >> endobj 836 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.196 629.175 525.316 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 834 0 R /H /I >> endobj 837 0 obj << /Type /Action /S /GoTo /D [472 0 R /XYZ 87.874 118.106 null] >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 616.175 118.035 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 839 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.558 616.175 526.678 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 837 0 R /H /I >> endobj 840 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 603.175 296.431 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.434 603.175 525.554 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 510 0 R /H /I >> endobj 842 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 628.1 null] >> endobj 843 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 590.175 340.825 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.116 590.175 525.236 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 845 0 obj << /Type /Action /S /GoTo /D [515 0 R /XYZ 53.858 219.266 null] >> endobj 846 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 577.175 223.721 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 577.175 526.078 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 848 0 obj << /Type /Action /S /GoTo /D [531 0 R /XYZ 53.858 503.3 null] >> endobj 849 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 564.175 250.433 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.766 564.175 525.886 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 851 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 551.175 301.814 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 852 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.396 551.175 525.516 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 853 0 obj << /Type /Action /S /GoTo /D [545 0 R /XYZ 53.858 534.938 null] >> endobj 854 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 538.175 297.725 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 853 0 R /H /I >> endobj 855 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.424 538.175 525.544 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 853 0 R /H /I >> endobj 856 0 obj << /Type /Action /S /GoTo /D [566 0 R /XYZ 87.874 700.9 null] >> endobj 857 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 525.175 276.408 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 856 0 R /H /I >> endobj 858 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.58 525.175 525.7 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 856 0 R /H /I >> endobj 859 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 557.228 null] >> endobj 860 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 512.175 134.659 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 859 0 R /H /I >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.446 512.175 526.566 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 859 0 R /H /I >> endobj 862 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 502.338 null] >> endobj 863 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 499.175 266.887 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 862 0 R /H /I >> endobj 864 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.648 499.175 525.768 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 862 0 R /H /I >> endobj 865 0 obj << /Type /Action /S /GoTo /D [576 0 R /XYZ 87.874 378.046 null] >> endobj 866 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 486.175 216.578 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 865 0 R /H /I >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.01 486.175 526.13 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 865 0 R /H /I >> endobj 868 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 225.761 null] >> endobj 869 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 473.175 358.14 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 868 0 R /H /I >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 513.99 473.175 525.11 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 868 0 R /H /I >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 460.175 268.27 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 872 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.638 460.175 525.758 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 447.175 333.21 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 624 0 R /H /I >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.168 447.175 525.288 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 624 0 R /H /I >> endobj 875 0 obj << /Type /Action /S /GoTo /D [631 0 R /XYZ 53.858 415.507 null] >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.858 434.175 321.787 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.252 434.175 525.372 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 878 0 obj << /Type /Action /S /GoTo /D [656 0 R /XYZ 53.858 471.32 null] >> endobj 879 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 421.175 281.96 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.448 421.175 525.568 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 881 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 402.175 227.034 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 676 0 R /H /I >> endobj 882 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.72 402.175 525.84 411.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 676 0 R /H /I >> endobj 883 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 673.1 null] >> endobj 884 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 389.175 221.075 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 883 0 R /H /I >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.862 389.175 525.982 398.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 883 0 R /H /I >> endobj 886 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 380.997 null] >> endobj 887 0 obj << /Type /Annot /Subtype /Link /Rect [ 77.858 376.175 232.579 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 886 0 R /H /I >> endobj 888 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.784 376.175 525.904 385.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 886 0 R /H /I >> endobj 889 0 obj << /Type /Action /S /GoTo /D [705 0 R /XYZ 87.874 718.3 null] >> endobj 890 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 357.175 120.089 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 889 0 R /H /I >> endobj 891 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.406 357.175 526.526 366.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 889 0 R /H /I >> endobj 892 0 obj << /Type /Action /S /GoTo /D [714 0 R /XYZ 87.874 718.3 null] >> endobj 893 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 338.175 147.773 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 892 0 R /H /I >> endobj 894 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.228 338.175 526.348 347.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 892 0 R /H /I >> endobj 895 0 obj << /Type /Action /S /GoTo /D [719 0 R /XYZ 87.874 718.3 null] >> endobj 896 0 obj << /Type /Annot /Subtype /Link /Rect [ 53.858 319.175 79.978 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 895 0 R /H /I >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 515.664 319.175 526.784 328.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 895 0 R /H /I >> endobj 898 0 obj << /Length 899 0 R /Filter /FlateDecode >> stream xvǑ=­̌̈|ug<#[.ؔp2ڣyͮwα??̮Uݕ_F͇uxˇ2Z$珛c#8\+1"(DPA%FDN;DpA:t"D0`y!`^ty\`^b @ &B T"DPA#>Z%~^cEYҺ>TKV2*NǴo~pr|sۯ}W0r+/d)_o˚?ՠukk:H6T;sԊA\gY: d2jb9_^Wb9X׍XF,Y TdR"KC, YvdّeGYd9@,Y: d2jb9X&:u#:; KA,Y*TdҐ,Or*dOalLsBz.˭EkN> -Ͻ^2ƢyqT>i?q(e*MlARwTlARԵZQ=H݈e-Hjbg Z KA,Y*4dirGzyPmvRjE T #@,X*eb\ 5U P7bF,Y TdR"KC, YvdّeGYd9@,Y: d2ebX*ebX*U R#KA,Y TdR!KCOO'_fn}cW|4Y[cWT+ZPQPm&RTb)XJ#҈4b) Y d)R"KE, Y4dّeGYd9@,Y:td2eK-R B,KR+J,KmRd)R"KE,Y̟b<~j??~o/p1>߿뾎QJ 2|[nXkw'*ZQ=H*ZPQSAmF Zf-VY+֊HkC!Ԛ'-DLGy"ɕy"Ʌ\?C˓oo6xb8|5.OFˍ֓@|/ȍ_+A.,g:SuL5j0@R*JART*JCҐ4*LU0UaT*S5jL՘jgvڙ`Lՙ3`TRՂT U-HU+RՊT"UmHURՆT1UaT*SUL՘1˔w4#1,}c@M-d˛Jz7_o~8}x|N~$yθ:γF9C\!pODq[裂}ܴSbSGyܭe=)OEyˍ,W牸(Gy".ʑjr'Ⓖ!<LU0UaT*SUjL՘1T;SL3TSLՙ3UgTS KG(GtDTsH5PTsLU0UaT*S5jL՘1T;SLu0TSuLՙ3`Tʑj."\:B9Rͥ#7KG(gT SULU2Uc@-<r^*+Gyjhٸ}_y#vy͗?7jmm!o,R鯻h*)PY(Q>_- re@0UaT*SUL՘1Ucvڙjg:3UgTS HuZHuZ"ja#ja#ja3UaT*SUL՘1UcT;SL3TSLՙ3UgTS \- r\-|y^r0ȑryC gT SULU2Uc9;QJuNmʘX~f~bE {i~\t|x}`>7N/tm#O_؍NG]nۚ||"@

    Pn,w;SuL5j0`Tsr35W35#՜L LU0UaT*S5jL՘1T;SLu0TSuLՙ3`TL H5gj$H5gj(G9S#yC9SC9S*LU2UeTSJ9|IlLZD-X>\fbky׿y~~9j:&{$T%6>IwzzvUX.,,e$7;A+˙3UgTS H5F9R͍I^jnry!LU0UaT*SUjL՘1T;SLu0TSLՙ3UgTR}QTso#H5w&yC7ʙ0UaT*SUL՘j~ҥy{)amkNv`FXfnۅ{x}xw{s}wɳdtwUütȳ\ޞw]Zոq#(rc\+˕TTR@yo,7;Ge| ˅Lՙj0`Ts*rSaWSa#՜ !՜ S*LU2UeTS5ڙjg:`:SuL5j0@9F9Rͩ0ʑjNQTs*LTs*r*LU0UaT*S5jLu9WUvfSjzߚetצørܲgc)8>La[|: AZˍZY@ 5" QT SLU2UcTSL3TSLu0UgT:S L5j+H5 #VjHU:ڠ!֐jkLU0UaT*SUjL՘1T;SLu0TSLՙ3UgTR͍QTsA#xH57$yC ʙ0UaT*SUL՘1Ucvڙjg:3U$l]I’%aKK֖-)[[RlmIڒ%ekK֖-)[[RlmIڒ%ekK֖-)[[uyQ^jlchMc{Y|{:>Yl bRzOz1u`1lk꼑, N꼋,Ճy YP "KC,--ku{wkre@(,wsc"˙j0`Tsru#՜d dLU0UaT*SUjL՘1T;SL3TSLՙ3UgTS u#՜"՜dH5'(gT SULU1Ucypo[l qqӭid}:@XOr]^SON&lѦR[$'WrWWwGۥ|rGʕ>(3@ Vj+HU*RIސjkH5E9S*LU2UeTSTmel^Xn,wre@ ˙3`T(Gy=(+RAQTzP7׃ S*LU2UeTS5ڙjg:`:SuL5j0@y=(ʑj^r׃$oH5E9S*LU0UeTS]R{Q3oj/}kil,NMm$9R IT#H# G$gT SLU2Ucyt 86廛u:p7:4S u9s>}o~:OP^mPՖw1V|_zl[uRY,(σw ;8(73UcTvڙjg:`T:S L5j ܞH5'$yE=!ʑjnOr S*LU2UeTS5ڙjg:`T:SuL5j ܞH5'$yE=!ʑjnOHTs{B3UaT*SULU1c)uoL\sGDؚ_1 σ,|I-0txw|Oχëǰu:n19n[QY,$ϋQ.,,W E(Gy Ʌ S*LU2UeTSL3T;SLu0T:SuL5j0@y ʑj^4HTA#ռhH5/D9S*LU2UeTSC#s/6%A֧~o~z@>=_߿{l~zyOǧ~x>P8z5nso;tf ;y:3ɍN,r+(G ʑj\0UaT*SUjL՘1T;SLu0TSLՙ3UgTRͥ!#\B9Rͥ!#\"yC4r*LU0UaT*S5jL՘jgvڙ`Lՙ3`TRͥ!#\"yE4rKC(G4r*LU0UeTS5:uКg<\^qV{um 5],MScǧ˽*>\?^"&\|zy8zDT^VWr% iƁrc|q\Y>H RmT[A"Vjޜ ͹PT S*LU2UeTSL3T;SLu0T:SuL5j0@ys.#ռ9+RC3#ռ9ʑjޜ LU0UaT*S5jL՘1T;SLu0TSuLՙ3`T͹PT\$H5o΅r7"yCys.3UaT*SULU1\ +UTBM?X͈ZW}xe*܂e}J&R>ZJױ1jk򼬑A\AٸQ7WLZPQjC:*ՃԹC3ʑf-Y+֊H,G1UIVJw(wʵX(re@ygvڙ`Lՙ3`TRmT[A"yV#֐jkH5S*LU2UeTS5jL3T;SLu0T:SuL5j0@yu#ռ:+R{Iސj{LU0UaT*SUjL՘1T;SLu0TSLՙ3UgTRՂT U-HU RՊT"UHURՆT1UlmIڒ%ekK֖-)[[RoCXf~9jL.Pe'o y~tp}z~x|ZQmc ?7mLٍq̕Ʌɍڧ/fkVTR{wTwT.k6T#ˎ,;r ˁ,ґ#KG,Y3IM,|yR<[2ϕu#y< KA,Y*TdҐ!K{9/{a

    ˍr,W3`TRQTxW:kH5OG9RQT SLU2UcTSL3TSLu0UgT:S L5jAZVjEڐ6 S*LU2UeT9cDt^*oKK塀<?Ąy endstream endobj 899 0 obj 9277 endobj 900 0 obj [ 817 0 R 818 0 R 820 0 R 821 0 R 823 0 R 824 0 R 826 0 R 827 0 R 829 0 R 830 0 R 832 0 R 833 0 R 835 0 R 836 0 R 838 0 R 839 0 R 840 0 R 841 0 R 843 0 R 844 0 R 846 0 R 847 0 R 849 0 R 850 0 R 851 0 R 852 0 R 854 0 R 855 0 R 857 0 R 858 0 R 860 0 R 861 0 R 863 0 R 864 0 R 866 0 R 867 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 876 0 R 877 0 R 879 0 R 880 0 R 881 0 R 882 0 R 884 0 R 885 0 R 887 0 R 888 0 R 890 0 R 891 0 R 893 0 R 894 0 R 896 0 R 897 0 R ] endobj 901 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 900 0 R /Contents 898 0 R >> endobj 902 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.108 707.175 134.228 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 805 0 R /H /I >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 162.898 694.175 174.018 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 904 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 424.161 null] >> endobj 905 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.208 681.175 132.328 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 904 0 R /H /I >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 158.448 668.175 169.568 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.428 655.175 134.548 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 908 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 540.055 null] >> endobj 909 0 obj << /Type /Annot /Subtype /Link /Rect [ 112.318 642.175 123.438 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.778 629.175 147.898 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 911 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 53.858 168.359 null] >> endobj 912 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 603.175 113.108 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 913 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 81.323 null] >> endobj 914 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 549.623 113.108 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 913 0 R /H /I >> endobj 915 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 210.699 null] >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 88.308 523.623 93.868 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 917 0 obj << /Type /Annot /Subtype /Link /Rect [ 272.258 510.623 277.818 519.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 918 0 obj << /Type /Action /S /GoTo /D [576 0 R /XYZ 87.874 341.971 null] >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 457.071 221.468 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 920 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 326.193 null] >> endobj 921 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 431.071 129.228 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 922 0 obj << /Type /Action /S /GoTo /D [545 0 R /XYZ 53.858 498.863 null] >> endobj 923 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 405.071 221.468 414.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 922 0 R /H /I >> endobj 924 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 379.071 154.788 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 760 0 R /H /I >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.678 366.071 161.798 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 762 0 R /H /I >> endobj 926 0 obj << /Type /Annot /Subtype /Link /Rect [ 108.988 340.071 120.108 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 764 0 R /H /I >> endobj 927 0 obj << /Type /Annot /Subtype /Link /Rect [ 114.538 314.071 125.658 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 766 0 R /H /I >> endobj 928 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 263.681 null] >> endobj 929 0 obj << /Type /Annot /Subtype /Link /Rect [ 121.768 275.071 132.888 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 928 0 R /H /I >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.658 249.071 147.218 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 931 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 721.425 null] >> endobj 932 0 obj << /Type /Annot /Subtype /Link /Rect [ 135.108 210.071 146.228 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 184.071 154.788 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 742 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.378 171.071 202.498 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 726 0 R /H /I >> endobj 935 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.718 158.071 210.838 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 728 0 R /H /I >> endobj 936 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 145.071 205.268 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 730 0 R /H /I >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.368 132.071 202.488 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 732 0 R /H /I >> endobj 938 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.148 119.071 205.268 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 734 0 R /H /I >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Rect [ 252.948 106.071 264.068 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 736 0 R /H /I >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 154.558 93.071 165.678 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 941 0 obj << /Type /Annot /Subtype /Link /Rect [ 133.448 67.071 144.568 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 942 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 681.175 407.922 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 943 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 87.874 439.789 null] >> endobj 944 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 642.175 374.022 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 943 0 R /H /I >> endobj 945 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 616.175 395.922 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.812 603.175 462.932 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 947 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 495.579 null] >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.472 590.175 435.592 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 949 0 obj << /Type /Action /S /GoTo /D [656 0 R /XYZ 53.858 432.355 null] >> endobj 950 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 951 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 53.858 477.625 null] >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.382 512.175 483.502 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 953 0 obj << /Type /Annot /Subtype /Link /Rect [ 394.012 473.175 405.132 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 954 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 466.173 null] >> endobj 955 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 956 0 obj << /Type /Action /S /GoTo /D [598 0 R /XYZ 87.874 298.003 null] >> endobj 957 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 958 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 285.323 null] >> endobj 959 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 395.175 363.692 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 370.002 382.175 375.562 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.372 356.175 380.932 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 738 0 R /H /I >> endobj 962 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 330.175 312.552 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 963 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 416.425 null] >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.162 304.175 465.722 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 963 0 R /H /I >> endobj 965 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 278.175 347.002 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 966 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 549.425 null] >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Rect [ 365.902 265.175 371.462 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 966 0 R /H /I >> endobj 968 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 585.425 null] >> endobj 969 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.482 252.175 422.042 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 968 0 R /H /I >> endobj 970 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 477.425 null] >> endobj 971 0 obj << /Type /Annot /Subtype /Link /Rect [ 368.132 239.175 373.692 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 970 0 R /H /I >> endobj 972 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 63.858 513.425 null] >> endobj 973 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.572 226.175 378.132 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 972 0 R /H /I >> endobj 974 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 183.323 null] >> endobj 975 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.572 200.175 363.692 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 976 0 obj << /Type /Action /S /GoTo /D [490 0 R /XYZ 87.874 294.455 null] >> endobj 977 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.012 174.175 393.132 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 978 0 obj << /Type /Action /S /GoTo /D [515 0 R /XYZ 53.858 181.34 null] >> endobj 979 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 148.175 462.602 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 980 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 109.175 407.922 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 981 0 obj << /Length 982 0 R /Filter /FlateDecode >> stream xZ[o~_1 `sf4mPMQȻ]68/GZ$};C $MyGkWϔp&\&N~KRl|: xOeG9kU՟ }>خXJqquliH$P+qQ?߼o6_ɚ6&ya`χ/e6cR'*̢1h&IG UB&7Z6CnP͉@=fi+FDE߷Fz"\I FK p"!`Cp[Ի*P<3R&N͈[ Eu9(i0^!ON슲;G9edwP.K!'8Kؔ @wv\E2Rk]۴c/Mh] b~$(dJ 3lbQS&KTzn!'bpe֛2lˆ{D Ӣ iUjS6[Q6Ѝ5SD_^\um-~P_;*1HbE3\H=5zDEZeqmrF{QkL'*CƝEUmWk0^v9ڧ^W/O9ls)uqⲬʡD2f1Ld:ϰ*[aݮf j * aqenrh;֯FϯT03bݫPDDu]6 5I݅n'XLuΕJ69#I5rɜ j(wEK9\:0R]^}^<[aܔ0j$ Ŧ4msP&||{4 Ckp!@!ɹP6T) jh6UDnGj tmЉu;U5VY{.=IGg4дr-NgLf8i32+<o:Hb1#,6S8#qT,{P_g0':H`1{/FC7P@:#ݱ,>A0REՇX= {ˤ)i(6;P0Ɉb>iVMdJlhMPn7e1c⵲$7bӹ?2*|;5s-!5X\s]) 5$5v,xѻ_ljx0'6\j9D

    ZĸXB$># ǫh5HΌ'Wq4@jEG+pӢc,At=G)|;] -02110NQ^!+ C;$L*cy" uˎ16,OhxBjV~§Xcx3'Q8S.ƕ0<hA897xҝiTbcH3HJ1Lw:"e7Nyr &=J%&\'1ֱT9)44 MN>Ǽ>J, +:TRm rR?dzmڜǸZE9ک CHG`~ؐcDvBz9e;$Hrs f@ʿly{1,oě%:ja_$O1=?> D9pH?_$R`lJ#ܛ2߰=mܖ] endstream endobj 982 0 obj 2105 endobj 983 0 obj [ 902 0 R 903 0 R 905 0 R 906 0 R 907 0 R 909 0 R 910 0 R 912 0 R 914 0 R 916 0 R 917 0 R 919 0 R 921 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 929 0 R 930 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 944 0 R 945 0 R 946 0 R 948 0 R 950 0 R 952 0 R 953 0 R 955 0 R 957 0 R 959 0 R 960 0 R 961 0 R 962 0 R 964 0 R 965 0 R 967 0 R 969 0 R 971 0 R 973 0 R 975 0 R 977 0 R 979 0 R 980 0 R ] endobj 984 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 983 0 R /Contents 981 0 R >> endobj 985 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 694.175 200.804 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 762 0 R /H /I >> endobj 986 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.054 681.175 244.614 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 748 0 R /H /I >> endobj 987 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 53.858 568.549 null] >> endobj 988 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.374 668.175 232.934 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 987 0 R /H /I >> endobj 989 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 189.686 null] >> endobj 990 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 991 0 obj << /Type /Action /S /GoTo /D [531 0 R /XYZ 53.858 467.225 null] >> endobj 992 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 616.175 255.484 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 991 0 R /H /I >> endobj 993 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 267.215 null] >> endobj 994 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 590.175 255.484 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 993 0 R /H /I >> endobj 995 0 obj << /Type /Action /S /GoTo /D [482 0 R /XYZ 53.858 702.225 null] >> endobj 996 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 564.175 186.014 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 997 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 173.619 null] >> endobj 998 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 525.175 276.384 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 999 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 596.353 null] >> endobj 1000 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 499.175 163.244 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 999 0 R /H /I >> endobj 1001 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 317.577 null] >> endobj 1002 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 431.071 274.164 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1003 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 392.071 200.804 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1004 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 105.874 684.425 null] >> endobj 1005 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 366.071 147.124 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1004 0 R /H /I >> endobj 1006 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 636.361 null] >> endobj 1007 0 obj << /Type /Annot /Subtype /Link /Rect [ 202.124 340.071 213.244 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1006 0 R /H /I >> endobj 1008 0 obj << /Type /Annot /Subtype /Link /Rect [ 283.064 327.071 294.184 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1009 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 552.195 null] >> endobj 1010 0 obj << /Type /Annot /Subtype /Link /Rect [ 295.834 314.071 306.954 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1009 0 R /H /I >> endobj 1011 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 546.097 null] >> endobj 1012 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.694 301.071 295.814 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1013 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 243.513 null] >> endobj 1014 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.234 288.071 176.354 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1013 0 R /H /I >> endobj 1015 0 obj << /Type /Annot /Subtype /Link /Rect [ 261.924 275.071 273.044 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1016 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 488.423 null] >> endobj 1017 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.224 262.071 186.344 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1018 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 684.025 null] >> endobj 1019 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.824 249.071 236.944 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1020 0 obj << /Type /Annot /Subtype /Link /Rect [ 194.684 236.071 205.804 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 752 0 R /H /I >> endobj 1021 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 121.32 null] >> endobj 1022 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.564 223.071 199.684 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1021 0 R /H /I >> endobj 1023 0 obj << /Type /Action /S /GoTo /D [675 0 R /XYZ 87.874 133.785 null] >> endobj 1024 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.914 210.071 248.034 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1023 0 R /H /I >> endobj 1025 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 420.765 null] >> endobj 1026 0 obj << /Type /Annot /Subtype /Link /Rect [ 221.924 197.071 233.044 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1025 0 R /H /I >> endobj 1027 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 579.724 null] >> endobj 1028 0 obj << /Type /Annot /Subtype /Link /Rect [ 280.824 184.071 291.944 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1027 0 R /H /I >> endobj 1029 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 644.21 null] >> endobj 1030 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.044 171.071 254.164 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1029 0 R /H /I >> endobj 1031 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 53.858 218.535 null] >> endobj 1032 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.534 158.071 274.654 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1033 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 343.221 null] >> endobj 1034 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.454 145.071 221.574 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1035 0 obj << /Type /Annot /Subtype /Link /Rect [ 245.294 132.071 256.414 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 740 0 R /H /I >> endobj 1036 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 119.071 221.374 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 744 0 R /H /I >> endobj 1037 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.234 106.071 171.354 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 1038 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.454 93.071 183.574 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 1039 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 53.858 556.825 null] >> endobj 1040 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.024 80.071 234.144 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1039 0 R /H /I >> endobj 1041 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 53.858 636.025 null] >> endobj 1042 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.694 67.071 240.814 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1041 0 R /H /I >> endobj 1043 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 87.874 264.92 null] >> endobj 1044 0 obj << /Type /Annot /Subtype /Link /Rect [ 532.518 707.175 543.638 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1045 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 53.858 411.425 null] >> endobj 1046 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 694.175 478.078 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1047 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 583.1 null] >> endobj 1048 0 obj << /Type /Annot /Subtype /Link /Rect [ 518.838 668.175 529.958 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1047 0 R /H /I >> endobj 1049 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.058 642.175 452.178 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 1050 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.028 629.175 382.148 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 913 0 R /H /I >> endobj 1051 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.248 616.175 374.368 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1004 0 R /H /I >> endobj 1052 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 355.947 null] >> endobj 1053 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.028 590.175 387.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1054 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 469.566 null] >> endobj 1055 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.258 577.175 409.378 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1054 0 R /H /I >> endobj 1056 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 164.319 null] >> endobj 1057 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.378 564.175 471.498 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1058 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 514.611 null] >> endobj 1059 0 obj << /Type /Annot /Subtype /Link /Rect [ 456.478 551.175 467.598 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1060 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 424.611 null] >> endobj 1061 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.908 538.175 437.028 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1060 0 R /H /I >> endobj 1062 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 87.874 405.575 null] >> endobj 1063 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.498 525.175 446.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1062 0 R /H /I >> endobj 1064 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 305.319 null] >> endobj 1065 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.578 512.175 442.698 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1064 0 R /H /I >> endobj 1066 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 105.874 633.425 null] >> endobj 1067 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.028 499.175 412.148 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1068 0 obj << /Type /Action /S /GoTo /D [252 0 R /XYZ 87.874 286.961 null] >> endobj 1069 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 486.175 407.148 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1068 0 R /H /I >> endobj 1070 0 obj << /Type /Action /S /GoTo /D [416 0 R /XYZ 105.874 228.319 null] >> endobj 1071 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.158 473.175 433.278 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1072 0 obj << /Type /Action /S /GoTo /D [87 0 R /XYZ 71.858 721.425 null] >> endobj 1073 0 obj << /Type /Annot /Subtype /Link /Rect [ 388.238 460.175 399.358 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1074 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 635.1 null] >> endobj 1075 0 obj << /Type /Annot /Subtype /Link /Rect [ 424.618 447.175 435.738 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1074 0 R /H /I >> endobj 1076 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.478 434.175 419.598 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1077 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 395.175 397.468 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 904 0 R /H /I >> endobj 1078 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 653.02 null] >> endobj 1079 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 369.175 496.618 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1078 0 R /H /I >> endobj 1080 0 obj << /Type /Annot /Subtype /Link /Rect [ 377.138 330.175 388.258 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1052 0 R /H /I >> endobj 1081 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 687.1 null] >> endobj 1082 0 obj << /Type /Annot /Subtype /Link /Rect [ 473.498 317.175 484.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1081 0 R /H /I >> endobj 1083 0 obj << /Type /Annot /Subtype /Link /Rect [ 422.708 304.175 433.828 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1084 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.458 291.175 401.578 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 1085 0 obj << /Type /Annot /Subtype /Link /Rect [ 461.608 278.175 472.728 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 1086 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.008 252.175 352.128 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 1087 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.838 239.175 509.958 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 993 0 R /H /I >> endobj 1088 0 obj << /Type /Action /S /GoTo /D [656 0 R /XYZ 53.858 369.065 null] >> endobj 1089 0 obj << /Type /Annot /Subtype /Link /Rect [ 449.388 226.175 460.508 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1088 0 R /H /I >> endobj 1090 0 obj << /Type /Action /S /GoTo /D [656 0 R /XYZ 53.858 292.775 null] >> endobj 1091 0 obj << /Type /Annot /Subtype /Link /Rect [ 420.478 213.175 431.598 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1090 0 R /H /I >> endobj 1092 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.038 187.175 412.158 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1093 0 obj << /Type /Action /S /GoTo /D [424 0 R /XYZ 53.858 629.859 null] >> endobj 1094 0 obj << /Type /Annot /Subtype /Link /Rect [ 511.638 174.175 522.758 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1093 0 R /H /I >> endobj 1095 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 81.315 null] >> endobj 1096 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.708 161.175 418.828 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1095 0 R /H /I >> endobj 1097 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.418 148.175 515.538 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 922 0 R /H /I >> endobj 1098 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.048 135.175 452.168 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 991 0 R /H /I >> endobj 1099 0 obj << /Type /Action /S /GoTo /D [566 0 R /XYZ 87.874 664.825 null] >> endobj 1100 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.158 122.175 468.278 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1101 0 obj << /Type /Action /S /GoTo /D [501 0 R /XYZ 53.858 592.025 null] >> endobj 1102 0 obj << /Type /Annot /Subtype /Link /Rect [ 431.038 109.175 442.158 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1103 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 593.811 null] >> endobj 1104 0 obj << /Type /Annot /Subtype /Link /Rect [ 514.958 96.175 526.078 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1103 0 R /H /I >> endobj 1105 0 obj << /Type /Action /S /GoTo /D [610 0 R /XYZ 53.858 540.025 null] >> endobj 1106 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.508 83.175 491.628 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1107 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 486.032 null] >> endobj 1108 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.408 70.175 515.528 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1109 0 obj << /Length 1110 0 R /Filter /FlateDecode >> stream xZoFb/M>H޷^r@qꢠL">l!%;]?Ģ(o;嗅GŢ.)&QaȪOFJ-b N 7I|1duz@/ůz!~+ob|^|2nWH>s^&|rM;1$LQOԉ%/XdV+%.7E7"o|ߝW~{>6"6˦މHI2˲:JegV'1E?^M?2+fa>ؖݨCFjae O,F+o46q`q;sR ~{=cI^T38~: >o7?rsyDeG($#|b6i0S4VYcx S#h +qO@p tO77n8p#ӭb0VLd3V8 ;5yyT1:3FiPG4wɯM{ähS}p?ޒ 3u3+jAPl ؐoJZ[ WJ( L~D26h=R @\2ߙOd&!f/dbP!{+`ِqK :H$u g@:QvQ7&?NW 2"$pڧT0cfPLZηg㠚lH 5otp^;VúSLOݕժ،qaWI0'TqeЪCDJaQ1=>uTg7o (9mCYkj&k>3Eraj! r7@ :MY.*gK9Snj0qw30K4IZVf\>Uc(` Fc.{fS~`Ҕ5pȆ!Yx|09U/= J9u=4=?\J'aF_2MMsɱf9|GVY3VxD? MÄXYt2 G|B&A8V/.Zt4BƞN>ckj|=fFqL87< :'gޤ`}T)1:..79ïΦ{{]ؔ%Bnk `—ӦZ]iy gC}<;9%v endstream endobj 1110 0 obj 2521 endobj 1111 0 obj [ 985 0 R 986 0 R 988 0 R 990 0 R 992 0 R 994 0 R 996 0 R 998 0 R 1000 0 R 1002 0 R 1003 0 R 1005 0 R 1007 0 R 1008 0 R 1010 0 R 1012 0 R 1014 0 R 1015 0 R 1017 0 R 1019 0 R 1020 0 R 1022 0 R 1024 0 R 1026 0 R 1028 0 R 1030 0 R 1032 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1040 0 R 1042 0 R 1044 0 R 1046 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1053 0 R 1055 0 R 1057 0 R 1059 0 R 1061 0 R 1063 0 R 1065 0 R 1067 0 R 1069 0 R 1071 0 R 1073 0 R 1075 0 R 1076 0 R 1077 0 R 1079 0 R 1080 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1089 0 R 1091 0 R 1092 0 R 1094 0 R 1096 0 R 1097 0 R 1098 0 R 1100 0 R 1102 0 R 1104 0 R 1106 0 R 1108 0 R ] endobj 1112 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1111 0 R /Contents 1109 0 R >> endobj 1113 0 obj << /Type /Action /S /GoTo /D [632 0 R /XYZ 87.874 618.249 null] >> endobj 1114 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.328 707.175 186.448 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1113 0 R /H /I >> endobj 1115 0 obj << /Type /Action /S /GoTo /D [631 0 R /XYZ 53.858 379.432 null] >> endobj 1116 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 681.175 76.978 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1117 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 81.325 null] >> endobj 1118 0 obj << /Type /Annot /Subtype /Link /Rect [ 178.118 668.175 189.238 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1119 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 642.175 76.978 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1078 0 R /H /I >> endobj 1120 0 obj << /Type /Action /S /GoTo /D [434 0 R /XYZ 87.874 519.225 null] >> endobj 1121 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.928 629.175 237.048 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1122 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 87.874 543.837 null] >> endobj 1123 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.218 616.175 155.338 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1124 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 560.825 null] >> endobj 1125 0 obj << /Type /Annot /Subtype /Link /Rect [ 160.898 616.175 172.018 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1124 0 R /H /I >> endobj 1126 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 184.215 null] >> endobj 1127 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.088 590.175 114.208 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1128 0 obj << /Type /Action /S /GoTo /D [531 0 R /XYZ 53.858 172.092 null] >> endobj 1129 0 obj << /Type /Annot /Subtype /Link /Rect [ 253.708 577.175 264.828 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1130 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.998 564.175 203.118 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1131 0 obj << /Type /Annot /Subtype /Link /Rect [ 163.118 551.175 174.238 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 1132 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 543.615 null] >> endobj 1133 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.038 538.175 218.158 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1134 0 obj << /Type /Action /S /GoTo /D [577 0 R /XYZ 53.858 121.322 null] >> endobj 1135 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.218 525.175 195.338 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1136 0 obj << /Type /Action /S /GoTo /D [620 0 R /XYZ 53.858 357.825 null] >> endobj 1137 0 obj << /Type /Annot /Subtype /Link /Rect [ 175.888 512.175 187.008 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1136 0 R /H /I >> endobj 1138 0 obj << /Type /Action /S /GoTo /D [631 0 R /XYZ 53.858 721.425 null] >> endobj 1139 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.568 512.175 203.688 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1138 0 R /H /I >> endobj 1140 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 486.175 76.978 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1141 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.118 473.175 184.238 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1142 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 616.615 null] >> endobj 1143 0 obj << /Type /Annot /Subtype /Link /Rect [ 137.558 460.175 148.678 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1144 0 obj << /Type /Action /S /GoTo /D [531 0 R /XYZ 53.858 121.322 null] >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.218 447.175 160.338 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1146 0 obj << /Type /Annot /Subtype /Link /Rect [ 116.988 421.175 128.108 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 382.175 242.368 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1039 0 R /H /I >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 343.175 242.368 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1041 0 R /H /I >> endobj 1149 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 64.858 595.325 null] >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 317.175 122.558 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1009 0 R /H /I >> endobj 1152 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 239.175 166.788 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1153 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 87.874 171.32 null] >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Rect [ 224.258 184.071 233.698 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1153 0 R /H /I >> endobj 1155 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 158.071 221.468 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 922 0 R /H /I >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 132.071 221.468 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 993 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 106.071 221.468 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1158 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 491.551 null] >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.338 93.071 153.898 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1160 0 obj << /Type /Action /S /GoTo /D [63 0 R /XYZ 53.858 644.525 null] >> endobj 1161 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.988 80.071 123.108 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1160 0 R /H /I >> endobj 1162 0 obj << /Type /Action /S /GoTo /D [118 0 R /XYZ 87.874 374.303 null] >> endobj 1163 0 obj << /Type /Annot /Subtype /Link /Rect [ 146.428 67.071 151.988 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1162 0 R /H /I >> endobj 1164 0 obj << /Type /Action /S /GoTo /D [165 0 R /XYZ 105.874 633.461 null] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 681.175 374.022 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 642.175 407.922 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 1167 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 603.175 363.452 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 1168 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 64.858 286.853 null] >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 577.175 352.562 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1168 0 R /H /I >> endobj 1170 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 147.324 null] >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.902 551.175 374.022 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1172 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 409.601 null] >> endobj 1173 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 525.175 387.362 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1172 0 R /H /I >> endobj 1174 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 381.753 null] >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 499.175 352.562 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1174 0 R /H /I >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 430.272 null] >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.442 473.175 352.562 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 434.175 481.282 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1025 0 R /H /I >> endobj 1179 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 408.175 462.602 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 382.175 462.602 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 1181 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 87.874 487.373 null] >> endobj 1182 0 obj << /Type /Annot /Subtype /Link /Rect [ 340.572 369.175 351.692 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1181 0 R /H /I >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.332 356.175 346.452 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 958 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.102 343.175 354.222 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 1185 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 234.323 null] >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.022 330.175 398.142 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1187 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 132.323 null] >> endobj 1188 0 obj << /Type /Annot /Subtype /Link /Rect [ 330.332 317.175 341.452 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1187 0 R /H /I >> endobj 1189 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 141.328 null] >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Rect [ 376.242 291.175 387.362 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1189 0 R /H /I >> endobj 1191 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 105.874 584.425 null] >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.782 278.175 355.902 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1193 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 81.323 null] >> endobj 1194 0 obj << /Type /Annot /Subtype /Link /Rect [ 380.362 265.175 391.482 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1193 0 R /H /I >> endobj 1195 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 387.323 null] >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Rect [ 329.772 252.175 340.892 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1197 0 obj << /Type /Annot /Subtype /Link /Rect [ 346.452 252.175 357.572 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1198 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 105.874 336.323 null] >> endobj 1199 0 obj << /Type /Annot /Subtype /Link /Rect [ 332.552 239.175 343.672 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1198 0 R /H /I >> endobj 1200 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.772 213.175 345.892 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 187.175 462.602 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 161.175 462.602 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1088 0 R /H /I >> endobj 1203 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 135.175 462.602 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1088 0 R /H /I >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 109.175 462.602 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1088 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 83.175 462.602 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1090 0 R /H /I >> endobj 1206 0 obj << /Length 1207 0 R /Filter /FlateDecode >> stream xZ[o~ׯ]rK>EZ@pM%Rő )Y脉۰$rΌB WbXkJ$L&t?'&R2JG#<|WWlD%|ӛ;Eŧ? y1`>.>gPziIc$Vb^VOuvI\_3O1χ/oʨ  tt0 2$xiCU*&;+Ս6}l;eݶoĸRi * iBV8IܼzΉkľK׶7PDP>`"]f/{q#@+MAtL9*o;:Qֻ]Qrh6\,ݡzhgug2(um*E5E|]b; 嫤?=nڃ%Qb<"2\z5| `U˭\皝yأ{Uym\Ài]с "<~f D*Py]L%A` ! ϕoŻk_RIY MrK :HSd~_ c8f6 5XᐫW}[le W|Dp\\L5Ѯ/A┌fb)5IzoP8x&ceCmHCp++qJQc~rLލz&c0uC/:0jHI 3&%Q!<1Nз 59ݜpI$gEъapNXF<2EZ+TW"w([GiLepMS7DI:~o CB8JbbNs%1R8(0*0Za҆~2- e;!3/?%":Ee C$,Vaޕ}iG}0f8t}Ѵu0/z: d3L,f,Z0&sf7Eqz0ƷCfӸMѹГi. < c`܄xP3 6&ec64:A+mpHHi=`5ʀpP$֖uՁZ&4Nw[[f8E|&+碃櫼+kEW3,@:J-Jl Nw4YraKNSLY0&}usy cUM󼊟СFL$C +#J7&;@9RX'iJbCυp⻢1`90ɖDQ7N).mByC?JԺ>5Lkvs!<~6HƳr>w&wfMޗTi|h63P-65Ag(LW4\(P0ciFpw2Ғ%02]]#箑Щl]{>*9S*4%6<:J8t,:7Cz*jdHX6Yh>cgi>#|FD$ѣ<oX%5ګ3P|0*~[гF%{Wڣ/P* ۛ0i\BGI_Bɏ$"P|eTtejaL\TlWJF]:>4h|8tLqPFo^cAفZp" 'Bz(YLo+t L^08sRį;t&C Ȝ4P ܄۷INb]'@bAG@NW . Ϲ@%|\g1sϺLNsVeMc-&ЙYZO endstream endobj 1207 0 obj 2158 endobj 1208 0 obj [ 1114 0 R 1116 0 R 1118 0 R 1119 0 R 1121 0 R 1123 0 R 1125 0 R 1127 0 R 1129 0 R 1130 0 R 1131 0 R 1133 0 R 1135 0 R 1137 0 R 1139 0 R 1140 0 R 1141 0 R 1143 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1150 0 R 1151 0 R 1152 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1159 0 R 1161 0 R 1163 0 R 1165 0 R 1166 0 R 1167 0 R 1169 0 R 1171 0 R 1173 0 R 1175 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1182 0 R 1183 0 R 1184 0 R 1186 0 R 1188 0 R 1190 0 R 1192 0 R 1194 0 R 1196 0 R 1197 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R ] endobj 1209 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1208 0 R /Contents 1206 0 R >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.454 675.455 156.574 684.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1211 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 721.425 null] >> endobj 1212 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 636.455 166.904 645.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1211 0 R /H /I >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.684 610.455 163.244 619.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 999 0 R /H /I >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 571.455 274.164 580.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1215 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 532.455 274.164 541.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1013 0 R /H /I >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.584 488.735 180.704 497.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1181 0 R /H /I >> endobj 1217 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 53.858 654.425 null] >> endobj 1218 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 462.735 216.044 471.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1217 0 R /H /I >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.254 449.735 221.374 458.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 943 0 R /H /I >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 436.735 166.904 445.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1221 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 71.858 555.173 null] >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.554 423.735 154.674 432.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1223 0 obj << /Type /Action /S /GoTo /D [159 0 R /XYZ 71.858 122.345 null] >> endobj 1224 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.894 410.735 178.014 419.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1223 0 R /H /I >> endobj 1225 0 obj << /Type /Action /S /GoTo /D [97 0 R /XYZ 87.874 187.698 null] >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 397.735 168.244 406.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1225 0 R /H /I >> endobj 1227 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 87.874 252.919 null] >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 384.735 251.604 393.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 230.244 371.735 241.364 380.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 928 0 R /H /I >> endobj 1230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.114 358.735 155.234 367.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1211 0 R /H /I >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 345.735 208.034 354.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1232 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 53.858 721.425 null] >> endobj 1233 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.804 332.735 206.924 341.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1232 0 R /H /I >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.444 319.735 168.564 328.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1235 0 obj << /Type /Action /S /GoTo /D [141 0 R /XYZ 53.858 243.119 null] >> endobj 1236 0 obj << /Type /Annot /Subtype /Link /Rect [ 173.794 306.735 184.914 315.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1235 0 R /H /I >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 183.484 293.735 194.604 302.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1074 0 R /H /I >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 267.735 180.244 276.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1239 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 241.735 186.014 250.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1240 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 549.425 null] >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Rect [ 201.014 215.735 206.574 224.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1240 0 R /H /I >> endobj 1242 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.684 176.735 180.244 185.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 963 0 R /H /I >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 120.015 255.484 129.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 94.015 255.484 103.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 991 0 R /H /I >> endobj 1245 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 68.015 255.484 77.265 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 694.175 427.148 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 655.175 515.298 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1023 0 R /H /I >> endobj 1248 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 616.175 496.618 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.028 590.175 427.148 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1250 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 551.175 408.038 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1251 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 525.175 496.618 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1093 0 R /H /I >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 499.175 429.938 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 473.175 496.618 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1103 0 R /H /I >> endobj 1254 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 447.175 496.618 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 421.175 429.938 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 784 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 353.008 395.175 364.128 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 786 0 R /H /I >> endobj 1257 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.348 356.175 397.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1258 0 obj << /Type /Action /S /GoTo /D [79 0 R /XYZ 87.874 592.583 null] >> endobj 1259 0 obj << /Type /Annot /Subtype /Link /Rect [ 389.588 343.175 395.148 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1258 0 R /H /I >> endobj 1260 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 317.175 496.618 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1095 0 R /H /I >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.588 291.175 407.148 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1258 0 R /H /I >> endobj 1262 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 147.125 null] >> endobj 1263 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.618 278.175 477.178 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 483.288 265.175 488.848 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 987 0 R /H /I >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Rect [ 428.828 252.175 434.388 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1266 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 619.425 null] >> endobj 1267 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.738 239.175 448.298 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1268 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 392.325 null] >> endobj 1269 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.718 226.175 438.278 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1268 0 R /H /I >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.388 213.175 474.948 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1268 0 R /H /I >> endobj 1271 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 585.425 null] >> endobj 1272 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 187.175 447.708 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1271 0 R /H /I >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.028 161.175 374.588 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 122.175 441.938 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1275 0 obj << /Type /Annot /Subtype /Link /Rect [ 460.498 96.175 466.058 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 438.838 83.175 444.398 92.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 999 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 441.618 70.175 447.178 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 999 0 R /H /I >> endobj 1278 0 obj << /Length 1279 0 R /Filter /FlateDecode >> stream xZKoHW1b&yd6{ b&-d”뷚,dljmԗ]Iz2=S"M4E#GHXJ#Ti J<?2B#/7?JWO xnոRi:4{,_`79̓V}]?юn 0I`ip# DIHꗫX\m!L$Meuj'|ۿ?a9l%bDIb[uכ"o緣" dT֌B~z߾hM"JX*Z kКmU_9CU~7|#`PE2C%QҒxiAW<GI>컦.`UYJ.*bR)6w;0fWá7/Ѯ 4uj2&{ֲrp*rVoSPe..df7ՅgJ9Wt +;:uZALJ&THià]Ne{+צ!Byx`L |w`/)9Qq)ɥ5X'H-\(d!(TT * ]CL{RM$g) kplnJ(xRw_{*dj*{,Vt>\K\WVN?La)}"Qo Y0m1,f{)dA\{9sW*Z: ׳(qoW@N󂡇fBқc9M~'|Su k)! Q/LTXB]ax1E3/~!ʘ 1}:o}suP׷-cw g7AH%U?LH2ڢa-[gܙ%zH3Cp+q|0:D>ő>wirh  X+ 3BeHf:f; gp-Ts,H04[f$Lqn m$urKX*`vCq߇VnL8MEVQ.rj S%̜"31A5Z 뾬 pRŎ\ .r~xqeáox!^|m6}d0&b%lB '1T>OmÌ:?e(Z7 X3t]^2SLMUp8ܫ[&gMu)zom?./(ӳBvMIK؀ogh, ^kAV*j0s좋OAq2 endstream endobj 1279 0 obj 2109 endobj 1280 0 obj [ 1210 0 R 1212 0 R 1213 0 R 1214 0 R 1215 0 R 1216 0 R 1218 0 R 1219 0 R 1220 0 R 1222 0 R 1224 0 R 1226 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1233 0 R 1234 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1241 0 R 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1259 0 R 1260 0 R 1261 0 R 1263 0 R 1264 0 R 1265 0 R 1267 0 R 1269 0 R 1270 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R ] endobj 1281 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1280 0 R /Contents 1278 0 R >> endobj 1282 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 108.321 null] >> endobj 1283 0 obj << /Type /Annot /Subtype /Link /Rect [ 180.338 707.175 185.898 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1282 0 R /H /I >> endobj 1284 0 obj << /Type /Action /S /GoTo /D [410 0 R /XYZ 87.874 687.1 null] >> endobj 1285 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.008 694.175 182.568 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 655.175 242.368 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 1287 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 616.175 240.148 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 577.175 166.788 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 524.14 221.468 533.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 1290 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.468 511.14 190.028 520.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.038 498.14 280.598 507.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 915 0 R /H /I >> endobj 1292 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.138 485.14 201.698 494.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 987 0 R /H /I >> endobj 1293 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 459.14 113.108 468.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1056 0 R /H /I >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 433.14 113.108 442.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1295 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.198 394.14 122.318 403.39 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1296 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 328.105 240.148 337.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 123.668 302.105 129.228 311.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1282 0 R /H /I >> endobj 1298 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 263.105 166.788 272.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1299 0 obj << /Type /Action /S /GoTo /D [135 0 R /XYZ 105.874 648.425 null] >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Rect [ 96.428 237.105 107.548 246.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Rect [ 113.438 211.105 124.558 220.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 720 0 R /H /I >> endobj 1302 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.098 198.105 126.218 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 722 0 R /H /I >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 131.778 198.105 142.898 207.355 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 724 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 132.07 242.368 141.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1039 0 R /H /I >> endobj 1305 0 obj << /Type /Annot /Subtype /Link /Rect [ 231.248 93.07 242.368 102.32 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1041 0 R /H /I >> endobj 1306 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 707.175 407.922 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 1307 0 obj << /Type /Annot /Subtype /Link /Rect [ 343.122 681.175 354.242 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1060 0 R /H /I >> endobj 1308 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 655.175 462.602 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 922 0 R /H /I >> endobj 1309 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 629.175 462.602 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1310 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 603.175 462.602 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 991 0 R /H /I >> endobj 1311 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 577.175 462.602 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1312 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 551.175 462.602 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1313 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 525.175 462.602 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1103 0 R /H /I >> endobj 1314 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 499.175 462.602 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1315 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 473.175 462.602 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1316 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 447.175 462.602 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1113 0 R /H /I >> endobj 1317 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 421.175 462.602 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1318 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 395.175 462.602 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1319 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.802 356.175 407.922 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 764 0 R /H /I >> endobj 1320 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 330.175 462.602 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1078 0 R /H /I >> endobj 1321 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.802 304.175 395.922 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 1322 0 obj << /Type /Annot /Subtype /Link /Rect [ 375.902 249.071 387.022 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1323 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 223.071 462.602 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1324 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 197.071 462.602 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1325 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 197.071 479.282 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1124 0 R /H /I >> endobj 1326 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 171.071 462.602 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1327 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 145.071 462.602 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1328 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.162 145.071 479.282 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1124 0 R /H /I >> endobj 1329 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 106.071 481.282 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1330 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 67.071 481.282 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 752 0 R /H /I >> endobj 1331 0 obj << /Length 1332 0 R /Filter /FlateDecode >> stream xZYo8~ >@![tnQ@E!:\INCɱe96EȜqΌ}"S%!5 b3Z$RB*%*5|:(/pߧܭ(B%9,onؿjopu5 ||'M'gBΦ1$ZsX-شd_ߜW376caYlF381k>eqVBcG3vHhmPTȢE^]uղzξl;[N <54H@YzkMVee]]5q''Jq[$"Y~ CS',./-MS7}T$CŌ$Mۥy5TavQ82"L/R;mYWû&O ۞Ma8m6=k-X˳v@ w}2]llcL !}m=alۺ{–ZW,:K q=-EaIuĆH*IB֋ FAa "m0WK¨@j?֣we omSز kifO¦r{~ؾ$ti [/X5#k >&@5"<0jAv"oWֳ9o"z̋P`X!A[`7#tP-"o̗Uvͫ.]Gw.4ȶ`<"aкp::Y,_ bW"H#n=ŹE~l =tł;! M(R瑎$i@@*fӼX6`'1272.[TAQV=\ Иd緤,aaY5b9Ll2UZN-ʘ:KMBCkJK\_̜d{%#m >8*h>Y U $Ю^9P|uceCB-y+0fumD:L*Vj7h%hT݃{֠YHJ6 fd DG“zrcTocuQW'&yPr;FoQi+M`oUڸ|{:iҷOOVhD B7Ad8օAMN7[~KK5@;7d́'H8PYvVC 8!˥]WˎJ=[=+҅6'ؙ˳@qzHki웸A ۾#H}СȃG)r( 4toa*Ԩ!G)"Yq.>.E;@":h % Y,['8Gi7f7!z12C,wubч!Z'GLD= lG+#QJ=_*|ФXWTKx 6Rj{>6~=bG~쬙C,!O!m^1؏CL3Gv6[_WA"JZ=Үxh,LwLCciԠPlw. ڍ&vc5|T/==Vkn0u &_&V&lD(734^ጬec#B,eGw%VQg >fPXG̊?bV2kRDʴn\?O05 2ڈ90Y^]_㒗T~DDiz?2y6k#/G K9FxjV٭8G2501Z)de0_ endstream endobj 1332 0 obj 1961 endobj 1333 0 obj [ 1283 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1300 0 R 1301 0 R 1302 0 R 1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R 1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R 1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R ] endobj 1334 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1333 0 R /Contents 1331 0 R >> endobj 1335 0 obj << /Type /Annot /Subtype /Link /Rect [ 265.264 681.175 276.384 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1336 0 obj << /Type /Annot /Subtype /Link /Rect [ 303.054 613.071 314.174 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 1337 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.454 600.071 196.574 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 758 0 R /H /I >> endobj 1338 0 obj << /Type /Annot /Subtype /Link /Rect [ 239.914 587.071 251.034 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 760 0 R /H /I >> endobj 1339 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.694 574.071 195.814 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 762 0 R /H /I >> endobj 1340 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.004 548.071 154.124 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 764 0 R /H /I >> endobj 1341 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.554 522.071 159.674 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 766 0 R /H /I >> endobj 1342 0 obj << /Type /Annot /Subtype /Link /Rect [ 262.724 509.071 273.844 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 742 0 R /H /I >> endobj 1343 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.394 496.071 236.514 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 726 0 R /H /I >> endobj 1344 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.734 483.071 244.854 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 728 0 R /H /I >> endobj 1345 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 470.071 239.284 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 730 0 R /H /I >> endobj 1346 0 obj << /Type /Annot /Subtype /Link /Rect [ 225.384 457.071 236.504 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 732 0 R /H /I >> endobj 1347 0 obj << /Type /Annot /Subtype /Link /Rect [ 228.164 444.071 239.284 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 734 0 R /H /I >> endobj 1348 0 obj << /Type /Annot /Subtype /Link /Rect [ 286.964 431.071 298.084 440.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 736 0 R /H /I >> endobj 1349 0 obj << /Type /Annot /Subtype /Link /Rect [ 188.574 418.071 199.694 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 775 0 R /H /I >> endobj 1350 0 obj << /Type /Annot /Subtype /Link /Rect [ 167.464 392.071 178.584 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 777 0 R /H /I >> endobj 1351 0 obj << /Type /Annot /Subtype /Link /Rect [ 275.504 379.071 286.624 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 779 0 R /H /I >> endobj 1352 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.694 366.071 255.814 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 1353 0 obj << /Type /Annot /Subtype /Link /Rect [ 259.384 353.071 270.504 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 760 0 R /H /I >> endobj 1354 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.934 340.071 256.054 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 784 0 R /H /I >> endobj 1355 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 314.071 122.994 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 786 0 R /H /I >> endobj 1356 0 obj << /Type /Annot /Subtype /Link /Rect [ 233.254 301.071 244.374 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 1357 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.384 288.071 295.504 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 1358 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 262.071 122.994 271.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 1359 0 obj << /Type /Annot /Subtype /Link /Rect [ 150.784 249.071 161.904 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 1360 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.874 223.071 122.994 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 1361 0 obj << /Type /Annot /Subtype /Link /Rect [ 243.054 210.071 254.174 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1362 0 obj << /Type /Annot /Subtype /Link /Rect [ 248.624 197.071 259.744 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1363 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.804 184.071 234.924 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 799 0 R /H /I >> endobj 1364 0 obj << /Type /Annot /Subtype /Link /Rect [ 256.374 171.071 267.494 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1365 0 obj << /Type /Annot /Subtype /Link /Rect [ 200.804 158.071 211.924 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1366 0 obj << /Type /Annot /Subtype /Link /Rect [ 276.374 145.071 287.494 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1367 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 53.858 339.045 null] >> endobj 1368 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 119.071 139.894 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1367 0 R /H /I >> endobj 1369 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 80.071 200.804 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1370 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 694.175 517.518 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 744 0 R /H /I >> endobj 1371 0 obj << /Type /Annot /Subtype /Link /Rect [ 498.528 652.071 504.088 661.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1372 0 obj << /Type /Annot /Subtype /Link /Rect [ 492.178 626.071 503.298 635.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1006 0 R /H /I >> endobj 1373 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.198 613.071 535.318 622.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1374 0 obj << /Type /Annot /Subtype /Link /Rect [ 536.968 600.071 548.088 609.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1009 0 R /H /I >> endobj 1375 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.828 587.071 536.948 596.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1376 0 obj << /Type /Annot /Subtype /Link /Rect [ 406.368 574.071 417.488 583.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1013 0 R /H /I >> endobj 1377 0 obj << /Type /Annot /Subtype /Link /Rect [ 503.058 561.071 514.178 570.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1378 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.358 548.071 427.478 557.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1379 0 obj << /Type /Annot /Subtype /Link /Rect [ 466.958 535.071 478.078 544.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1380 0 obj << /Type /Annot /Subtype /Link /Rect [ 435.818 522.071 446.938 531.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 752 0 R /H /I >> endobj 1381 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.698 509.071 440.818 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1021 0 R /H /I >> endobj 1382 0 obj << /Type /Annot /Subtype /Link /Rect [ 478.048 496.071 489.168 505.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1023 0 R /H /I >> endobj 1383 0 obj << /Type /Annot /Subtype /Link /Rect [ 463.058 483.071 474.178 492.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1025 0 R /H /I >> endobj 1384 0 obj << /Type /Annot /Subtype /Link /Rect [ 521.958 470.071 533.078 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1027 0 R /H /I >> endobj 1385 0 obj << /Type /Annot /Subtype /Link /Rect [ 484.178 457.071 495.298 466.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1029 0 R /H /I >> endobj 1386 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.668 444.071 515.788 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1387 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.818 418.071 404.378 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1388 0 obj << /Type /Annot /Subtype /Link /Rect [ 506.398 379.071 517.518 388.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1389 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 353.071 496.618 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1390 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 327.071 397.708 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1187 0 R /H /I >> endobj 1391 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.918 301.071 431.038 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1174 0 R /H /I >> endobj 1392 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 520.406 null] >> endobj 1393 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.138 288.071 418.258 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1392 0 R /H /I >> endobj 1394 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.818 288.071 434.938 297.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1395 0 obj << /Type /Annot /Subtype /Link /Rect [ 426.048 275.071 437.168 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1168 0 R /H /I >> endobj 1396 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 249.071 496.618 258.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1397 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 223.071 496.618 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1398 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 184.071 515.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1021 0 R /H /I >> endobj 1399 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 145.071 515.298 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1400 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 64.858 626.525 null] >> endobj 1401 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.258 106.071 421.378 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1400 0 R /H /I >> endobj 1402 0 obj << /Type /Annot /Subtype /Link /Rect [ 418.818 80.071 429.938 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 788 0 R /H /I >> endobj 1403 0 obj << /Length 1404 0 R /Filter /FlateDecode >> stream xZYs~篘dhp zW1CPʹ6l;qrh[SlBM~˄Y r;wl; [ƸN}S>"}buQ"ry[Q"qQ0Ha kHJr֐`!#1rO˃1HXyʍԛb  /R>KܨwGXyz;)cʾ[3(<9XVx=K㔔SS ''1[^. c^+`n8c$blRG&`0?l/Cw*>VNYŘe4e`,*7Ac֚AilÔ8(?@0`HBuc7LW[Қ0 ~[6= 4o 3Q1uS7,%G+fuctu#*X\l=Ma:cEL/Fϗr"7O־&Tnr=[ct@ۊP,U*V )/ٕX*4TF߅-C3X=478e.}=E |7Zf7Ȅ-Q T:Īں|ma˂E;D.rcex^32mV +L!cʦCeF|3N>g8wč9DΖߒ5*FbRԍȺAv sʙf'F32k\a0`agY,ZJ#4R^AusEJ:MzU{e6Cfe \$b\qrȷGZbq@nr,[«`j|ՏL+in4syςPHG(ߴ6i1MXe 3al~{W^%cȕ CEQre2L-~Й-;]d1npc8 B]={PEˑ E1MS@[sAqf谫e(}MPft^tФ<^AE#/ʴ,Rz<=q N,&".t).ŭ{z43Aa?qB㙡|@z`a̾~l?pz S":6RwȤR7gvAz Rt'ˮ t̃!s:$JјZF)U8>|Zgt R?ok,[ðy~dqw{Fosv~&sq6~ D(]ίoyɁq_ÚOv} /|# - _8( endstream endobj 1404 0 obj 2311 endobj 1405 0 obj [ 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R 1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R 1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R 1363 0 R 1364 0 R 1365 0 R 1366 0 R 1368 0 R 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1374 0 R 1375 0 R 1376 0 R 1377 0 R 1378 0 R 1379 0 R 1380 0 R 1381 0 R 1382 0 R 1383 0 R 1384 0 R 1385 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1401 0 R 1402 0 R ] endobj 1406 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1405 0 R /Contents 1403 0 R >> endobj 1407 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 707.175 166.788 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 1408 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 681.175 166.788 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 793 0 R /H /I >> endobj 1409 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 655.175 166.788 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1410 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 629.175 166.788 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 796 0 R /H /I >> endobj 1411 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1412 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 603.175 238.148 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1124 0 R /H /I >> endobj 1413 0 obj << /Type /Annot /Subtype /Link /Rect [ 143.668 549.623 154.788 558.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 799 0 R /H /I >> endobj 1414 0 obj << /Type /Annot /Subtype /Link /Rect [ 166.788 536.623 177.908 545.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 802 0 R /H /I >> endobj 1415 0 obj << /Type /Annot /Subtype /Link /Rect [ 242.358 523.623 253.478 532.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1416 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 497.623 166.788 506.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1417 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 471.623 221.468 480.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1418 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.678 458.623 147.238 467.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1419 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.798 445.623 213.358 454.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1262 0 R /H /I >> endobj 1420 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 53.858 454.735 null] >> endobj 1421 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.368 432.623 218.928 441.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1420 0 R /H /I >> endobj 1422 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 303.677 null] >> endobj 1423 0 obj << /Type /Annot /Subtype /Link /Rect [ 100.318 406.623 105.878 415.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1424 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.248 380.623 230.368 389.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1425 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 367.623 222.398 376.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 740 0 R /H /I >> endobj 1426 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 354.623 187.358 363.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 744 0 R /H /I >> endobj 1427 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 341.623 137.338 350.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 1428 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 328.623 149.558 337.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 1429 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 315.623 200.128 324.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1039 0 R /H /I >> endobj 1430 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 302.623 206.798 311.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1041 0 R /H /I >> endobj 1431 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 289.623 268.488 298.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1432 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 276.623 202.928 285.873 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1433 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.558 223.071 158.678 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1434 0 obj << /Type /Annot /Subtype /Link /Rect [ 115.308 210.071 126.428 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 1435 0 obj << /Type /Annot /Subtype /Link /Rect [ 186.458 197.071 197.578 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 976 0 R /H /I >> endobj 1436 0 obj << /Type /Annot /Subtype /Link /Rect [ 65.858 171.071 76.978 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 1437 0 obj << /Type /Annot /Subtype /Link /Rect [ 223.688 158.071 234.808 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 993 0 R /H /I >> endobj 1438 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.238 145.071 185.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1088 0 R /H /I >> endobj 1439 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.328 132.071 156.448 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1090 0 R /H /I >> endobj 1440 0 obj << /Type /Annot /Subtype /Link /Rect [ 125.888 106.071 137.008 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 949 0 R /H /I >> endobj 1441 0 obj << /Type /Annot /Subtype /Link /Rect [ 236.488 93.071 247.608 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1093 0 R /H /I >> endobj 1442 0 obj << /Type /Annot /Subtype /Link /Rect [ 132.558 80.071 143.678 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1095 0 R /H /I >> endobj 1443 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.268 67.071 240.388 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 922 0 R /H /I >> endobj 1444 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.032 707.175 418.152 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 991 0 R /H /I >> endobj 1445 0 obj << /Type /Annot /Subtype /Link /Rect [ 423.142 694.175 434.262 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1099 0 R /H /I >> endobj 1446 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.022 681.175 408.142 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1447 0 obj << /Type /Annot /Subtype /Link /Rect [ 480.942 668.175 492.062 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1103 0 R /H /I >> endobj 1448 0 obj << /Type /Annot /Subtype /Link /Rect [ 446.492 655.175 457.612 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1105 0 R /H /I >> endobj 1449 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.392 642.175 481.512 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1450 0 obj << /Type /Annot /Subtype /Link /Rect [ 416.462 629.175 427.582 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1113 0 R /H /I >> endobj 1451 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 603.175 318.112 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1452 0 obj << /Type /Annot /Subtype /Link /Rect [ 419.252 590.175 430.372 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1453 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 564.175 318.112 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1078 0 R /H /I >> endobj 1454 0 obj << /Type /Annot /Subtype /Link /Rect [ 467.062 551.175 478.182 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1455 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.352 538.175 396.472 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1122 0 R /H /I >> endobj 1456 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.032 538.175 413.152 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1124 0 R /H /I >> endobj 1457 0 obj << /Type /Annot /Subtype /Link /Rect [ 344.222 512.175 355.342 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1458 0 obj << /Type /Annot /Subtype /Link /Rect [ 494.842 499.175 505.962 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1459 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.132 486.175 444.252 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1460 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.252 473.175 415.372 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 1461 0 obj << /Type /Annot /Subtype /Link /Rect [ 448.172 460.175 459.292 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1462 0 obj << /Type /Annot /Subtype /Link /Rect [ 425.352 447.175 436.472 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1463 0 obj << /Type /Annot /Subtype /Link /Rect [ 417.022 434.175 428.142 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1136 0 R /H /I >> endobj 1464 0 obj << /Type /Annot /Subtype /Link /Rect [ 433.702 434.175 444.822 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1138 0 R /H /I >> endobj 1465 0 obj << /Type /Annot /Subtype /Link /Rect [ 306.992 408.175 318.112 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1466 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.252 395.175 425.372 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1467 0 obj << /Type /Annot /Subtype /Link /Rect [ 378.692 382.175 389.812 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1468 0 obj << /Type /Annot /Subtype /Link /Rect [ 390.352 369.175 401.472 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1469 0 obj << /Type /Annot /Subtype /Link /Rect [ 358.122 343.175 369.242 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1470 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 121.525 null] >> endobj 1471 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.242 317.175 375.362 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1470 0 R /H /I >> endobj 1472 0 obj << /Type /Annot /Subtype /Link /Rect [ 379.022 304.175 390.142 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1473 0 obj << /Type /Annot /Subtype /Link /Rect [ 414.602 291.175 425.722 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1474 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.032 278.175 415.152 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1172 0 R /H /I >> endobj 1475 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.572 265.175 375.692 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1189 0 R /H /I >> endobj 1476 0 obj << /Type /Annot /Subtype /Link /Rect [ 355.122 252.175 366.242 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1400 0 R /H /I >> endobj 1477 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 286.063 null] >> endobj 1478 0 obj << /Type /Annot /Subtype /Link /Rect [ 399.582 239.175 410.702 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1479 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 424.325 null] >> endobj 1480 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.582 226.175 406.702 235.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1479 0 R /H /I >> endobj 1481 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.722 213.175 402.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1482 0 obj << /Type /Action /S /GoTo /D [268 0 R /XYZ 87.874 466.883 null] >> endobj 1483 0 obj << /Type /Annot /Subtype /Link /Rect [ 362.012 187.175 373.132 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1482 0 R /H /I >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 161.175 347.012 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1420 0 R /H /I >> endobj 1485 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 135.175 347.012 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1486 0 obj << /Type /Annot /Subtype /Link /Rect [ 354.472 122.175 360.032 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1367 0 R /H /I >> endobj 1487 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 105.874 141.313 null] >> endobj 1488 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 96.175 347.012 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1487 0 R /H /I >> endobj 1489 0 obj << /Type /Annot /Subtype /Link /Rect [ 341.452 70.175 347.012 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1490 0 obj << /Length 1491 0 R /Filter /FlateDecode >> stream xZYoF~ׯGnA2oY#x;v`!^~ˊT-ό6}\xSp}Q_hş%<ŤxX_?BWsOD{ڨz??K]k??OsLyu~KA9:_f tPC/4uF˶-TmWM]z0ԩJSBjX.n %|1=͹5.'Dj[UVmT^5+u`H.YQ.c FwؙfZ]۬:;g%smb.]=t}^;-j ؽ+agȒj@nLM&;7я%dHc$@]N4rNpK9Zk A\f1m\=XXnz?#Y8 \0PBnP}lWj3)rY*h("Aaã/a_9(>X\VU^<(q[W:* z~~u*~^ĸ•`$GX5o~/qS' BTR&mIT]aFl0ݩTgi)vwMU W^3al q^tpL.\'*#ԡ4 {a ˢlԺ-wo@^ODO΂ޛ:Yó/c b6^.IcehVcvM]lQP@=DL:^ 2 9N#3 5]׶X ʺTzgжiwC Z3]ZOK A9O׍LaЫTrr 2xw/ƻSnnp0`<pPe@Y68GiN]bOH1c,b, 4]ߘl_@@jN:ݼՐ<)'xSձ5V~b$JHV_T%4@* 0>Y9N:Zٜ6A!+.vJ_4Iш2 xf&J;`=.BTd)8*:7uB&?u.@T)@㲔Ӵ?)8(:8n%~EC84|] '=LZua%/Ed`}ǥBP^ iY>;-mE©⻇h(+)齕#_h@a3| ԯQ_̹9+w/hF;0zF=<`iآ p FL`FN$6^έ&G]Y endstream endobj 1491 0 obj 2483 endobj 1492 0 obj [ 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1414 0 R 1415 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1421 0 R 1423 0 R 1424 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R 1476 0 R 1478 0 R 1480 0 R 1481 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R 1488 0 R 1489 0 R ] endobj 1493 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1492 0 R /Contents 1490 0 R >> endobj 1494 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 71.858 597.393 null] >> endobj 1495 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.334 694.175 139.894 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1494 0 R /H /I >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 655.175 255.484 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1126 0 R /H /I >> endobj 1497 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 629.175 255.484 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1498 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 590.175 180.244 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 564.175 188.804 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 742 0 R /H /I >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Rect [ 174.894 538.175 186.014 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1501 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.574 538.175 202.694 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 995 0 R /H /I >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 512.175 147.124 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1062 0 R /H /I >> endobj 1503 0 obj << /Type /Annot /Subtype /Link /Rect [ 145.214 473.175 156.334 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 1504 0 obj << /Type /Annot /Subtype /Link /Rect [ 134.324 447.175 145.444 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1168 0 R /H /I >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 421.175 166.904 430.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1506 0 obj << /Type /Annot /Subtype /Link /Rect [ 169.124 395.175 180.244 404.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1172 0 R /H /I >> endobj 1507 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 369.175 147.124 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1064 0 R /H /I >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 343.175 255.484 352.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1115 0 R /H /I >> endobj 1509 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 317.175 255.484 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1113 0 R /H /I >> endobj 1510 0 obj << /Type /Annot /Subtype /Link /Rect [ 199.024 304.175 210.144 313.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 750 0 R /H /I >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 240.484 278.175 251.604 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 265.175 208.034 274.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1513 0 obj << /Type /Annot /Subtype /Link /Rect [ 179.584 252.175 185.144 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1268 0 R /H /I >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Rect [ 213.474 239.175 224.594 248.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1181 0 R /H /I >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.124 213.175 168.244 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1470 0 R /H /I >> endobj 1516 0 obj << /Type /Annot /Subtype /Link /Rect [ 171.904 200.175 183.024 209.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Rect [ 207.484 187.175 218.604 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 931 0 R /H /I >> endobj 1518 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.914 174.175 208.034 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1172 0 R /H /I >> endobj 1519 0 obj << /Type /Annot /Subtype /Link /Rect [ 157.454 161.175 168.574 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1189 0 R /H /I >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Rect [ 148.004 148.175 159.124 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1400 0 R /H /I >> endobj 1521 0 obj << /Type /Annot /Subtype /Link /Rect [ 192.464 135.175 203.584 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1522 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 122.175 188.804 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1081 0 R /H /I >> endobj 1523 0 obj << /Type /Action /S /GoTo /D [60 0 R /XYZ 87.874 216.495 null] >> endobj 1524 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.924 109.175 233.484 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1523 0 R /H /I >> endobj 1525 0 obj << /Type /Annot /Subtype /Link /Rect [ 185.684 96.175 196.804 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1479 0 R /H /I >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 204.924 70.175 216.044 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1217 0 R /H /I >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.388 707.175 462.508 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 943 0 R /H /I >> endobj 1528 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.918 694.175 408.038 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 384.688 681.175 395.808 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1530 0 obj << /Type /Annot /Subtype /Link /Rect [ 408.028 668.175 419.148 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1223 0 R /H /I >> endobj 1531 0 obj << /Type /Annot /Subtype /Link /Rect [ 471.378 642.175 482.498 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 928 0 R /H /I >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.248 629.175 396.368 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1211 0 R /H /I >> endobj 1533 0 obj << /Type /Annot /Subtype /Link /Rect [ 436.938 616.175 448.058 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1232 0 R /H /I >> endobj 1534 0 obj << /Type /Annot /Subtype /Link /Rect [ 398.578 603.175 409.698 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 457.388 590.175 462.948 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1268 0 R /H /I >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Rect [ 410.468 564.175 421.588 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1081 0 R /H /I >> endobj 1537 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 509.071 496.618 518.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 954 0 R /H /I >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 470.071 441.938 479.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 786 0 R /H /I >> endobj 1539 0 obj << /Type /Action /S /GoTo /D [236 0 R /XYZ 53.858 327.625 null] >> endobj 1540 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.708 444.071 408.828 453.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1539 0 R /H /I >> endobj 1541 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 477.425 null] >> endobj 1542 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 418.071 447.708 427.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1541 0 R /H /I >> endobj 1543 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 66.638 513.425 null] >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.148 392.071 447.708 401.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1543 0 R /H /I >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Rect [ 403.818 366.071 409.378 375.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 963 0 R /H /I >> endobj 1546 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.928 353.071 414.048 362.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1235 0 R /H /I >> endobj 1547 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 53.858 657.698 null] >> endobj 1548 0 obj << /Type /Annot /Subtype /Link /Rect [ 407.148 340.071 418.268 349.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1547 0 R /H /I >> endobj 1549 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 594.003 null] >> endobj 1550 0 obj << /Type /Annot /Subtype /Link /Rect [ 397.148 327.071 408.268 336.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1549 0 R /H /I >> endobj 1551 0 obj << /Type /Action /S /GoTo /D [259 0 R /XYZ 53.858 169.425 null] >> endobj 1552 0 obj << /Type /Annot /Subtype /Link /Rect [ 396.028 314.071 407.148 323.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1551 0 R /H /I >> endobj 1553 0 obj << /Type /Action /S /GoTo /D [151 0 R /XYZ 87.874 299.61 null] >> endobj 1554 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.478 301.071 441.598 310.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1553 0 R /H /I >> endobj 1555 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 275.071 397.708 284.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 504.178 236.071 515.298 245.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1027 0 R /H /I >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 210.071 496.618 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1103 0 R /H /I >> endobj 1558 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 184.071 496.618 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.178 184.071 513.298 193.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1117 0 R /H /I >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.818 145.071 441.938 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 781 0 R /H /I >> endobj 1561 0 obj << /Type /Annot /Subtype /Link /Rect [ 392.368 132.071 397.928 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1258 0 R /H /I >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 386.588 106.071 397.708 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1193 0 R /H /I >> endobj 1563 0 obj << /Type /Annot /Subtype /Link /Rect [ 485.498 80.071 496.618 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1132 0 R /H /I >> endobj 1564 0 obj << /Length 1565 0 R /Filter /FlateDecode >> stream xZKsFWѮy`5);Mq*Ce`0"$G9$qU$=/YE[~|D%yT'V?&ʤRD[tV"~#FͥH?ᗭy.a˯tϭ@j>->R_&/Q Зu]1O&A!µ+\H-/rI٦`S&qq+Kԃ OphmߵWcFIV(1BU? F>K}\'fIL2BP[bes d;L}X~-#1 Cs0\ 84`/&"3(E岤P1 8Ljye4(*(ccC$a[9E]$B î=H]38b_V_zrV&.g.7ä.$c[E뚊<M*υ7_+1 o Q!opVa&Vnߵl:6A=zM:Of CRF)fFo>Tp 6 #jw{Jr)kP!VuN<) 'DG-0cD{QSiCc6v_Љ~Pi$`,IeQ:c!w_dcQLwbbBK)U=z$ñD>&˩L~'8ubh2]XL@xt*q^&lvq!ҸCn,ǝ熐 {2\n=:/A4( L&+j_%ђV=ظ+IaH5.CF)y3rLC'bPCQ:OLt4Eb00B}KF1a WoH$$39Z4MtT%Re $|XR$SGiyLsM12$.*̤u?=S} ;7OՐU۪2B[U5/LڦɈC)ɏk:tֶ@ӥL+)P55չ%o L@w!S.*=F*bnA6{)kU 3ؿ!.F*jj91Cv}i&LDH-cXfڳY OZTLtkG>@~xf:i ke8Jz**_p|bv>~)%J:(y550ݾ~6't:L; - /^WbQTK:M$FN 13!M2KFdX{/iLg8}zJ zx|6}*J> endobj 1568 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 707.175 122.558 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1195 0 R /H /I >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 681.175 221.468 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1101 0 R /H /I >> endobj 1570 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 655.175 221.468 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 101.988 629.175 113.108 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1066 0 R /H /I >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 603.175 221.468 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1134 0 R /H /I >> endobj 1573 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 577.175 221.468 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1136 0 R /H /I >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Rect [ 227.028 577.175 238.148 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1138 0 R /H /I >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 538.175 166.788 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1576 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.668 499.175 166.788 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 756 0 R /H /I >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 103.328 486.175 114.448 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1058 0 R /H /I >> endobj 1578 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 53.858 546.825 null] >> endobj 1579 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.008 486.175 131.128 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1578 0 R /H /I >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 460.175 221.468 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 434.175 221.468 443.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1120 0 R /H /I >> endobj 1582 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 408.175 221.468 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 918 0 R /H /I >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 382.175 221.468 391.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 978 0 R /H /I >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Rect [ 210.348 356.175 221.468 365.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1142 0 R /H /I >> endobj 1585 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 317.175 240.148 326.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1023 0 R /H /I >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 229.028 278.175 240.148 287.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Rect [ 111.438 223.071 122.558 232.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1198 0 R /H /I >> endobj 1588 0 obj << /Type /Annot /Subtype /Link /Rect [ 104.428 210.071 109.988 219.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 748 0 R /H /I >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.428 197.071 104.988 206.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 987 0 R /H /I >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.438 171.071 187.558 180.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1033 0 R /H /I >> endobj 1591 0 obj << /Type /Annot /Subtype /Link /Rect [ 211.278 158.071 222.398 167.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 740 0 R /H /I >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Rect [ 176.238 145.071 187.358 154.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 744 0 R /H /I >> endobj 1593 0 obj << /Type /Annot /Subtype /Link /Rect [ 126.218 132.071 137.338 141.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 951 0 R /H /I >> endobj 1594 0 obj << /Type /Annot /Subtype /Link /Rect [ 138.438 119.071 149.558 128.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 997 0 R /H /I >> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.008 106.071 200.128 115.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1039 0 R /H /I >> endobj 1596 0 obj << /Type /Annot /Subtype /Link /Rect [ 195.678 93.071 206.798 102.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1041 0 R /H /I >> endobj 1597 0 obj << /Type /Annot /Subtype /Link /Rect [ 257.368 80.071 268.488 89.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1043 0 R /H /I >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 191.808 67.071 202.928 76.321 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1045 0 R /H /I >> endobj 1599 0 obj << /Type /Action /S /GoTo /D [69 0 R /XYZ 87.874 687.1 null] >> endobj 1600 0 obj << /Type /Annot /Subtype /Link /Rect [ 472.822 707.175 483.942 716.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1599 0 R /H /I >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 364.792 694.175 375.912 703.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 750 0 R /H /I >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Rect [ 363.692 681.175 374.812 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1047 0 R /H /I >> endobj 1603 0 obj << /Type /Annot /Subtype /Link /Rect [ 402.602 668.175 413.722 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1074 0 R /H /I >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 404.802 655.175 415.922 664.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1479 0 R /H /I >> endobj 1605 0 obj << /Type /Annot /Subtype /Link /Rect [ 409.242 629.175 420.362 638.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1006 0 R /H /I >> endobj 1606 0 obj << /Type /Annot /Subtype /Link /Rect [ 490.182 616.175 501.302 625.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 502.952 603.175 514.072 612.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1009 0 R /H /I >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Rect [ 491.812 590.175 502.932 599.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1609 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.352 577.175 383.472 586.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1013 0 R /H /I >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.042 564.175 480.162 573.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1011 0 R /H /I >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Rect [ 382.342 551.175 393.462 560.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1016 0 R /H /I >> endobj 1612 0 obj << /Type /Annot /Subtype /Link /Rect [ 432.942 538.175 444.062 547.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1018 0 R /H /I >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 401.802 525.175 412.922 534.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 752 0 R /H /I >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Rect [ 395.682 512.175 406.802 521.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1021 0 R /H /I >> endobj 1615 0 obj << /Type /Annot /Subtype /Link /Rect [ 444.032 499.175 455.152 508.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1023 0 R /H /I >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 429.042 486.175 440.162 495.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1025 0 R /H /I >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Rect [ 487.942 473.175 499.062 482.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1027 0 R /H /I >> endobj 1618 0 obj << /Type /Annot /Subtype /Link /Rect [ 450.162 460.175 461.282 469.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1029 0 R /H /I >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.652 447.175 481.772 456.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Rect [ 352.332 408.175 363.452 417.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 811 0 R /H /I >> endobj 1621 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 369.175 481.282 378.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 330.175 481.282 339.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1025 0 R /H /I >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 291.175 481.282 300.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1027 0 R /H /I >> endobj 1624 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 252.175 481.282 261.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1029 0 R /H /I >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 470.162 213.175 481.282 222.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1001 0 R /H /I >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Rect [ 369.252 187.175 374.812 196.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1367 0 R /H /I >> endobj 1627 0 obj << /Type /Annot /Subtype /Link /Rect [ 430.922 174.175 436.482 183.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 469.282 161.175 474.842 170.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1420 0 R /H /I >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Rect [ 331.452 148.175 337.012 157.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1630 0 obj << /Type /Annot /Subtype /Link /Rect [ 347.572 135.175 353.132 144.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1487 0 R /H /I >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.902 122.175 351.462 131.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1422 0 R /H /I >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Rect [ 345.342 109.175 350.902 118.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1494 0 R /H /I >> endobj 1633 0 obj << /Type /Annot /Subtype /Link /Rect [ 468.942 96.175 480.062 105.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1081 0 R /H /I >> endobj 1634 0 obj << /Type /Annot /Subtype /Link /Rect [ 451.482 70.175 462.602 79.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 989 0 R /H /I >> endobj 1635 0 obj << /Length 1636 0 R /Filter /FlateDecode >> stream xZYF~ׯ$I[vz80,# $yH- 1$g<>դ4W` 梺*qLU&VQSH#t$T̹b"O'/|qN {^p⏿k`>.>?-7sMka`ˊzm[wv]ߠ/>2A_)8^%P+_t"B;U_4uMX'NaH%`1gRkٰwA PtWmi;sj[lB(`3H8Z[كu-o:uUQo뉏4?  K`q!"<{Fb)9?zúlR ^jL,4Y&MzpI"b=Ƈx&˲T$~͡ețA+pAUSCN6#btlrl\Sܹ9Ki{\ɚֺB(e _D$2qNKϻYa½ֺfe9,jKw]h;`H'z;dmS=,RE;ʕwe.4 =V{!*/Kuy{Om^/B1&ll0y PUj?5<BkMAy,X,E 6CmjZI[$ oaJG{Pa_#, ۻbҽ7,! )]EskYUtUޯ}%`:bSX(4 6wlæUǬs@^TYN ru=֔#k5 7L>*)0h0t.4Vk_)Fk:Nqqs\ e;LcHOhH2f{aod*Xz@#&gvSal(P:ɈmhhKAmi%t ^cj8 8L;nr{M` ;$a5: Vۭ[h-mG! DIXC&́4mTM%#c$a?OJ`ժi&J%ov7HgIj]<qt K `կ?-/+kז%N䐩12F8ۏwyZT $JA* zBe\= fEB]K%WqJ2cwlpNzePIc^SN sh>lNYzI0$Q4|5[]"\qwRޤ.jBGF{RS[ԂCfSҐZ7"U@nA&aF44þE=0zcĨވn`XXBGPQ?e.<"yc0rF$EQYܭ6%$ܢ7b71;T78ńtI~8iff[6w B+bic?gpȩPû3Gy2#(wPC6# @ܪaR?.Ns͔S^#"G`Ni~LgSF#E>}Ǭzp|u9mY1":P,b}8(K׬L΄icTM?#|Y²w t) HXF :-TOD]'B#"D׉HKi]E 4t84smujkJ[F8jS):+ U_uFİa|djA:]%>K{CxpC]}/ٴ̝?MQ0Z9wK;@ޟ;s|&I62u-RӄEO(~)R( #.nsr0<4؇"P3ߙf&vІ硇71}.8HT:| P T8BA_n;y0S(1i%zeHL_}g(/b2Mޓ:53U`w\Z%Tgih endstream endobj 1636 0 obj 2211 endobj 1637 0 obj [ 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R ] endobj 1638 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1637 0 R /Contents 1635 0 R >> endobj 1639 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 681.175 200.804 690.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 746 0 R /H /I >> endobj 1640 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 87.874 687.1 null] >> endobj 1641 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.344 668.175 177.904 677.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1640 0 R /H /I >> endobj 1642 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 642.175 255.484 651.425 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1144 0 R /H /I >> endobj 1643 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.684 587.455 188.804 596.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 754 0 R /H /I >> endobj 1644 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.044 548.455 274.164 557.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1031 0 R /H /I >> endobj 1645 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 509.455 166.904 518.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1232 0 R /H /I >> endobj 1646 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 470.455 166.904 479.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1647 0 obj << /Type /Annot /Subtype /Link /Rect [ 130.444 444.455 141.564 453.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1648 0 obj << /Type /Annot /Subtype /Link /Rect [ 147.454 418.455 158.574 427.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 720 0 R /H /I >> endobj 1649 0 obj << /Type /Annot /Subtype /Link /Rect [ 149.114 405.455 160.234 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 722 0 R /H /I >> endobj 1650 0 obj << /Type /Annot /Subtype /Link /Rect [ 165.794 405.455 176.914 414.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 724 0 R /H /I >> endobj 1651 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 366.455 200.804 375.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 786 0 R /H /I >> endobj 1652 0 obj << /Type /Annot /Subtype /Link /Rect [ 136.004 340.455 147.124 349.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1070 0 R /H /I >> endobj 1653 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 301.455 200.804 310.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 791 0 R /H /I >> endobj 1654 0 obj << /Type /Annot /Subtype /Link /Rect [ 189.684 262.455 200.804 271.705 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 766 0 R /H /I >> endobj 1655 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.784 194.735 166.904 203.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1223 0 R /H /I >> endobj 1656 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 155.735 255.484 164.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1128 0 R /H /I >> endobj 1657 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.904 142.735 189.024 151.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1072 0 R /H /I >> endobj 1658 0 obj << /Type /Annot /Subtype /Link /Rect [ 244.364 116.735 255.484 125.985 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1107 0 R /H /I >> endobj 1659 0 obj << /Length 1660 0 R /Filter /FlateDecode >> stream xXKo8WP |uf񶇦XKJPrbdNC"o8߼8AC*vuFP!Bri&:}E3DxF,Ds J,,?ܣnOau-=5MGVg~ ~}4&sA4 pɼHLWmbZ'ʰv"hբO 6}=}.?"J-f4mu`P8O;w1 "T"sbyӮ6ڡ O(,ҟȋ2;<..cI?ڡ~}0 !g\\pt_L̓{bhQ>#LJPO^!\Z `tL\) mЉNNev dlW6FvCVof ~d3KgZ u鐱q\FuJ(D$]lqNAX v,DyRP`(Gl(Qi6Hp#$BQ1 Q⊤"hP'nn? I4S] 뮴7(u/k=@'f]\M!13I#M$B=w& =]I۽wXĩ!p!Q՞9/JY'F <`<" Ե oE> i=#rHb==$[7Um5աI73L}EBIml=h`4꡷JDDľ[>a}=?ozOo/4Xܯ:-L%|}u6PZFXZu@2qrg,Snο7 Je endstream endobj 1660 0 obj 1172 endobj 1661 0 obj [ 1639 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R ] endobj 1662 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1661 0 R /Contents 1659 0 R >> endobj 1663 0 obj << /Length 1664 0 R /Filter /FlateDecode >> stream xT=o0WX;;;+ RԪt(HL}8A*l]lt̓zQ FvY']CcE FdwN)LQ4L~@ 덢_ !Qy՘SGVw~k3D?&^$f5>D?2mcض^:+Fai: jH2?[XDx~Qd"d;\?0`|eҞ˶VYu􍰓f b endstream endobj 1664 0 obj 262 endobj 1665 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1663 0 R >> endobj 1666 0 obj << /Type /Action /S /GoTo /D [57 0 R /XYZ 53.858 413.3 null] >> endobj 1667 0 obj << /Type /Action /S /GoTo /D [85 0 R /XYZ 53.858 445.895 null] >> endobj 1668 0 obj << /Type /Action /S /GoTo /D [109 0 R /XYZ 53.858 532.681 null] >> endobj 1669 0 obj << /Type /Action /S /GoTo /D [225 0 R /XYZ 53.858 417.536 null] >> endobj 1670 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 53.858 184.891 null] >> endobj 1671 0 obj << /Type /Action /S /GoTo /D [457 0 R /XYZ 87.874 134.458 null] >> endobj 1672 0 obj << /Type /Action /S /GoTo /D [529 0 R /XYZ 87.874 115.398 null] >> endobj 1673 0 obj << /Type /Action /S /GoTo /D [539 0 R /XYZ 87.874 629.193 null] >> endobj 1674 0 obj << /Type /Action /S /GoTo /D [596 0 R /XYZ 53.858 437.085 null] >> endobj 1675 0 obj << /Type /Action /S /GoTo /D [646 0 R /XYZ 87.874 280.227 null] >> endobj 1676 0 obj << /Type /Action /S /GoTo /D [9 0 R /XYZ 87.874 718.3 null] >> endobj 1677 0 obj << /Title (SystemTap Beginners Guide) /Parent 1678 0 R /Next 1679 0 R /A 1676 0 R >> endobj 1680 0 obj << /Type /Action /S /GoTo /D [400 0 R /XYZ 87.874 718.3 null] >> endobj 1679 0 obj << /Title (Table of Contents) /Parent 1678 0 R /Prev 1677 0 R /Next 1681 0 R /A 1680 0 R >> endobj 1681 0 obj << /Title (Preface) /Parent 1678 0 R /Prev 1679 0 R /Next 1682 0 R /First 1683 0 R /Last 1684 0 R /Count -5 /A 269 0 R >> endobj 1683 0 obj << /Title /Parent 1681 0 R /Next 1684 0 R /First 1685 0 R /Last 1686 0 R /Count -3 /A 272 0 R >> endobj 1685 0 obj << /Title /Parent 1683 0 R /Next 1687 0 R /A 275 0 R >> endobj 1687 0 obj << /Title /Parent 1683 0 R /Prev 1685 0 R /Next 1686 0 R /A 278 0 R >> endobj 1686 0 obj << /Title /Parent 1683 0 R /Prev 1687 0 R /A 281 0 R >> endobj 1684 0 obj << /Title /Parent 1681 0 R /Prev 1683 0 R /A 284 0 R >> endobj 1682 0 obj << /Title /Parent 1678 0 R /Prev 1681 0 R /Next 1688 0 R /First 1689 0 R /Last 1690 0 R /Count -3 /A 288 0 R >> endobj 1689 0 obj << /Title /Parent 1682 0 R /Next 1691 0 R /A 291 0 R >> endobj 1691 0 obj << /Title /Parent 1682 0 R /Prev 1689 0 R /Next 1690 0 R /A 294 0 R >> endobj 1690 0 obj << /Title /Parent 1682 0 R /Prev 1691 0 R /A 297 0 R >> endobj 1688 0 obj << /Title /Parent 1678 0 R /Prev 1682 0 R /Next 1692 0 R /First 1693 0 R /Last 1694 0 R /Count -9 /A 299 0 R >> endobj 1693 0 obj << /Title /Parent 1688 0 R /Next 1695 0 R /First 1696 0 R /Last 1697 0 R /Count -3 /A 74 0 R >> endobj 1696 0 obj << /Title /Parent 1693 0 R /Next 1698 0 R /A 48 0 R >> endobj 1698 0 obj << /Title /Parent 1693 0 R /Prev 1696 0 R /Next 1697 0 R /A 51 0 R >> endobj 1697 0 obj << /Title /Parent 1693 0 R /Prev 1698 0 R /A 308 0 R >> endobj 1695 0 obj << /Title /Parent 1688 0 R /Prev 1693 0 R /Next 1694 0 R /A 122 0 R >> endobj 1694 0 obj << /Title /Parent 1688 0 R /Prev 1695 0 R /First 1699 0 R /Last 1699 0 R /Count -3 /A 313 0 R >> endobj 1699 0 obj << /Title /Parent 1694 0 R /First 1700 0 R /Last 1701 0 R /Count -2 /A 117 0 R >> endobj 1700 0 obj << /Title /Parent 1699 0 R /Next 1701 0 R /A 318 0 R >> endobj 1701 0 obj << /Title /Parent 1699 0 R /Prev 1700 0 R /A 321 0 R >> endobj 1692 0 obj << /Title /Parent 1678 0 R /Prev 1688 0 R /Next 1702 0 R /First 1703 0 R /Last 1704 0 R /Count -22 /A 80 0 R >> endobj 1703 0 obj << /Title /Parent 1692 0 R /Next 1705 0 R /A 72 0 R >> endobj 1705 0 obj << /Title /Parent 1692 0 R /Prev 1703 0 R /Next 1706 0 R /First 1707 0 R /Last 1708 0 R /Count -2 /A 328 0 R >> endobj 1707 0 obj << /Title /Parent 1705 0 R /Next 1708 0 R /A 241 0 R >> endobj 1708 0 obj << /Title /Parent 1705 0 R /Prev 1707 0 R /A 333 0 R >> endobj 1706 0 obj << /Title /Parent 1692 0 R /Prev 1705 0 R /Next 1709 0 R /First 1710 0 R /Last 1711 0 R /Count -7 /A 336 0 R >> endobj 1710 0 obj << /Title /Parent 1706 0 R /Next 1712 0 R /A 339 0 R >> endobj 1712 0 obj << /Title /Parent 1706 0 R /Prev 1710 0 R /Next 1713 0 R /First 1714 0 R /Last 1715 0 R /Count -3 /A 253 0 R >> endobj 1714 0 obj << /Title /Parent 1712 0 R /Next 1716 0 R /A 344 0 R >> endobj 1716 0 obj << /Title /Parent 1712 0 R /Prev 1714 0 R /Next 1715 0 R /A 347 0 R >> endobj 1715 0 obj << /Title /Parent 1712 0 R /Prev 1716 0 R /A 350 0 R >> endobj 1713 0 obj << /Title /Parent 1706 0 R /Prev 1712 0 R /Next 1711 0 R /A 353 0 R >> endobj 1711 0 obj << /Title /Parent 1706 0 R /Prev 1713 0 R /A 356 0 R >> endobj 1709 0 obj << /Title /Parent 1692 0 R /Prev 1706 0 R /Next 1717 0 R /A 360 0 R >> endobj 1717 0 obj << /Title /Parent 1692 0 R /Prev 1709 0 R /Next 1704 0 R /First 1718 0 R /Last 1719 0 R /Count -7 /A 363 0 R >> endobj 1718 0 obj << /Title /Parent 1717 0 R /Next 1720 0 R /A 178 0 R >> endobj 1720 0 obj << /Title /Parent 1717 0 R /Prev 1718 0 R /Next 1721 0 R /A 367 0 R >> endobj 1721 0 obj << /Title /Parent 1717 0 R /Prev 1720 0 R /Next 1722 0 R /A 370 0 R >> endobj 1722 0 obj << /Title /Parent 1717 0 R /Prev 1721 0 R /Next 1723 0 R /A 200 0 R >> endobj 1723 0 obj << /Title /Parent 1717 0 R /Prev 1722 0 R /Next 1724 0 R /A 213 0 R >> endobj 1724 0 obj << /Title /Parent 1717 0 R /Prev 1723 0 R /Next 1719 0 R /A 377 0 R >> endobj 1719 0 obj << /Title /Parent 1717 0 R /Prev 1724 0 R /A 380 0 R >> endobj 1704 0 obj << /Title /Parent 1692 0 R /Prev 1717 0 R /A 383 0 R >> endobj 1702 0 obj << /Title /Parent 1678 0 R /Prev 1692 0 R /Next 1725 0 R /First 1726 0 R /Last 1727 0 R /Count -3 /A 386 0 R >> endobj 1726 0 obj << /Title /Parent 1702 0 R /Next 1728 0 R /A 389 0 R >> endobj 1728 0 obj << /Title /Parent 1702 0 R /Prev 1726 0 R /Next 1727 0 R /A 260 0 R >> endobj 1727 0 obj << /Title /Parent 1702 0 R /Prev 1728 0 R /A 394 0 R >> endobj 1725 0 obj << /Title /Parent 1678 0 R /Prev 1702 0 R /Next 1729 0 R /First 1730 0 R /Last 1731 0 R /Count -22 /A 411 0 R >> endobj 1730 0 obj << /Title /Parent 1725 0 R /Next 1732 0 R /First 1733 0 R /Last 1734 0 R /Count -5 /A 819 0 R >> endobj 1733 0 obj << /Title /Parent 1730 0 R /Next 1735 0 R /A 822 0 R >> endobj 1735 0 obj << /Title /Parent 1730 0 R /Prev 1733 0 R /Next 1736 0 R /A 825 0 R >> endobj 1736 0 obj << /Title /Parent 1730 0 R /Prev 1735 0 R /Next 1737 0 R /A 828 0 R >> endobj 1737 0 obj << /Title /Parent 1730 0 R /Prev 1736 0 R /Next 1734 0 R /A 831 0 R >> endobj 1734 0 obj << /Title /Parent 1730 0 R /Prev 1737 0 R /A 834 0 R >> endobj 1732 0 obj << /Title /Parent 1725 0 R /Prev 1730 0 R /Next 1738 0 R /First 1739 0 R /Last 1740 0 R /Count -7 /A 837 0 R >> endobj 1739 0 obj << /Title /Parent 1732 0 R /Next 1741 0 R /A 510 0 R >> endobj 1741 0 obj << /Title /Parent 1732 0 R /Prev 1739 0 R /Next 1742 0 R /A 842 0 R >> endobj 1742 0 obj << /Title /Parent 1732 0 R /Prev 1741 0 R /Next 1743 0 R /A 845 0 R >> endobj 1743 0 obj << /Title /Parent 1732 0 R /Prev 1742 0 R /Next 1744 0 R /A 848 0 R >> endobj 1744 0 obj << /Title /Parent 1732 0 R /Prev 1743 0 R /Next 1745 0 R /A 550 0 R >> endobj 1745 0 obj << /Title /Parent 1732 0 R /Prev 1744 0 R /Next 1740 0 R /A 853 0 R >> endobj 1740 0 obj << /Title /Parent 1732 0 R /Prev 1745 0 R /A 856 0 R >> endobj 1738 0 obj << /Title /Parent 1725 0 R /Prev 1732 0 R /Next 1731 0 R /First 1746 0 R /Last 1747 0 R /Count -6 /A 859 0 R >> endobj 1746 0 obj << /Title /Parent 1738 0 R /Next 1748 0 R /A 862 0 R >> endobj 1748 0 obj << /Title /Parent 1738 0 R /Prev 1746 0 R /Next 1749 0 R /A 865 0 R >> endobj 1749 0 obj << /Title /Parent 1738 0 R /Prev 1748 0 R /Next 1750 0 R /A 868 0 R >> endobj 1750 0 obj << /Title /Parent 1738 0 R /Prev 1749 0 R /Next 1751 0 R /A 625 0 R >> endobj 1751 0 obj << /Title /Parent 1738 0 R /Prev 1750 0 R /Next 1747 0 R /A 624 0 R >> endobj 1747 0 obj << /Title /Parent 1738 0 R /Prev 1751 0 R /A 875 0 R >> endobj 1731 0 obj << /Title /Parent 1725 0 R /Prev 1738 0 R /A 878 0 R >> endobj 1729 0 obj << /Title /Parent 1678 0 R /Prev 1725 0 R /Next 1752 0 R /First 1753 0 R /Last 1754 0 R /Count -2 /A 676 0 R >> endobj 1753 0 obj << /Title /Parent 1729 0 R /Next 1754 0 R /A 883 0 R >> endobj 1754 0 obj << /Title /Parent 1729 0 R /Prev 1753 0 R /A 886 0 R >> endobj 1752 0 obj << /Title /Parent 1678 0 R /Prev 1729 0 R /Next 1755 0 R /A 889 0 R >> endobj 1755 0 obj << /Title /Parent 1678 0 R /Prev 1752 0 R /Next 1756 0 R /A 892 0 R >> endobj 1756 0 obj << /Title (Index) /Parent 1678 0 R /Prev 1755 0 R /A 895 0 R >> endobj 1757 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 1758 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 1759 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1760 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Bold /Encoding /WinAnsiEncoding >> endobj 1761 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Symbol /ToUnicode 1762 0 R >> endobj 1762 0 obj << /Length 1763 0 R /Filter /FlateDecode >> stream x]Vn6+t#RE |HvN>OgX#>.fu5Y|N߷K~׮ۖky3+|=%w}뵾<. *ou;xnݧ_%_R߶R}#ԗ\^bu){\/; Dz'巌?YPC\<׻/}}{I-#_;6 [G'³^pT8). W (F7JQo~(F7JQo~[v?Cgv<2.x&NQ.qDžx 9'q̑8jX0-y$N =h6Ye-9$}BS\/U8Љ|Eܱ ~ztԓ$zztGúIpe4=A3zYZQ Ϭe-k%g_CV^y+o{m핷W^y+o{m핷W?(A7D;&;Ȃj,Ƃj,Ƃj,Ƃj,Ƃj,e#,rA `(O0DӘ raA'9b c$ưI.Xg:bm:"?b.L&[b־I~@YSf&ubd36 .C؟<'sp#(zK֣a%z<3!h?ŐkΕ<rCPO-c$7C[ȹ*u*u z9Ў7~XhhDo&ƅee8'#r cV<Xi(3 5p9ka|#^KFNǀfFdO=tBG?w^p8r$p8阑.3Rҙ 3Hg. dĞ!=bySOXI<_r'L=OhXG!laҊF+ObI ƀ61ϔ^mP#ԏzYJ endstream endobj 1763 0 obj 1047 endobj 1764 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 1765 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding >> endobj 1766 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 1767 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding >> endobj 1768 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 1769 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (SystemTap_Beginners_Guide-Preface)] /Names [(SystemTap_Beginners_Guide-Preface) 269 0 R] >> endobj 1770 0 obj << /Limits [(appe-Publican-Revision_History) (appe-Publican-Revision_History)] /Names [(appe-Publican-Revision_History) 892 0 R] >> endobj 1771 0 obj << /Limits [(arrayoperators) (arrayoperators)] /Names [(arrayoperators) 363 0 R] >> endobj 1772 0 obj << /Limits [(arrayops-aggregates) (arrayops-aggregates)] /Names [(arrayops-aggregates) 380 0 R] >> endobj 1773 0 obj << /Limits [(arrayops-assignvalue) (arrayops-assignvalue)] /Names [(arrayops-assignvalue) 178 0 R] >> endobj 1774 0 obj << /Limits [(arrayops-conditionals) (arrayops-conditionals)] /Names [(arrayops-conditionals) 377 0 R] >> endobj 1775 0 obj << /Limits [(arrayops-deleting) (arrayops-deleting)] /Names [(arrayops-deleting) 213 0 R] >> endobj 1776 0 obj << /Limits [(arrayops-foreach) (arrayops-foreach)] /Names [(arrayops-foreach) 200 0 R] >> endobj 1777 0 obj << /Limits [(arrayops-increment) (arrayops-increment)] /Names [(arrayops-increment) 370 0 R] >> endobj 1778 0 obj << /Limits [(arrayops-readvalues) (arrayops-readvalues)] /Names [(arrayops-readvalues) 367 0 R] >> endobj 1779 0 obj << /Limits [(arrayreadingvaluesfrom) (arrayreadingvaluesfrom)] /Names [(arrayreadingvaluesfrom) 180 0 R] >> endobj 1780 0 obj << /Limits [(arrays-timestampprocessname) (arrays-timestampprocessname)] /Names [(arrays-timestampprocessname) 173 0 R] >> endobj 1781 0 obj << /Limits [(arraysimplestexample) (arraysimplestexample)] /Names [(arraysimplestexample) 172 0 R] >> endobj 1782 0 obj << /Limits [(associativearrays) (associativearrays)] /Names [(associativearrays) 360 0 R] >> endobj 1783 0 obj << /Limits [(available) (available)] /Names [(available) 152 0 R] >> endobj 1784 0 obj << /Limits [(casting) (casting)] /Names [(casting) 150 0 R] >> endobj 1785 0 obj << /Limits [(commandlineargs) (commandlineargs)] /Names [(commandlineargs) 164 0 R] >> endobj 1786 0 obj << /Limits [(commandlineargssect) (commandlineargssect)] /Names [(commandlineargssect) 356 0 R] >> endobj 1787 0 obj << /Limits [(countcalls) (countcalls)] /Names [(countcalls) 572 0 R] >> endobj 1788 0 obj << /Limits [(countcallsoutput) (countcallsoutput)] /Names [(countcallsoutput) 583 0 R] >> endobj 1789 0 obj << /Limits [(countcallssect) (countcallssect)] /Names [(countcallssect) 862 0 R] >> endobj 1790 0 obj << /Limits [(cross-compiling) (cross-compiling)] /Names [(cross-compiling) 122 0 R] >> endobj 1791 0 obj << /Limits [(disktop) (disktop)] /Names [(disktop) 510 0 R] >> endobj 1792 0 obj << /Limits [(disktopoutput) (disktopoutput)] /Names [(disktopoutput) 489 0 R] >> endobj 1793 0 obj << /Limits [(dropwatch) (dropwatch)] /Names [(dropwatch) 464 0 R] >> endobj 1794 0 obj << /Limits [(dropwatchoutput) (dropwatchoutput)] /Names [(dropwatchoutput) 471 0 R] >> endobj 1795 0 obj << /Limits [(dropwatchsect) (dropwatchsect)] /Names [(dropwatchsect) 834 0 R] >> endobj 1796 0 obj << /Limits [(errors) (errors)] /Names [(errors) 676 0 R] >> endobj 1797 0 obj << /Limits [(eventsmodules) (eventsmodules)] /Names [(eventsmodules) 86 0 R] >> endobj 1798 0 obj << /Limits [(file-flight-recorder) (file-flight-recorder)] /Names [(file-flight-recorder) 321 0 R] >> endobj 1799 0 obj << /Limits [(flight-recorder) (flight-recorder)] /Names [(flight-recorder) 117 0 R] >> endobj 1800 0 obj << /Limits [(futexcontention) (futexcontention)] /Names [(futexcontention) 655 0 R] >> endobj 1801 0 obj << /Limits [(futexcontentionoutput) (futexcontentionoutput)] /Names [(futexcontentionoutput) 661 0 R] >> endobj 1802 0 obj << /Limits [(futexcontentionsect) (futexcontentionsect)] /Names [(futexcontentionsect) 878 0 R] >> endobj 1803 0 obj << /Limits [(goals) (goals)] /Names [(goals) 291 0 R] >> endobj 1804 0 obj << /Limits [(handlerconditionalstatements) (handlerconditionalstatements)] /Names [(handlerconditionalstatements) 353 0 R] >> endobj 1805 0 obj << /Limits [(helloworld) (helloworld)] /Names [(helloworld) 102 0 R] >> endobj 1806 0 obj << /Limits [(inodewatch) (inodewatch)] /Names [(inodewatch) 538 0 R] >> endobj 1807 0 obj << /Limits [(inodewatch2) (inodewatch2)] /Names [(inodewatch2) 552 0 R] >> endobj 1808 0 obj << /Limits [(inodewatch2output) (inodewatch2output)] /Names [(inodewatch2output) 546 0 R] >> endobj 1809 0 obj << /Limits [(inodewatch2sect) (inodewatch2sect)] /Names [(inodewatch2sect) 853 0 R] >> endobj 1810 0 obj << /Limits [(inodewatchoutput) (inodewatchoutput)] /Names [(inodewatchoutput) 544 0 R] >> endobj 1811 0 obj << /Limits [(inodewatchsect) (inodewatchsect)] /Names [(inodewatchsect) 550 0 R] >> endobj 1812 0 obj << /Limits [(install-kinfo) (install-kinfo)] /Names [(install-kinfo) 51 0 R] >> endobj 1813 0 obj << /Limits [(installproper) (installproper)] /Names [(installproper) 48 0 R] >> endobj 1814 0 obj << /Limits [(intro-systemtap-limitations) (intro-systemtap-limitations)] /Names [(intro-systemtap-limitations) 297 0 R] >> endobj 1815 0 obj << /Limits [(intro-systemtap-vs-others) (intro-systemtap-vs-others)] /Names [(intro-systemtap-vs-others) 294 0 R] >> endobj 1816 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 288 0 R] >> endobj 1817 0 obj << /Limits [(ioblktime) (ioblktime)] /Names [(ioblktime) 565 0 R] >> endobj 1818 0 obj << /Limits [(ioblktimeoutput) (ioblktimeoutput)] /Names [(ioblktimeoutput) 579 0 R] >> endobj 1819 0 obj << /Limits [(ioblktimesect) (ioblktimesect)] /Names [(ioblktimesect) 856 0 R] >> endobj 1820 0 obj << /Limits [(iotime) (iotime)] /Names [(iotime) 505 0 R] >> endobj 1821 0 obj << /Limits [(iotimeoutput) (iotimeoutput)] /Names [(iotimeoutput) 514 0 R] >> endobj 1822 0 obj << /Limits [(iotimesect) (iotimesect)] /Names [(iotimesect) 842 0 R] >> endobj 1823 0 obj << /Limits [(mainsect-disk) (mainsect-disk)] /Names [(mainsect-disk) 837 0 R] >> endobj 1824 0 obj << /Limits [(mainsect-network) (mainsect-network)] /Names [(mainsect-network) 819 0 R] >> endobj 1825 0 obj << /Limits [(mainsect-profiling) (mainsect-profiling)] /Names [(mainsect-profiling) 859 0 R] >> endobj 1826 0 obj << /Limits [(memory-flight-recorder) (memory-flight-recorder)] /Names [(memory-flight-recorder) 318 0 R] >> endobj 1827 0 obj << /Limits [(multiplearrayindices) (multiplearrayindices)] /Names [(multiplearrayindices) 235 0 R] >> endobj 1828 0 obj << /Limits [(nettop) (nettop)] /Names [(nettop) 404 0 R] >> endobj 1829 0 obj << /Limits [(nettopoutput) (nettopoutput)] /Names [(nettopoutput) 423 0 R] >> endobj 1830 0 obj << /Limits [(nettopsect) (nettopsect)] /Names [(nettopsect) 822 0 R] >> endobj 1831 0 obj << /Limits [(paracallgraph) (paracallgraph)] /Names [(paracallgraph) 865 0 R] >> endobj 1832 0 obj << /Limits [(paracallgraphoutput) (paracallgraphoutput)] /Names [(paracallgraphoutput) 1674 0 R] >> endobj 1833 0 obj << /Limits [(parsetype) (parsetype)] /Names [(parsetype) 883 0 R] >> endobj 1834 0 obj << /Limits [(preppingxcompile) (preppingxcompile)] /Names [(preppingxcompile) 1666 0 R] >> endobj 1835 0 obj << /Limits [(printf) (printf)] /Names [(printf) 1668 0 R] >> endobj 1836 0 obj << /Limits [(references) (references)] /Names [(references) 889 0 R] >> endobj 1837 0 obj << /Limits [(runtimeerror) (runtimeerror)] /Names [(runtimeerror) 886 0 R] >> endobj 1838 0 obj << /Limits [(scriptcallgraph) (scriptcallgraph)] /Names [(scriptcallgraph) 588 0 R] >> endobj 1839 0 obj << /Limits [(scriptconstructions) (scriptconstructions)] /Names [(scriptconstructions) 336 0 R] >> endobj 1840 0 obj << /Limits [(scriptdisktop) (scriptdisktop)] /Names [(scriptdisktop) 484 0 R] >> endobj 1841 0 obj << /Limits [(scriptformats) (scriptformats)] /Names [(scriptformats) 1667 0 R] >> endobj 1842 0 obj << /Limits [(scripts) (scripts)] /Names [(scripts) 328 0 R] >> endobj 1843 0 obj << /Limits [(simpleaggregates) (simpleaggregates)] /Names [(simpleaggregates) 226 0 R] >> endobj 1844 0 obj << /Limits [(simpleifelseexample) (simpleifelseexample)] /Names [(simpleifelseexample) 158 0 R] >> endobj 1845 0 obj << /Limits [(simplesimplevfsread) (simplesimplevfsread)] /Names [(simplesimplevfsread) 186 0 R] >> endobj 1846 0 obj << /Limits [(simplesimplevfsreadprintifmember) (simplesimplevfsreadprintifmember)] /Names [(simplesimplevfsreadprintifmember) 1669 0 R] >> endobj 1847 0 obj << /Limits [(simplevfsreadprint) (simplevfsreadprint)] /Names [(simplevfsreadprint) 194 0 R] >> endobj 1848 0 obj << /Limits [(simplevfsreadprintif) (simplevfsreadprintif)] /Names [(simplevfsreadprintif) 220 0 R] >> endobj 1849 0 obj << /Limits [(simplevfsreadprintnotcumulative) (simplevfsreadprintnotcumulative)] /Names [(simplevfsreadprintnotcumulative) 206 0 R] >> endobj 1850 0 obj << /Limits [(sockettrace) (sockettrace)] /Names [(sockettrace) 433 0 R] >> endobj 1851 0 obj << /Limits [(sockettraceoutput) (sockettraceoutput)] /Names [(sockettraceoutput) 443 0 R] >> endobj 1852 0 obj << /Limits [(sockettracesect) (sockettracesect)] /Names [(sockettracesect) 825 0 R] >> endobj 1853 0 obj << /Limits [(syscall-open) (syscall-open)] /Names [(syscall-open) 110 0 R] >> endobj 1854 0 obj << /Limits [(syscallsbypid) (syscallsbypid)] /Names [(syscallsbypid) 1675 0 R] >> endobj 1855 0 obj << /Limits [(syscallsbyprocpid) (syscallsbyprocpid)] /Names [(syscallsbyprocpid) 647 0 R] >> endobj 1856 0 obj << /Limits [(syscallsbyprocpidoutput) (syscallsbyprocpidoutput)] /Names [(syscallsbyprocpidoutput) 645 0 R] >> endobj 1857 0 obj << /Limits [(syscallsbyprocpidsect) (syscallsbyprocpidsect)] /Names [(syscallsbyprocpidsect) 875 0 R] >> endobj 1858 0 obj << /Limits [(systemtapscript-events) (systemtapscript-events)] /Names [(systemtapscript-events) 241 0 R] >> endobj 1859 0 obj << /Limits [(systemtapscript-functions) (systemtapscript-functions)] /Names [(systemtapscript-functions) 119 0 R] >> endobj 1860 0 obj << /Limits [(systemtapscript-handler) (systemtapscript-handler)] /Names [(systemtapscript-handler) 333 0 R] >> endobj 1861 0 obj << /Limits [(systemtapsession) (systemtapsession)] /Names [(systemtapsession) 70 0 R] >> endobj 1862 0 obj << /Limits [(targetavailable) (targetavailable)] /Names [(targetavailable) 350 0 R] >> endobj 1863 0 obj << /Limits [(targetexample) (targetexample)] /Names [(targetexample) 134 0 R] >> endobj 1864 0 obj << /Limits [(targetprettyprinting) (targetprettyprinting)] /Names [(targetprettyprinting) 344 0 R] >> endobj 1865 0 obj << /Limits [(targetvariables) (targetvariables)] /Names [(targetvariables) 253 0 R] >> endobj 1866 0 obj << /Limits [(tcpconnections) (tcpconnections)] /Names [(tcpconnections) 449 0 R] >> endobj 1867 0 obj << /Limits [(tcpconnectionsoutput) (tcpconnectionsoutput)] /Names [(tcpconnectionsoutput) 1670 0 R] >> endobj 1868 0 obj << /Limits [(tcpconnectionssect) (tcpconnectionssect)] /Names [(tcpconnectionssect) 828 0 R] >> endobj 1869 0 obj << /Limits [(tcpdumplike) (tcpdumplike)] /Names [(tcpdumplike) 456 0 R] >> endobj 1870 0 obj << /Limits [(tcpdumplikeoutput) (tcpdumplikeoutput)] /Names [(tcpdumplikeoutput) 1671 0 R] >> endobj 1871 0 obj << /Limits [(tcpdumplikesect) (tcpdumplikesect)] /Names [(tcpdumplikesect) 831 0 R] >> endobj 1872 0 obj << /Limits [(testing) (testing)] /Names [(testing) 308 0 R] >> endobj 1873 0 obj << /Limits [(thread_indent) (thread_indent)] /Names [(thread_indent) 128 0 R] >> endobj 1874 0 obj << /Limits [(threadtimes) (threadtimes)] /Names [(threadtimes) 599 0 R] >> endobj 1875 0 obj << /Limits [(threadtimesoutput) (threadtimesoutput)] /Names [(threadtimesoutput) 597 0 R] >> endobj 1876 0 obj << /Limits [(threadtimessect) (threadtimessect)] /Names [(threadtimessect) 868 0 R] >> endobj 1877 0 obj << /Limits [(timeouts) (timeouts)] /Names [(timeouts) 614 0 R] >> endobj 1878 0 obj << /Limits [(timeoutsoutput) (timeoutsoutput)] /Names [(timeoutsoutput) 634 0 R] >> endobj 1879 0 obj << /Limits [(timeoutssect) (timeoutssect)] /Names [(timeoutssect) 625 0 R] >> endobj 1880 0 obj << /Limits [(timer) (timer)] /Names [(timer) 96 0 R] >> endobj 1881 0 obj << /Limits [(timerjiffies) (timerjiffies)] /Names [(timerjiffies) 140 0 R] >> endobj 1882 0 obj << /Limits [(topsys) (topsys)] /Names [(topsys) 622 0 R] >> endobj 1883 0 obj << /Limits [(topsysoutput) (topsysoutput)] /Names [(topsysoutput) 640 0 R] >> endobj 1884 0 obj << /Limits [(topsyssect) (topsyssect)] /Names [(topsyssect) 624 0 R] >> endobj 1885 0 obj << /Limits [(traceio) (traceio)] /Names [(traceio) 520 0 R] >> endobj 1886 0 obj << /Limits [(traceio2) (traceio2)] /Names [(traceio2) 530 0 R] >> endobj 1887 0 obj << /Limits [(traceio2output) (traceio2output)] /Names [(traceio2output) 1673 0 R] >> endobj 1888 0 obj << /Limits [(traceio2sect) (traceio2sect)] /Names [(traceio2sect) 848 0 R] >> endobj 1889 0 obj << /Limits [(traceiooutput) (traceiooutput)] /Names [(traceiooutput) 1672 0 R] >> endobj 1890 0 obj << /Limits [(traceiosect) (traceiosect)] /Names [(traceiosect) 845 0 R] >> endobj 1891 0 obj << /Limits [(typecasting) (typecasting)] /Names [(typecasting) 347 0 R] >> endobj 1892 0 obj << /Limits [(uevents) (uevents)] /Names [(uevents) 389 0 R] >> endobj 1893 0 obj << /Limits [(understanding-architecture-tools) (understanding-architecture-tools)] /Names [(understanding-architecture-tools) 72 0 R] >> endobj 1894 0 obj << /Limits [(understanding-how-systemtap-works) (understanding-how-systemtap-works)] /Names [(understanding-how-systemtap-works) 80 0 R] >> endobj 1895 0 obj << /Limits [(understanding-tapsets) (understanding-tapsets)] /Names [(understanding-tapsets) 383 0 R] >> endobj 1896 0 obj << /Limits [(useful-systemtap-scripts) (useful-systemtap-scripts)] /Names [(useful-systemtap-scripts) 411 0 R] >> endobj 1897 0 obj << /Limits [(userspace-probing) (userspace-probing)] /Names [(userspace-probing) 386 0 R] >> endobj 1898 0 obj << /Limits [(using-setup) (using-setup)] /Names [(using-setup) 74 0 R] >> endobj 1899 0 obj << /Limits [(using-systemtap) (using-systemtap)] /Names [(using-systemtap) 299 0 R] >> endobj 1900 0 obj << /Limits [(using-usage) (using-usage)] /Names [(using-usage) 313 0 R] >> endobj 1901 0 obj << /Limits [(ustack) (ustack)] /Names [(ustack) 394 0 R] >> endobj 1902 0 obj << /Limits [(utargetvariable) (utargetvariable)] /Names [(utargetvariable) 260 0 R] >> endobj 1903 0 obj << /Limits [(variablesconstructs) (variablesconstructs)] /Names [(variablesconstructs) 339 0 R] >> endobj 1904 0 obj << /Limits [(wildcards) (wildcards)] /Names [(wildcards) 91 0 R] >> endobj 1905 0 obj << /Limits [(SystemTap_Beginners_Guide-Preface) (wildcards)] /Kids [1769 0 R 1770 0 R 1771 0 R 1772 0 R 1773 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R 1798 0 R 1799 0 R 1800 0 R 1801 0 R 1802 0 R 1803 0 R 1804 0 R 1805 0 R 1806 0 R 1807 0 R 1808 0 R 1809 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1814 0 R 1815 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R 1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 1861 0 R 1862 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R 1870 0 R 1871 0 R 1872 0 R 1873 0 R 1874 0 R 1875 0 R 1876 0 R 1877 0 R 1878 0 R 1879 0 R 1880 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R 1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 1891 0 R 1892 0 R 1893 0 R 1894 0 R 1895 0 R 1896 0 R 1897 0 R 1898 0 R 1899 0 R 1900 0 R 1901 0 R 1902 0 R 1903 0 R 1904 0 R] >> endobj 11 0 obj << /Type /Pages /Count 96 /Kids [9 0 R 19 0 R 400 0 R 901 0 R 26 0 R 29 0 R 32 0 R 38 0 R 410 0 R 41 0 R 44 0 R 47 0 R 79 0 R 57 0 R 60 0 R 682 0 R 118 0 R 63 0 R 69 0 R 85 0 R 416 0 R 87 0 R 97 0 R 109 0 R 116 0 R 129 0 R 135 0 R 141 0 R 265 0 R 149 0 R 151 0 R 159 0 R 165 0 R 483 0 R 174 0 R 187 0 R 195 0 R 207 0 R 219 0 R 225 0 R 227 0 R 236 0 R 252 0 R 259 0 R 268 0 R 403 0 R 405 0 R 424 0 R 434 0 R 450 0 R 457 0 R 465 0 R 472 0 R 482 0 R 490 0 R 501 0 R 504 0 R 515 0 R 529 0 R 531 0 R 539 0 R 545 0 R 566 0 R 577 0 R 576 0 R 596 0 R 598 0 R 610 0 R 613 0 R 620 0 R 632 0 R 631 0 R 646 0 R 656 0 R 662 0 R 672 0 R 675 0 R 685 0 R 688 0 R 691 0 R 705 0 R 708 0 R 714 0 R 717 0 R 719 0 R 984 0 R 1112 0 R 1209 0 R 1281 0 R 1334 0 R 1406 0 R 1493 0 R 1567 0 R 1638 0 R 1662 0 R 1665 0 R ] >> endobj 1906 0 obj << /Type /Catalog /Pages 11 0 R /Lang (en) /Metadata 5 0 R /PageLabels 1907 0 R /Outlines 1678 0 R /PageMode /UseOutlines /Names 1908 0 R >> endobj 10 0 obj << /Font << /F9 1757 0 R /F10 1758 0 R /F12 1759 0 R /F11 1760 0 R /F13 1761 0 R /F1 1764 0 R /F2 1765 0 R /F3 1766 0 R /F4 1767 0 R /F5 1768 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 1907 0 obj << /Nums [0 << /S /r >> 2 << /S /r /St 3 >> 3 << /S /r /St 4 >> 4 << /S /r /St 5 >> 8 << /S /D >> 9 << /S /D /St 2 >> 12 << /S /D /St 5 >> 13 << /S /D /St 6 >> 15 << /S /D /St 8 >> 16 << /S /D /St 9 >> 17 << /S /D /St 10 >> 19 << /S /D /St 12 >> 20 << /S /D /St 13 >> 21 << /S /D /St 14 >> 25 << /S /D /St 18 >> 28 << /S /D /St 21 >> 29 << /S /D /St 22 >> 33 << /S /D /St 26 >> 34 << /S /D /St 27 >> 44 << /S /D /St 37 >> 45 << /S /D /St 38 >> 47 << /S /D /St 40 >> 54 << /S /D /St 47 >> 63 << /S /D /St 56 >> 64 << /S /D /St 57 >> 65 << /S /D /St 58 >> 70 << /S /D /St 63 >> 71 << /S /D /St 64 >> 72 << /S /D /St 65 >> 77 << /S /D /St 70 >> 85 << /S /D /St 78 >>] >> endobj 1678 0 obj << /First 1677 0 R /Last 1756 0 R >> endobj 1908 0 obj << /Dests 1905 0 R >> endobj xref 0 1909 0000000000 65535 f 0000000015 00000 n 0000000240 00000 n 0000007539 00000 n 0000007559 00000 n 0000007592 00000 n 0000008837 00000 n 0000008857 00000 n 0000009213 00000 n 0000009232 00000 n 0000454544 00000 n 0000453555 00000 n 0000009424 00000 n 0000009488 00000 n 0000009626 00000 n 0000009688 00000 n 0000009826 00000 n 0000010967 00000 n 0000010988 00000 n 0000011022 00000 n 0000011233 00000 n 0000011313 00000 n 0000011453 00000 n 0000011589 00000 n 0000013661 00000 n 0000013682 00000 n 0000013716 00000 n 0000013927 00000 n 0000016715 00000 n 0000016736 00000 n 0000016930 00000 n 0000018852 00000 n 0000018873 00000 n 0000019067 00000 n 0000019136 00000 n 0000019276 00000 n 0000020137 00000 n 0000020157 00000 n 0000020184 00000 n 0000020395 00000 n 0000020973 00000 n 0000020993 00000 n 0000021187 00000 n 0000023131 00000 n 0000023152 00000 n 0000023346 00000 n 0000025785 00000 n 0000025806 00000 n 0000026000 00000 n 0000026080 00000 n 0000026220 00000 n 0000026359 00000 n 0000026439 00000 n 0000026579 00000 n 0000026718 00000 n 0000029307 00000 n 0000029328 00000 n 0000029376 00000 n 0000029587 00000 n 0000031905 00000 n 0000031926 00000 n 0000032120 00000 n 0000033845 00000 n 0000033866 00000 n 0000034060 00000 n 0000034200 00000 n 0000034340 00000 n 0000036504 00000 n 0000036525 00000 n 0000036559 00000 n 0000036770 00000 n 0000036850 00000 n 0000036989 00000 n 0000037069 00000 n 0000037209 00000 n 0000037289 00000 n 0000037428 00000 n 0000039919 00000 n 0000039940 00000 n 0000039981 00000 n 0000040192 00000 n 0000040272 00000 n 0000040412 00000 n 0000042568 00000 n 0000042589 00000 n 0000042616 00000 n 0000042827 00000 n 0000045912 00000 n 0000042909 00000 n 0000043049 00000 n 0000043189 00000 n 0000043328 00000 n 0000043408 00000 n 0000043548 00000 n 0000045843 00000 n 0000045864 00000 n 0000046123 00000 n 0000048419 00000 n 0000046203 00000 n 0000046343 00000 n 0000048369 00000 n 0000048391 00000 n 0000048631 00000 n 0000048714 00000 n 0000048855 00000 n 0000048997 00000 n 0000049138 00000 n 0000051646 00000 n 0000051668 00000 n 0000051713 00000 n 0000051927 00000 n 0000052011 00000 n 0000052152 00000 n 0000052293 00000 n 0000053887 00000 n 0000053909 00000 n 0000053946 00000 n 0000054160 00000 n 0000057220 00000 n 0000054242 00000 n 0000054326 00000 n 0000054468 00000 n 0000054610 00000 n 0000054693 00000 n 0000054835 00000 n 0000054976 00000 n 0000057145 00000 n 0000057167 00000 n 0000057434 00000 n 0000059938 00000 n 0000057518 00000 n 0000057659 00000 n 0000059887 00000 n 0000059909 00000 n 0000060152 00000 n 0000062854 00000 n 0000060234 00000 n 0000060376 00000 n 0000062803 00000 n 0000062825 00000 n 0000063068 00000 n 0000066087 00000 n 0000063150 00000 n 0000063291 00000 n 0000063433 00000 n 0000066028 00000 n 0000066050 00000 n 0000066301 00000 n 0000069068 00000 n 0000069090 00000 n 0000069286 00000 n 0000072900 00000 n 0000069370 00000 n 0000069454 00000 n 0000069596 00000 n 0000069738 00000 n 0000072841 00000 n 0000072863 00000 n 0000073114 00000 n 0000075734 00000 n 0000073198 00000 n 0000073339 00000 n 0000075683 00000 n 0000075705 00000 n 0000075948 00000 n 0000078605 00000 n 0000076032 00000 n 0000076173 00000 n 0000076314 00000 n 0000078546 00000 n 0000078568 00000 n 0000078819 00000 n 0000176932 00000 n 0000078960 00000 n 0000082435 00000 n 0000079044 00000 n 0000079184 00000 n 0000079326 00000 n 0000079467 00000 n 0000079549 00000 n 0000079691 00000 n 0000079775 00000 n 0000079915 00000 n 0000082344 00000 n 0000082366 00000 n 0000082649 00000 n 0000082791 00000 n 0000085829 00000 n 0000082875 00000 n 0000083016 00000 n 0000083158 00000 n 0000083300 00000 n 0000085754 00000 n 0000085776 00000 n 0000086043 00000 n 0000089492 00000 n 0000086127 00000 n 0000086269 00000 n 0000086411 00000 n 0000086553 00000 n 0000086694 00000 n 0000086778 00000 n 0000086919 00000 n 0000087058 00000 n 0000089401 00000 n 0000089423 00000 n 0000089706 00000 n 0000091189 00000 n 0000089788 00000 n 0000089929 00000 n 0000091138 00000 n 0000091160 00000 n 0000091403 00000 n 0000091544 00000 n 0000091628 00000 n 0000091770 00000 n 0000091911 00000 n 0000093964 00000 n 0000093986 00000 n 0000094031 00000 n 0000094245 00000 n 0000094329 00000 n 0000094471 00000 n 0000096622 00000 n 0000096644 00000 n 0000096673 00000 n 0000096887 00000 n 0000099709 00000 n 0000096969 00000 n 0000097110 00000 n 0000097252 00000 n 0000097394 00000 n 0000097536 00000 n 0000099634 00000 n 0000099656 00000 n 0000099923 00000 n 0000103206 00000 n 0000100005 00000 n 0000100146 00000 n 0000100288 00000 n 0000100429 00000 n 0000153051 00000 n 0000100571 00000 n 0000100713 00000 n 0000103123 00000 n 0000103145 00000 n 0000103420 00000 n 0000103502 00000 n 0000103644 00000 n 0000103785 00000 n 0000106255 00000 n 0000106277 00000 n 0000106314 00000 n 0000106528 00000 n 0000106612 00000 n 0000106754 00000 n 0000106894 00000 n 0000108915 00000 n 0000108937 00000 n 0000108974 00000 n 0000109188 00000 n 0000109270 00000 n 0000109412 00000 n 0000112032 00000 n 0000112054 00000 n 0000112083 00000 n 0000112297 00000 n 0000114688 00000 n 0000114710 00000 n 0000114906 00000 n 0000114987 00000 n 0000115128 00000 n 0000115270 00000 n 0000115351 00000 n 0000115491 00000 n 0000115633 00000 n 0000115716 00000 n 0000115857 00000 n 0000115999 00000 n 0000116082 00000 n 0000116224 00000 n 0000116366 00000 n 0000116449 00000 n 0000116590 00000 n 0000116730 00000 n 0000116813 00000 n 0000116955 00000 n 0000117097 00000 n 0000149979 00000 n 0000117238 00000 n 0000117380 00000 n 0000150061 00000 n 0000117522 00000 n 0000117664 00000 n 0000150143 00000 n 0000117806 00000 n 0000117948 00000 n 0000150226 00000 n 0000118090 00000 n 0000118232 00000 n 0000118313 00000 n 0000118454 00000 n 0000118596 00000 n 0000118737 00000 n 0000118878 00000 n 0000119019 00000 n 0000119160 00000 n 0000119301 00000 n 0000119442 00000 n 0000119524 00000 n 0000119666 00000 n 0000119806 00000 n 0000119948 00000 n 0000120090 00000 n 0000120173 00000 n 0000120315 00000 n 0000120457 00000 n 0000120599 00000 n 0000120741 00000 n 0000120825 00000 n 0000120967 00000 n 0000121109 00000 n 0000121190 00000 n 0000121332 00000 n 0000121474 00000 n 0000121613 00000 n 0000121754 00000 n 0000121895 00000 n 0000122036 00000 n 0000122117 00000 n 0000122259 00000 n 0000122401 00000 n 0000122543 00000 n 0000122685 00000 n 0000122768 00000 n 0000122910 00000 n 0000123052 00000 n 0000123136 00000 n 0000123278 00000 n 0000123418 00000 n 0000123502 00000 n 0000123644 00000 n 0000123786 00000 n 0000123928 00000 n 0000124070 00000 n 0000124152 00000 n 0000124294 00000 n 0000124436 00000 n 0000124520 00000 n 0000124662 00000 n 0000124804 00000 n 0000124888 00000 n 0000125030 00000 n 0000125172 00000 n 0000125254 00000 n 0000125396 00000 n 0000125538 00000 n 0000125621 00000 n 0000125763 00000 n 0000125905 00000 n 0000176850 00000 n 0000126047 00000 n 0000126189 00000 n 0000177016 00000 n 0000126331 00000 n 0000126473 00000 n 0000126615 00000 n 0000126755 00000 n 0000126839 00000 n 0000126981 00000 n 0000127123 00000 n 0000127207 00000 n 0000127349 00000 n 0000127491 00000 n 0000127633 00000 n 0000127773 00000 n 0000127915 00000 n 0000128057 00000 n 0000128141 00000 n 0000128283 00000 n 0000128425 00000 n 0000128509 00000 n 0000128650 00000 n 0000128792 00000 n 0000128874 00000 n 0000129016 00000 n 0000129158 00000 n 0000129240 00000 n 0000129381 00000 n 0000129523 00000 n 0000129607 00000 n 0000129749 00000 n 0000129891 00000 n 0000130031 00000 n 0000130171 00000 n 0000130253 00000 n 0000130393 00000 n 0000130533 00000 n 0000145598 00000 n 0000145621 00000 n 0000146394 00000 n 0000146608 00000 n 0000147607 00000 n 0000147628 00000 n 0000147824 00000 n 0000149765 00000 n 0000147908 00000 n 0000148050 00000 n 0000149714 00000 n 0000149736 00000 n 0000152837 00000 n 0000150310 00000 n 0000150392 00000 n 0000150534 00000 n 0000152786 00000 n 0000152808 00000 n 0000156220 00000 n 0000153135 00000 n 0000153276 00000 n 0000153418 00000 n 0000153559 00000 n 0000156153 00000 n 0000156175 00000 n 0000156434 00000 n 0000159489 00000 n 0000156517 00000 n 0000156657 00000 n 0000156797 00000 n 0000156939 00000 n 0000157081 00000 n 0000157223 00000 n 0000159406 00000 n 0000159428 00000 n 0000159703 00000 n 0000162605 00000 n 0000159785 00000 n 0000159926 00000 n 0000160068 00000 n 0000160210 00000 n 0000160351 00000 n 0000160493 00000 n 0000162522 00000 n 0000162544 00000 n 0000162819 00000 n 0000162903 00000 n 0000163044 00000 n 0000163186 00000 n 0000163326 00000 n 0000163467 00000 n 0000163609 00000 n 0000166131 00000 n 0000163693 00000 n 0000163832 00000 n 0000163974 00000 n 0000166032 00000 n 0000166054 00000 n 0000166345 00000 n 0000168847 00000 n 0000166427 00000 n 0000166569 00000 n 0000166711 00000 n 0000166853 00000 n 0000168780 00000 n 0000168802 00000 n 0000169061 00000 n 0000171577 00000 n 0000169143 00000 n 0000169284 00000 n 0000169424 00000 n 0000171518 00000 n 0000171540 00000 n 0000171791 00000 n 0000174814 00000 n 0000171875 00000 n 0000172017 00000 n 0000172158 00000 n 0000172300 00000 n 0000172441 00000 n 0000174739 00000 n 0000174761 00000 n 0000175028 00000 n 0000176632 00000 n 0000176654 00000 n 0000179734 00000 n 0000177100 00000 n 0000177182 00000 n 0000177323 00000 n 0000179683 00000 n 0000179705 00000 n 0000179948 00000 n 0000183111 00000 n 0000180032 00000 n 0000180171 00000 n 0000180311 00000 n 0000180450 00000 n 0000180592 00000 n 0000180732 00000 n 0000183028 00000 n 0000183050 00000 n 0000183325 00000 n 0000185273 00000 n 0000185295 00000 n 0000185491 00000 n 0000186844 00000 n 0000186866 00000 n 0000187062 00000 n 0000187144 00000 n 0000187284 00000 n 0000187426 00000 n 0000187566 00000 n 0000187708 00000 n 0000187790 00000 n 0000187932 00000 n 0000188073 00000 n 0000188215 00000 n 0000190979 00000 n 0000188299 00000 n 0000188440 00000 n 0000190872 00000 n 0000190894 00000 n 0000191193 00000 n 0000191277 00000 n 0000191418 00000 n 0000191560 00000 n 0000191702 00000 n 0000191843 00000 n 0000191985 00000 n 0000194020 00000 n 0000194042 00000 n 0000194103 00000 n 0000194317 00000 n 0000196525 00000 n 0000194399 00000 n 0000194540 00000 n 0000196474 00000 n 0000196496 00000 n 0000196739 00000 n 0000196881 00000 n 0000197023 00000 n 0000199436 00000 n 0000197107 00000 n 0000197248 00000 n 0000199369 00000 n 0000199391 00000 n 0000199650 00000 n 0000204688 00000 n 0000199734 00000 n 0000199818 00000 n 0000199960 00000 n 0000200102 00000 n 0000200241 00000 n 0000200325 00000 n 0000200465 00000 n 0000200549 00000 n 0000200689 00000 n 0000200829 00000 n 0000200967 00000 n 0000201109 00000 n 0000201251 00000 n 0000201393 00000 n 0000201534 00000 n 0000201676 00000 n 0000201817 00000 n 0000204541 00000 n 0000204563 00000 n 0000204902 00000 n 0000207170 00000 n 0000204984 00000 n 0000205123 00000 n 0000207119 00000 n 0000207141 00000 n 0000207384 00000 n 0000209437 00000 n 0000207526 00000 n 0000209172 00000 n 0000209194 00000 n 0000209223 00000 n 0000212626 00000 n 0000209521 00000 n 0000209663 00000 n 0000209745 00000 n 0000209886 00000 n 0000210027 00000 n 0000210168 00000 n 0000210250 00000 n 0000210390 00000 n 0000212543 00000 n 0000212565 00000 n 0000212840 00000 n 0000212924 00000 n 0000213063 00000 n 0000213204 00000 n 0000213346 00000 n 0000213486 00000 n 0000215707 00000 n 0000215729 00000 n 0000215782 00000 n 0000215996 00000 n 0000219050 00000 n 0000216080 00000 n 0000216164 00000 n 0000216305 00000 n 0000216446 00000 n 0000216588 00000 n 0000216729 00000 n 0000216871 00000 n 0000218967 00000 n 0000218989 00000 n 0000219264 00000 n 0000220860 00000 n 0000220882 00000 n 0000221078 00000 n 0000222353 00000 n 0000222375 00000 n 0000222571 00000 n 0000222653 00000 n 0000222794 00000 n 0000222936 00000 n 0000224756 00000 n 0000224778 00000 n 0000224815 00000 n 0000225029 00000 n 0000228033 00000 n 0000225171 00000 n 0000227951 00000 n 0000225312 00000 n 0000225394 00000 n 0000225536 00000 n 0000225677 00000 n 0000227662 00000 n 0000227684 00000 n 0000227737 00000 n 0000231413 00000 n 0000228117 00000 n 0000228259 00000 n 0000228341 00000 n 0000228483 00000 n 0000228624 00000 n 0000228766 00000 n 0000228908 00000 n 0000229048 00000 n 0000229130 00000 n 0000229270 00000 n 0000231314 00000 n 0000231336 00000 n 0000231627 00000 n 0000234482 00000 n 0000231711 00000 n 0000231795 00000 n 0000231936 00000 n 0000232078 00000 n 0000232219 00000 n 0000232361 00000 n 0000234407 00000 n 0000234429 00000 n 0000234696 00000 n 0000237046 00000 n 0000234779 00000 n 0000234920 00000 n 0000236995 00000 n 0000237017 00000 n 0000237260 00000 n 0000239747 00000 n 0000237342 00000 n 0000237483 00000 n 0000237624 00000 n 0000237766 00000 n 0000237908 00000 n 0000239672 00000 n 0000239694 00000 n 0000239961 00000 n 0000240301 00000 n 0000240322 00000 n 0000240518 00000 n 0000242903 00000 n 0000242925 00000 n 0000243121 00000 n 0000243203 00000 n 0000243345 00000 n 0000243485 00000 n 0000245942 00000 n 0000245964 00000 n 0000246001 00000 n 0000246215 00000 n 0000248263 00000 n 0000248285 00000 n 0000248481 00000 n 0000250331 00000 n 0000250353 00000 n 0000250549 00000 n 0000251487 00000 n 0000251508 00000 n 0000251704 00000 n 0000251788 00000 n 0000251930 00000 n 0000252010 00000 n 0000252152 00000 n 0000252231 00000 n 0000252373 00000 n 0000252452 00000 n 0000252594 00000 n 0000252736 00000 n 0000252878 00000 n 0000255043 00000 n 0000255065 00000 n 0000255134 00000 n 0000255348 00000 n 0000255688 00000 n 0000255709 00000 n 0000255905 00000 n 0000256046 00000 n 0000256187 00000 n 0000256841 00000 n 0000256862 00000 n 0000256899 00000 n 0000257113 00000 n 0000257453 00000 n 0000257474 00000 n 0000257670 00000 n 0000271538 00000 n 0000257752 00000 n 0000257836 00000 n 0000257978 00000 n 0000258061 00000 n 0000258203 00000 n 0000258287 00000 n 0000258429 00000 n 0000258513 00000 n 0000258655 00000 n 0000258740 00000 n 0000258882 00000 n 0000258967 00000 n 0000259109 00000 n 0000259194 00000 n 0000259336 00000 n 0000259421 00000 n 0000259563 00000 n 0000259647 00000 n 0000259789 00000 n 0000259872 00000 n 0000260014 00000 n 0000260098 00000 n 0000260240 00000 n 0000260324 00000 n 0000260466 00000 n 0000260550 00000 n 0000260692 00000 n 0000260776 00000 n 0000260918 00000 n 0000261001 00000 n 0000261143 00000 n 0000261226 00000 n 0000261368 00000 n 0000261451 00000 n 0000261593 00000 n 0000261677 00000 n 0000261817 00000 n 0000261901 00000 n 0000262041 00000 n 0000262125 00000 n 0000262267 00000 n 0000262351 00000 n 0000262493 00000 n 0000262577 00000 n 0000262719 00000 n 0000262803 00000 n 0000262945 00000 n 0000263029 00000 n 0000263171 00000 n 0000263313 00000 n 0000263455 00000 n 0000263597 00000 n 0000263739 00000 n 0000263881 00000 n 0000264023 00000 n 0000264165 00000 n 0000264249 00000 n 0000264391 00000 n 0000264475 00000 n 0000264617 00000 n 0000264701 00000 n 0000264843 00000 n 0000264927 00000 n 0000265069 00000 n 0000265211 00000 n 0000265295 00000 n 0000265437 00000 n 0000265521 00000 n 0000265663 00000 n 0000265747 00000 n 0000265889 00000 n 0000266031 00000 n 0000266115 00000 n 0000266257 00000 n 0000266341 00000 n 0000266483 00000 n 0000266625 00000 n 0000266709 00000 n 0000266851 00000 n 0000266993 00000 n 0000267077 00000 n 0000267219 00000 n 0000267361 00000 n 0000267445 00000 n 0000267587 00000 n 0000267729 00000 n 0000267813 00000 n 0000267955 00000 n 0000268097 00000 n 0000268239 00000 n 0000268381 00000 n 0000268523 00000 n 0000268607 00000 n 0000268749 00000 n 0000268889 00000 n 0000271047 00000 n 0000271069 00000 n 0000271752 00000 n 0000271893 00000 n 0000272035 00000 n 0000272117 00000 n 0000272258 00000 n 0000272400 00000 n 0000272484 00000 n 0000272626 00000 n 0000272768 00000 n 0000272850 00000 n 0000272992 00000 n 0000273132 00000 n 0000273214 00000 n 0000273356 00000 n 0000273498 00000 n 0000273580 00000 n 0000273722 00000 n 0000273862 00000 n 0000273944 00000 n 0000274086 00000 n 0000274228 00000 n 0000274312 00000 n 0000274453 00000 n 0000274595 00000 n 0000274737 00000 n 0000274879 00000 n 0000274961 00000 n 0000275103 00000 n 0000275245 00000 n 0000275329 00000 n 0000275471 00000 n 0000275613 00000 n 0000275695 00000 n 0000275837 00000 n 0000275979 00000 n 0000276121 00000 n 0000276263 00000 n 0000276347 00000 n 0000276489 00000 n 0000276631 00000 n 0000276713 00000 n 0000276855 00000 n 0000276994 00000 n 0000277078 00000 n 0000277219 00000 n 0000277361 00000 n 0000277445 00000 n 0000277587 00000 n 0000277729 00000 n 0000277813 00000 n 0000277955 00000 n 0000278095 00000 n 0000278179 00000 n 0000278320 00000 n 0000278460 00000 n 0000278601 00000 n 0000278743 00000 n 0000278884 00000 n 0000279026 00000 n 0000279110 00000 n 0000279252 00000 n 0000279394 00000 n 0000279477 00000 n 0000279617 00000 n 0000279759 00000 n 0000279900 00000 n 0000280040 00000 n 0000280122 00000 n 0000280263 00000 n 0000280405 00000 n 0000280489 00000 n 0000280630 00000 n 0000280772 00000 n 0000280854 00000 n 0000280995 00000 n 0000281137 00000 n 0000281219 00000 n 0000281360 00000 n 0000281502 00000 n 0000281584 00000 n 0000281724 00000 n 0000281866 00000 n 0000291221 00000 n 0000291243 00000 n 0000291728 00000 n 0000291942 00000 n 0000292084 00000 n 0000292226 00000 n 0000292310 00000 n 0000292452 00000 n 0000292594 00000 n 0000292736 00000 n 0000292820 00000 n 0000292962 00000 n 0000293104 00000 n 0000293187 00000 n 0000293329 00000 n 0000293411 00000 n 0000293553 00000 n 0000293636 00000 n 0000293776 00000 n 0000293918 00000 n 0000294002 00000 n 0000294144 00000 n 0000294228 00000 n 0000294370 00000 n 0000294454 00000 n 0000294596 00000 n 0000294738 00000 n 0000294880 00000 n 0000295022 00000 n 0000295164 00000 n 0000295248 00000 n 0000295390 00000 n 0000295532 00000 n 0000295615 00000 n 0000295757 00000 n 0000295899 00000 n 0000296041 00000 n 0000296183 00000 n 0000296325 00000 n 0000296467 00000 n 0000296609 00000 n 0000296751 00000 n 0000296892 00000 n 0000297032 00000 n 0000297174 00000 n 0000297258 00000 n 0000297400 00000 n 0000297542 00000 n 0000297684 00000 n 0000297768 00000 n 0000297910 00000 n 0000297994 00000 n 0000298136 00000 n 0000298220 00000 n 0000298362 00000 n 0000298504 00000 n 0000298588 00000 n 0000298730 00000 n 0000298814 00000 n 0000298956 00000 n 0000299041 00000 n 0000299183 00000 n 0000299325 00000 n 0000299467 00000 n 0000299609 00000 n 0000299692 00000 n 0000299834 00000 n 0000299976 00000 n 0000300059 00000 n 0000300201 00000 n 0000300284 00000 n 0000300426 00000 n 0000300509 00000 n 0000300651 00000 n 0000300734 00000 n 0000300876 00000 n 0000300961 00000 n 0000301103 00000 n 0000301187 00000 n 0000301329 00000 n 0000301412 00000 n 0000301554 00000 n 0000301696 00000 n 0000303879 00000 n 0000303901 00000 n 0000304354 00000 n 0000304568 00000 n 0000304710 00000 n 0000304852 00000 n 0000304935 00000 n 0000305077 00000 n 0000305161 00000 n 0000305303 00000 n 0000305387 00000 n 0000305529 00000 n 0000305613 00000 n 0000305755 00000 n 0000305839 00000 n 0000305981 00000 n 0000306065 00000 n 0000306207 00000 n 0000306291 00000 n 0000306434 00000 n 0000306519 00000 n 0000306663 00000 n 0000306806 00000 n 0000306891 00000 n 0000307035 00000 n 0000307120 00000 n 0000307264 00000 n 0000307408 00000 n 0000307493 00000 n 0000307637 00000 n 0000307722 00000 n 0000307866 00000 n 0000307951 00000 n 0000308095 00000 n 0000308239 00000 n 0000308324 00000 n 0000308468 00000 n 0000308553 00000 n 0000308697 00000 n 0000308840 00000 n 0000308924 00000 n 0000309068 00000 n 0000309153 00000 n 0000309297 00000 n 0000309382 00000 n 0000309526 00000 n 0000309611 00000 n 0000309755 00000 n 0000309839 00000 n 0000309983 00000 n 0000310068 00000 n 0000310212 00000 n 0000310297 00000 n 0000310441 00000 n 0000310584 00000 n 0000310727 00000 n 0000310870 00000 n 0000311012 00000 n 0000311097 00000 n 0000311239 00000 n 0000311324 00000 n 0000311466 00000 n 0000311550 00000 n 0000311694 00000 n 0000311779 00000 n 0000311923 00000 n 0000312005 00000 n 0000312149 00000 n 0000312292 00000 n 0000312435 00000 n 0000312579 00000 n 0000312664 00000 n 0000312808 00000 n 0000312893 00000 n 0000313037 00000 n 0000313123 00000 n 0000313267 00000 n 0000313351 00000 n 0000313495 00000 n 0000313579 00000 n 0000313723 00000 n 0000313808 00000 n 0000313952 00000 n 0000314038 00000 n 0000314182 00000 n 0000314267 00000 n 0000314411 00000 n 0000314496 00000 n 0000314640 00000 n 0000314726 00000 n 0000314870 00000 n 0000314954 00000 n 0000315098 00000 n 0000315180 00000 n 0000315324 00000 n 0000315468 00000 n 0000315611 00000 n 0000315695 00000 n 0000315839 00000 n 0000315983 00000 n 0000316066 00000 n 0000316210 00000 n 0000316353 00000 n 0000316496 00000 n 0000316639 00000 n 0000316782 00000 n 0000316925 00000 n 0000317010 00000 n 0000317154 00000 n 0000317239 00000 n 0000317383 00000 n 0000317526 00000 n 0000317611 00000 n 0000317755 00000 n 0000317839 00000 n 0000317983 00000 n 0000318126 00000 n 0000318269 00000 n 0000318354 00000 n 0000318498 00000 n 0000318583 00000 n 0000318727 00000 n 0000318812 00000 n 0000318955 00000 n 0000319040 00000 n 0000319182 00000 n 0000319267 00000 n 0000319409 00000 n 0000322010 00000 n 0000322033 00000 n 0000322713 00000 n 0000322930 00000 n 0000323015 00000 n 0000323159 00000 n 0000323244 00000 n 0000323386 00000 n 0000323470 00000 n 0000323614 00000 n 0000323756 00000 n 0000323841 00000 n 0000323985 00000 n 0000324070 00000 n 0000324214 00000 n 0000324299 00000 n 0000324443 00000 n 0000324528 00000 n 0000324672 00000 n 0000324757 00000 n 0000324901 00000 n 0000325044 00000 n 0000325187 00000 n 0000325272 00000 n 0000325416 00000 n 0000325501 00000 n 0000325645 00000 n 0000325730 00000 n 0000325874 00000 n 0000325959 00000 n 0000326103 00000 n 0000326245 00000 n 0000326388 00000 n 0000326473 00000 n 0000326617 00000 n 0000326702 00000 n 0000326846 00000 n 0000326990 00000 n 0000327134 00000 n 0000327278 00000 n 0000327363 00000 n 0000327507 00000 n 0000327651 00000 n 0000327794 00000 n 0000327877 00000 n 0000328021 00000 n 0000328164 00000 n 0000328307 00000 n 0000328451 00000 n 0000328536 00000 n 0000328679 00000 n 0000328763 00000 n 0000328905 00000 n 0000328990 00000 n 0000329132 00000 n 0000329218 00000 n 0000329362 00000 n 0000329505 00000 n 0000329648 00000 n 0000329733 00000 n 0000329877 00000 n 0000329962 00000 n 0000330106 00000 n 0000330190 00000 n 0000330334 00000 n 0000330419 00000 n 0000330563 00000 n 0000330648 00000 n 0000330792 00000 n 0000330936 00000 n 0000331079 00000 n 0000331222 00000 n 0000331307 00000 n 0000331451 00000 n 0000331594 00000 n 0000331737 00000 n 0000331823 00000 n 0000331967 00000 n 0000332053 00000 n 0000332197 00000 n 0000332281 00000 n 0000332425 00000 n 0000332511 00000 n 0000332655 00000 n 0000332740 00000 n 0000332884 00000 n 0000332970 00000 n 0000333114 00000 n 0000333258 00000 n 0000333344 00000 n 0000333488 00000 n 0000333632 00000 n 0000333776 00000 n 0000333920 00000 n 0000334064 00000 n 0000334208 00000 n 0000334350 00000 n 0000336588 00000 n 0000336611 00000 n 0000337173 00000 n 0000337390 00000 n 0000337534 00000 n 0000337619 00000 n 0000337763 00000 n 0000337906 00000 n 0000338050 00000 n 0000338194 00000 n 0000338338 00000 n 0000338423 00000 n 0000338567 00000 n 0000338710 00000 n 0000338854 00000 n 0000338939 00000 n 0000339083 00000 n 0000339168 00000 n 0000339312 00000 n 0000339396 00000 n 0000339540 00000 n 0000339625 00000 n 0000339769 00000 n 0000339912 00000 n 0000340056 00000 n 0000340200 00000 n 0000340285 00000 n 0000340429 00000 n 0000340573 00000 n 0000340658 00000 n 0000340802 00000 n 0000340946 00000 n 0000341089 00000 n 0000341232 00000 n 0000341316 00000 n 0000341460 00000 n 0000341603 00000 n 0000341747 00000 n 0000341889 00000 n 0000342031 00000 n 0000342174 00000 n 0000342318 00000 n 0000342461 00000 n 0000342604 00000 n 0000342748 00000 n 0000342892 00000 n 0000343035 00000 n 0000343179 00000 n 0000343322 00000 n 0000343465 00000 n 0000343608 00000 n 0000343751 00000 n 0000343835 00000 n 0000343979 00000 n 0000344123 00000 n 0000344267 00000 n 0000344351 00000 n 0000344495 00000 n 0000344638 00000 n 0000344782 00000 n 0000344866 00000 n 0000345010 00000 n 0000345094 00000 n 0000345238 00000 n 0000345382 00000 n 0000345466 00000 n 0000345610 00000 n 0000345753 00000 n 0000345896 00000 n 0000346038 00000 n 0000346179 00000 n 0000346320 00000 n 0000348509 00000 n 0000348532 00000 n 0000349040 00000 n 0000349257 00000 n 0000349342 00000 n 0000349486 00000 n 0000349569 00000 n 0000349713 00000 n 0000349856 00000 n 0000350000 00000 n 0000350143 00000 n 0000350284 00000 n 0000350426 00000 n 0000350567 00000 n 0000350708 00000 n 0000350850 00000 n 0000350992 00000 n 0000351133 00000 n 0000351277 00000 n 0000351421 00000 n 0000351564 00000 n 0000351650 00000 n 0000351793 00000 n 0000351936 00000 n 0000352079 00000 n 0000352222 00000 n 0000352364 00000 n 0000352505 00000 n 0000352648 00000 n 0000352792 00000 n 0000352935 00000 n 0000353078 00000 n 0000353221 00000 n 0000353365 00000 n 0000353509 00000 n 0000353653 00000 n 0000353797 00000 n 0000353941 00000 n 0000354085 00000 n 0000354229 00000 n 0000354373 00000 n 0000354516 00000 n 0000354660 00000 n 0000354803 00000 n 0000354947 00000 n 0000355091 00000 n 0000355235 00000 n 0000355379 00000 n 0000355523 00000 n 0000355667 00000 n 0000355811 00000 n 0000355955 00000 n 0000356096 00000 n 0000358137 00000 n 0000358160 00000 n 0000358596 00000 n 0000358813 00000 n 0000358957 00000 n 0000359100 00000 n 0000359243 00000 n 0000359386 00000 n 0000359529 00000 n 0000359672 00000 n 0000359815 00000 n 0000359958 00000 n 0000360101 00000 n 0000360244 00000 n 0000360387 00000 n 0000360530 00000 n 0000360673 00000 n 0000360816 00000 n 0000360959 00000 n 0000361102 00000 n 0000361245 00000 n 0000361388 00000 n 0000361531 00000 n 0000361674 00000 n 0000361817 00000 n 0000361960 00000 n 0000362103 00000 n 0000362246 00000 n 0000362389 00000 n 0000362532 00000 n 0000362675 00000 n 0000362818 00000 n 0000362961 00000 n 0000363104 00000 n 0000363247 00000 n 0000363390 00000 n 0000363475 00000 n 0000363619 00000 n 0000363760 00000 n 0000363903 00000 n 0000364047 00000 n 0000364191 00000 n 0000364335 00000 n 0000364479 00000 n 0000364623 00000 n 0000364767 00000 n 0000364911 00000 n 0000365055 00000 n 0000365199 00000 n 0000365342 00000 n 0000365486 00000 n 0000365630 00000 n 0000365774 00000 n 0000365918 00000 n 0000366062 00000 n 0000366206 00000 n 0000366350 00000 n 0000366494 00000 n 0000366638 00000 n 0000366782 00000 n 0000366926 00000 n 0000367011 00000 n 0000367155 00000 n 0000367299 00000 n 0000367443 00000 n 0000367586 00000 n 0000367730 00000 n 0000367874 00000 n 0000368018 00000 n 0000368102 00000 n 0000368246 00000 n 0000368387 00000 n 0000370778 00000 n 0000370801 00000 n 0000371408 00000 n 0000371625 00000 n 0000371768 00000 n 0000371911 00000 n 0000372054 00000 n 0000372197 00000 n 0000372341 00000 n 0000372485 00000 n 0000372628 00000 n 0000372771 00000 n 0000372914 00000 n 0000373057 00000 n 0000373201 00000 n 0000373345 00000 n 0000373489 00000 n 0000373574 00000 n 0000373718 00000 n 0000373802 00000 n 0000373946 00000 n 0000374090 00000 n 0000374233 00000 n 0000374376 00000 n 0000374519 00000 n 0000374662 00000 n 0000374806 00000 n 0000374950 00000 n 0000375094 00000 n 0000375238 00000 n 0000375381 00000 n 0000375524 00000 n 0000375667 00000 n 0000375808 00000 n 0000375951 00000 n 0000376095 00000 n 0000376239 00000 n 0000376382 00000 n 0000376525 00000 n 0000376667 00000 n 0000376808 00000 n 0000376951 00000 n 0000377095 00000 n 0000377239 00000 n 0000377383 00000 n 0000377527 00000 n 0000377671 00000 n 0000377815 00000 n 0000377959 00000 n 0000378103 00000 n 0000378247 00000 n 0000378391 00000 n 0000378535 00000 n 0000378679 00000 n 0000378823 00000 n 0000378967 00000 n 0000379110 00000 n 0000379253 00000 n 0000379397 00000 n 0000379541 00000 n 0000379685 00000 n 0000379829 00000 n 0000379973 00000 n 0000380116 00000 n 0000380260 00000 n 0000380404 00000 n 0000380548 00000 n 0000380632 00000 n 0000380776 00000 n 0000380919 00000 n 0000381062 00000 n 0000381206 00000 n 0000381350 00000 n 0000381494 00000 n 0000381578 00000 n 0000381722 00000 n 0000381806 00000 n 0000381950 00000 n 0000382094 00000 n 0000382179 00000 n 0000382323 00000 n 0000382467 00000 n 0000382611 00000 n 0000382755 00000 n 0000382840 00000 n 0000382983 00000 n 0000383125 00000 n 0000385688 00000 n 0000385711 00000 n 0000386417 00000 n 0000386634 00000 n 0000386719 00000 n 0000386863 00000 n 0000387007 00000 n 0000387151 00000 n 0000387295 00000 n 0000387438 00000 n 0000387581 00000 n 0000387724 00000 n 0000387868 00000 n 0000388011 00000 n 0000388155 00000 n 0000388299 00000 n 0000388443 00000 n 0000388587 00000 n 0000388731 00000 n 0000388875 00000 n 0000389018 00000 n 0000389162 00000 n 0000389306 00000 n 0000389450 00000 n 0000389594 00000 n 0000389738 00000 n 0000389881 00000 n 0000390024 00000 n 0000390168 00000 n 0000390312 00000 n 0000390456 00000 n 0000390600 00000 n 0000390744 00000 n 0000390828 00000 n 0000390972 00000 n 0000391115 00000 n 0000391257 00000 n 0000391400 00000 n 0000391544 00000 n 0000391688 00000 n 0000391832 00000 n 0000391975 00000 n 0000392119 00000 n 0000392263 00000 n 0000392407 00000 n 0000392551 00000 n 0000392695 00000 n 0000392838 00000 n 0000392981 00000 n 0000393066 00000 n 0000393210 00000 n 0000393294 00000 n 0000393438 00000 n 0000393522 00000 n 0000393666 00000 n 0000393809 00000 n 0000393953 00000 n 0000394038 00000 n 0000394182 00000 n 0000394267 00000 n 0000394411 00000 n 0000394496 00000 n 0000394640 00000 n 0000394724 00000 n 0000394868 00000 n 0000395012 00000 n 0000395156 00000 n 0000395300 00000 n 0000395444 00000 n 0000395588 00000 n 0000395731 00000 n 0000395875 00000 n 0000396019 00000 n 0000396161 00000 n 0000398385 00000 n 0000398408 00000 n 0000398979 00000 n 0000399196 00000 n 0000399340 00000 n 0000399484 00000 n 0000399627 00000 n 0000399771 00000 n 0000399915 00000 n 0000400059 00000 n 0000400203 00000 n 0000400346 00000 n 0000400489 00000 n 0000400633 00000 n 0000400718 00000 n 0000400862 00000 n 0000401005 00000 n 0000401149 00000 n 0000401292 00000 n 0000401435 00000 n 0000401579 00000 n 0000401723 00000 n 0000401867 00000 n 0000402011 00000 n 0000402154 00000 n 0000402296 00000 n 0000402440 00000 n 0000402583 00000 n 0000402726 00000 n 0000402869 00000 n 0000403012 00000 n 0000403156 00000 n 0000403299 00000 n 0000403441 00000 n 0000403583 00000 n 0000403665 00000 n 0000403809 00000 n 0000403952 00000 n 0000404096 00000 n 0000404240 00000 n 0000404384 00000 n 0000404528 00000 n 0000404672 00000 n 0000404816 00000 n 0000404960 00000 n 0000405104 00000 n 0000405248 00000 n 0000405392 00000 n 0000405536 00000 n 0000405679 00000 n 0000405823 00000 n 0000405967 00000 n 0000406111 00000 n 0000406255 00000 n 0000406399 00000 n 0000406543 00000 n 0000406686 00000 n 0000406830 00000 n 0000406974 00000 n 0000407118 00000 n 0000407262 00000 n 0000407406 00000 n 0000407550 00000 n 0000407694 00000 n 0000407838 00000 n 0000407982 00000 n 0000408126 00000 n 0000408270 00000 n 0000408414 00000 n 0000408557 00000 n 0000408698 00000 n 0000410989 00000 n 0000411012 00000 n 0000411619 00000 n 0000411836 00000 n 0000411979 00000 n 0000412061 00000 n 0000412205 00000 n 0000412349 00000 n 0000412492 00000 n 0000412636 00000 n 0000412780 00000 n 0000412924 00000 n 0000413068 00000 n 0000413211 00000 n 0000413354 00000 n 0000413497 00000 n 0000413640 00000 n 0000413784 00000 n 0000413927 00000 n 0000414070 00000 n 0000414214 00000 n 0000414358 00000 n 0000414502 00000 n 0000414646 00000 n 0000415898 00000 n 0000415921 00000 n 0000416114 00000 n 0000416331 00000 n 0000416673 00000 n 0000416695 00000 n 0000416893 00000 n 0000416975 00000 n 0000417059 00000 n 0000417144 00000 n 0000417229 00000 n 0000417314 00000 n 0000417399 00000 n 0000417484 00000 n 0000417569 00000 n 0000417654 00000 n 0000417739 00000 n 0000417820 00000 n 0000455498 00000 n 0000418009 00000 n 0000417926 00000 n 0000418123 00000 n 0000419234 00000 n 0000418270 00000 n 0000419070 00000 n 0000418490 00000 n 0000418894 00000 n 0000418686 00000 n 0000420058 00000 n 0000419470 00000 n 0000419858 00000 n 0000419650 00000 n 0000422487 00000 n 0000420306 00000 n 0000421559 00000 n 0000421255 00000 n 0000420541 00000 n 0000421083 00000 n 0000420732 00000 n 0000421807 00000 n 0000422067 00000 n 0000422287 00000 n 0000427754 00000 n 0000422807 00000 n 0000427622 00000 n 0000422958 00000 n 0000423522 00000 n 0000423190 00000 n 0000423322 00000 n 0000425318 00000 n 0000423822 00000 n 0000425118 00000 n 0000423970 00000 n 0000424902 00000 n 0000424206 00000 n 0000424634 00000 n 0000424454 00000 n 0000425510 00000 n 0000425790 00000 n 0000427366 00000 n 0000426018 00000 n 0000426250 00000 n 0000426498 00000 n 0000426786 00000 n 0000427086 00000 n 0000428666 00000 n 0000428014 00000 n 0000428454 00000 n 0000428186 00000 n 0000434371 00000 n 0000428951 00000 n 0000434115 00000 n 0000430387 00000 n 0000429127 00000 n 0000430107 00000 n 0000429307 00000 n 0000429623 00000 n 0000429891 00000 n 0000432359 00000 n 0000430567 00000 n 0000432115 00000 n 0000430819 00000 n 0000431127 00000 n 0000431331 00000 n 0000431563 00000 n 0000431839 00000 n 0000432559 00000 n 0000433847 00000 n 0000432783 00000 n 0000432983 00000 n 0000433299 00000 n 0000433551 00000 n 0000435095 00000 n 0000434679 00000 n 0000434883 00000 n 0000435279 00000 n 0000435491 00000 n 0000435576 00000 n 0000435682 00000 n 0000435796 00000 n 0000435914 00000 n 0000436025 00000 n 0000436123 00000 n 0000437250 00000 n 0000437273 00000 n 0000437381 00000 n 0000437497 00000 n 0000437610 00000 n 0000437730 00000 n 0000437840 00000 n 0000437999 00000 n 0000438149 00000 n 0000438251 00000 n 0000438368 00000 n 0000438488 00000 n 0000438611 00000 n 0000438722 00000 n 0000438830 00000 n 0000438944 00000 n 0000439061 00000 n 0000439187 00000 n 0000439328 00000 n 0000439448 00000 n 0000439559 00000 n 0000439646 00000 n 0000439727 00000 n 0000439832 00000 n 0000439949 00000 n 0000440039 00000 n 0000440147 00000 n 0000440249 00000 n 0000440354 00000 n 0000440435 00000 n 0000440534 00000 n 0000440621 00000 n 0000440726 00000 n 0000440825 00000 n 0000440903 00000 n 0000441001 00000 n 0000441121 00000 n 0000441226 00000 n 0000441331 00000 n 0000441454 00000 n 0000441571 00000 n 0000441646 00000 n 0000441790 00000 n 0000441880 00000 n 0000441970 00000 n 0000442063 00000 n 0000442174 00000 n 0000442279 00000 n 0000442387 00000 n 0000442489 00000 n 0000442587 00000 n 0000442685 00000 n 0000442826 00000 n 0000442961 00000 n 0000443057 00000 n 0000443144 00000 n 0000443249 00000 n 0000443348 00000 n 0000443426 00000 n 0000443522 00000 n 0000443612 00000 n 0000443711 00000 n 0000443819 00000 n 0000443933 00000 n 0000444059 00000 n 0000444179 00000 n 0000444257 00000 n 0000444353 00000 n 0000444443 00000 n 0000444542 00000 n 0000444660 00000 n 0000444747 00000 n 0000444856 00000 n 0000444935 00000 n 0000445025 00000 n 0000445121 00000 n 0000445226 00000 n 0000445343 00000 n 0000445442 00000 n 0000445542 00000 n 0000445623 00000 n 0000445731 00000 n 0000445848 00000 n 0000445965 00000 n 0000446122 00000 n 0000446236 00000 n 0000446356 00000 n 0000446509 00000 n 0000446602 00000 n 0000446713 00000 n 0000446818 00000 n 0000446914 00000 n 0000447014 00000 n 0000447125 00000 n 0000447254 00000 n 0000447377 00000 n 0000447503 00000 n 0000447638 00000 n 0000447767 00000 n 0000447874 00000 n 0000447979 00000 n 0000448078 00000 n 0000448198 00000 n 0000448303 00000 n 0000448405 00000 n 0000448526 00000 n 0000448640 00000 n 0000448733 00000 n 0000448845 00000 n 0000448950 00000 n 0000449031 00000 n 0000449130 00000 n 0000449223 00000 n 0000449334 00000 n 0000449439 00000 n 0000449523 00000 n 0000449625 00000 n 0000449721 00000 n 0000449795 00000 n 0000449891 00000 n 0000449969 00000 n 0000450065 00000 n 0000450155 00000 n 0000450236 00000 n 0000450320 00000 n 0000450423 00000 n 0000450519 00000 n 0000450619 00000 n 0000450712 00000 n 0000450805 00000 n 0000450886 00000 n 0000451041 00000 n 0000451199 00000 n 0000451322 00000 n 0000451454 00000 n 0000451565 00000 n 0000451657 00000 n 0000451762 00000 n 0000451855 00000 n 0000451933 00000 n 0000452038 00000 n 0000452155 00000 n 0000452241 00000 n 0000454369 00000 n 0000454812 00000 n 0000455554 00000 n trailer << /Root 1906 0 R /Info 1 0 R /ID [<9B40BE6FD2C78061153D01693DDAA04D> <9B40BE6FD2C78061153D01693DDAA04D>] /Size 1909 >> startxref 455594 %%EOF systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/SystemTap_Beginners_Guide.xml000066400000000000000000000027351414446751200277550ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Tips_Tricks.xml000066400000000000000000000012121414446751200251360ustar00rootroot00000000000000 Tips and Tricks - This chapter covers miscellaneous tips/tricks - This is a tentative section, and will only be included if content can be provided - add use of exit() here - add "basic constructs" here; that is, using if/else, while loops, for loops, examples; if done, consider moving up to before Useful_SystemTap_Scripts.xm, after Understanding_How_SystemTap_Works.xml systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Understanding_How_SystemTap_Works.xml000066400000000000000000000200141414446751200315210ustar00rootroot00000000000000 Understanding How SystemTap Works Short summary; probes, handlers, events Understanding How SystemTap Works SystemTap allows users to write and reuse simple scripts to deeply examine the activities of a running Linux system. These scripts can be designed to extract data, filter it, and summarize it quickly (and safely), enabling the diagnosis of complex performance (or even functional) problems. Understanding How SystemTap Works events and handlers events and handlers handlers and events The essential idea behind a SystemTap script is to name events, and to give them handlers. When SystemTap runs the script, SystemTap monitors for the event; once the event occurs, the Linux kernel then runs the handler as a quick sub-routine, then resumes. Understanding How SystemTap Works event types event types Understanding How SystemTap Works There are several kind of events; entering/exiting a function, timer expiration, session termination, etc. A handler is a series of script language statements that specify the work to be done whenever the event occurs. This work normally includes extracting data from the event context, storing them into internal variables, and printing results.

    Architecture ** add diagram, describe architecture, enumerate common tools ** architecture diagram must be simpler, if at all included ** add design advantages? e.g. "building kmods on-the-fly allows safer execution of script etc etc" Understanding How SystemTap Works architecture architecture of SystemTap SystemTap architecture A SystemTap session begins when you run a SystemTap script. This session occurs in the following fashion: SystemTap Session Understanding How SystemTap Works SystemTap sessions SystemTap sessions sessions, SystemTap First, SystemTap checks the script against the existing tapset library (normally in /usr/share/systemtap/tapset/ for any tapsets used. SystemTap will then substitute any located tapsets with their corresponding definitions in the tapset library. SystemTap then translates the script to C, running the system C compiler to create a kernel module from it. The tools that perform this step are contained in the systemtap package (refer to for more information). SystemTap loads the module, then enables all the probes (events and handlers) in the script. The staprun in the systemtap-runtime package (refer to for more information) provides this functionality. As the events occur, their corresponding handlers are executed. Once the SystemTap session is terminated, the probes are disabled, and the kernel module is unloaded. This sequence is driven from a single command-line program: stap. This program is SystemTap's main front-end tool. For more information about stap, refer to man stap (once SystemTap is properly installed on your machine).
    Tapsets Tapsets definition of definition, significance, difference with stap scripts (previous section), library of tapsets in system: location Tapsets are scripts that form a library of pre-written probes and functions to be used in SystemTap scripts. When a user runs a SystemTap script, SystemTap checks the script's probe events and handlers against the tapset library; SystemTap then loads the corresponding probes and functions before translating the script to C (refer to for information on what transpires in a SystemTap session). Like SystemTap scripts, tapsets use the file name extension .stp. The standard library of tapsets is located in /usr/share/systemtap/tapset/ by default. However, unlike SystemTap scripts, tapsets are not meant for direct execution; rather, they constitute the library from which other scripts can pull definitions. The tapset library is an abstraction layer designed to make it easier for users to define events and functions. Tapsets provide useful aliases for functions that users may want to specify as an event; knowing the proper alias to use is, for the most part, easier than remembering specific kernel functions that might vary between kernel versions. Several handlers and functions in and are defined in tapsets. For example, thread_indent() is defined in indent.stp. any other details to be included? i dont want to dwell too long here, though, since IMHO tapset development is beyond the scope of this "beginner's guide"
    systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Advanced_Scripts.xml000066400000000000000000000030041414446751200274400ustar00rootroot00000000000000 Useful SystemTap Scripts This chapter contains several advanced applications of SystemTap. The scripts enumerated herein combine SystemTap scripts with other tools in order to address some complex administrative tasks. All of these scripts are available at the following link: http://sourceware.org/systemtap/wiki/WarStories?action=fullsearch&context=180&value=traceio2&titlesearch=Titles Due to the relative length of the scripts discussed in this chapter, the full version of each script is documented in . this chapter will feature the following scripts: http://sourceware.org/systemtap/wiki/WSPSTimeouts?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPfiles?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPSTimeouts?highlight=%28%28WarStories%29%29 WAIT http://sourceware.org/systemtap/wiki/WSPanicOnOom?highlight=((WarStories)) http://sourceware.org/systemtap/wiki/WSPfiles?highlight=((WarStories)) systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Disk.xml000066400000000000000000000110271414446751200265470ustar00rootroot00000000000000
    Real-Time Graphing of Disk and CPU Utilization http://sourceware.org/systemtap/examples/subsystem-index.html Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp This section describes how you can graph disk and CPU utilization in real-time, that is, in samples of 1 second each. disk-usage-graph.stp #! stap # disk I/O stats probe begin { qnames["ioblock"] ++; qsq_start ("ioblock") } probe ioblock.request { qs_wait ("ioblock") qs_run("ioblock") } probe ioblock.end { qs_done ("ioblock") } # CPU utilization probe begin { qnames["cpu"] ++; qsq_start ("cpu") } probe scheduler.cpu_on { if (!idle) {qs_wait ("cpu") qs_run ("cpu") }} probe scheduler.cpu_off { if (!idle) qs_done ("cpu") } # ------------------------------------------------------------------------ # utilization history tracking global N probe begin { N = 50 } global qnames, util, histidx function qsq_util_reset(q) { u=qsq_utilization (q, 100) qsq_start (q) return u } probe timer.ms(100) { # collect utilization percentages frequently histidx = (histidx + 1) % N # into circular buffer foreach (q in qnames) util[histidx,q] = qsq_util_reset(q) } # ------------------------------------------------------------------------ # general gnuplot graphical report generation probe timer.ms(1000) { # emit gnuplot command to display recent history printf ("set yrange [0:100]\n") printf ("plot ") foreach (q in qnames+) { if (++nq >= 2) printf (", ") printf ("'-' title \"%s\" with lines", q) } printf ("\n") foreach (q in qnames+) { for (i = (histidx + 1) % N; i != histidx; i = (i + 1) % N) printf("%d\n", util[i,q]) printf ("e\n") } printf ("pause 1\n") } outputs raw statistics on both CPU and disk usage per second. I/O usage is tracked through the events ioblock.request and ioblock.request.end, which track each request (and request completion) for a generic block I/O. CPU usage is tracked through scheduler.cpu_on and scheduler.cpu_off, which are activated whenever a process begins (and ends) a command execution on a CPU.
    gnuplot Running by itself hardly presents any data that is useful, as in . Raw disk-usage-graph.stp Output [...] 62 5 3 4 6 4 4 5 5 3 6 5 e pause 1 However, refining the output of through gnuplot presents us with a more useful result. gnuplot is a lightweight, command-line driven plotting program that helps you display data in a graphical format. By piping output to gnuplot (as in stap disk-usage-gr http://sourceware.org/systemtap/examples/subsystem-index.html Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp aph.stp | gnuplot), we get a graphical output similar to the following:
    Graphical Output Sample Sample output
presents a cleaner, more useful graphical output. This graph can show you the level of utilization for both I/O and CPU, in real time. question: does this script also capture stap process? that is, does the graph also include CPU utilization by systemtap while the script is running? systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-IO.xml000066400000000000000000000014571414446751200261720ustar00rootroot00000000000000
I/O Subsystem http://sourceware.org/systemtap/examples/subsystem-index.html Tally Reschedule Reason During AIO io_submit Call - http://sourceware.org/systemtap/examples/io/io_submit.stp Periodically Print I/O Activity by Process Name - http://sourceware.org/systemtap/examples/io/iotop.stp Track Cumulative I/O Activity by Process Name - http://sourceware.org/systemtap/examples/io/traceio.stp Watch I/O Activity on a Particular Device http://sourceware.org/systemtap/examples/io/traceio2.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Kernel.xml000066400000000000000000000014151414446751200270750ustar00rootroot00000000000000
Kernel http://sourceware.org/systemtap/examples/subsystem-index.html Tracing Calls for Sections of Code - http://sourceware.org/systemtap/examples/general/para-callgraph.stp Profile kernel functions - http://sourceware.org/systemtap/examples/process/pf2.stp Count Times Functions Called - http://sourceware.org/systemtap/examples/profiling/functioncallcount.stp Profile kernel functions - http://sourceware.org/systemtap/examples/profiling/thread-times.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Network.xml000066400000000000000000000011001414446751200272750ustar00rootroot00000000000000
Network http://sourceware.org/systemtap/examples/subsystem-index.html Periodic Listing of Processes Using Network Interfaces - http://sourceware.org/systemtap/examples/network/nettop.stp Trace Functions called in Network Socket Code - http://sourceware.org/systemtap/examples/network/socket-trace.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Others.xml000066400000000000000000000013331414446751200271200ustar00rootroot00000000000000
Other Useful Scripts http://sourceware.org/systemtap/examples/subsystem-index.html SCHEDULER - Generating Backtraces of Threads Waiting for IO Operations - http://sourceware.org/systemtap/examples/process/sleepingBeauties.stp LOCKING - System-Wide Futex Contention - http://sourceware.org/systemtap/examples/process/futexes.stp CPU - Graphing Disk and CPU Utilization - http://sourceware.org/systemtap/examples/general/graphs.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Signals.xml000066400000000000000000000014101414446751200272500ustar00rootroot00000000000000
Signals http://sourceware.org/systemtap/examples/subsystem-index.html Signal Counts by Process ID - http://sourceware.org/systemtap/examples/process/sig_by_pid.stp Signal Counts by Process Name - http://sourceware.org/systemtap/examples/process/sig_by_proc.stp Track SIGKILL Signals - http://sourceware.org/systemtap/examples/process/sigkill.stp System-Wide Count of Syscalls by PID - http://sourceware.org/systemtap/examples/process/syscalls_by_pid.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-Syscalls.xml000066400000000000000000000016701414446751200274550ustar00rootroot00000000000000
System Calls http://sourceware.org/systemtap/examples/subsystem-index.html Trace Time Spent in Read and Write for Files - http://sourceware.org/systemtap/examples/io/iotime.stp Trace Time Spent in nanosleep Syscalls - http://sourceware.org/systemtap/examples/process/sleeptime.stp System-Wide Count of Syscalls by PID - http://sourceware.org/systemtap/examples/process/syscalls_by_pid.stp System-Wide Count of Syscalls by Executable - http://sourceware.org/systemtap/examples/process/syscalls_by_proc.stp Trace Time Spent in wait4 Syscalls - http://sourceware.org/systemtap/examples/process/wait4time.stp
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-disktop.xml000066400000000000000000000163121414446751200273340ustar00rootroot00000000000000
Summarizing Disk Read/Write Traffic script examples summarizing disk I/O traffic examples of SystemTap scripts summarizing disk I/O traffic summarizing disk I/O traffic script examples NO ENTRY IN WAR STORIES: Summarize Disk Read/Write Traffic http://sourceware.org/systemtap/examples/io/disktop.stp disk I/O traffic, summarizing script examples I/O traffic, summarizing script examples heaviest disk reads/writes, identifying script examples summarizing disk I/O traffic script examples identifying heaviest disk reads/writes script examples This section describes how to identify which processes are performing the heaviest disk reads/writes to the system. disktop.stp outputs the top ten processes responsible for the heaviest reads/writes to disk. displays a sample output for this script, and includes the following data per listed process: UID — user ID. A user ID of 0 refers to the root user. PID — the ID of the listed process. PPID — the process ID of the listed process's parent process. CMD — the name of the listed process. DEVICE — which storage device the listed process is reading from or writing to. T — the type of action performed by the listed process; W refers to write, while R refers to read. BYTES — the amount of data read to or written from disk. script examples ctime(), example of usage examples of SystemTap scripts ctime(), example of usage ctime(), example of usage script examples The time and date in the output of is returned by the functions ctime() and gettimeofday_s(). ctime() derives calendar time in terms of seconds passed since the Unix epoch (January 1, 1970). gettimeofday_s() counts the actual number of seconds since Unix epoch, which gives a fairly accurate human-readable timestamp for the output. local variables sample usage $return variables (local) sample usage $return $return sample usage local variables In this script, the $return is a local variable that stores the actual number of bytes each process reads or writes from the virtual file system. $return can only be used in return probes (for example, vfs.read.return and vfs.read.return). <xref linkend="scriptdisktop"/> Sample Output [...] Mon Sep 29 03:38:28 2008 , Average: 19Kb/sec, Read: 7Kb, Write: 89Kb UID PID PPID CMD DEVICE T BYTES 0 26319 26294 firefox sda5 W 90229 0 2758 2757 pam_timestamp_c sda5 R 8064 0 2885 1 cupsd sda5 W 1678 Mon Sep 29 03:38:38 2008 , Average: 1Kb/sec, Read: 7Kb, Write: 1Kb UID PID PPID CMD DEVICE T BYTES 0 2758 2757 pam_timestamp_c sda5 R 8064 0 2885 1 cupsd sda5 W 1678
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-dropwatch.xml000066400000000000000000000103551414446751200276530ustar00rootroot00000000000000
Monitoring Network Packets Drops in Kernel script examples network profiling examples of SystemTap scripts network profiling network profiling examples of SystemTap scripts profiling the network examples of SystemTap scripts network traffic, monitoring examples of SystemTap scripts tracepoint The network stack in Linux can discard packets for various reasons. Some Linux kernels include a tracepoint, kernel.trace("kfree_skb"), which easily tracks where packets are discarded. uses kernel.trace("kfree_skb") to trace packet discards; the script summarizes which locations discard packets every five-second interval. dropwatch.stp The kernel.trace("kfree_skb") traces which places in the kernel drop network packets. The kernel.trace("kfree_skb") has two arguments: a pointer to the buffer being freed ($skb) and the location in kernel code the buffer is being freed ($location). The script provides the function containing $location where possible. The information to map $location back to the function is not in the instrumentation by default. On SystemTap 1.4 the --all-modules option will include the required mapping information and the following command can be used to run the script: stap --all-modules dropwatch.stp On older versions of SystemTap you can use the following command to emulate the --all-modules option: stap -dkernel \ `cat /proc/modules | awk 'BEGIN { ORS = " " } {print "-d"$1}'` \ dropwatch.stp Running the dropwatch.stp script 15 seconds would result in output similar in . The output lists the number of misses for each tracepoint location with either the function name or the address. <xref linkend="dropwatch"/> Sample Output Monitoring for dropped packets Tue Nov 17 00:26:51 2020 1762 packets dropped at unix_stream_recvmsg 4 packets dropped at tun_do_read 2 packets dropped at nf_hook_slow Tue Nov 17 00:26:56 2020 467 packets dropped at unix_stream_recvmsg 20 packets dropped at nf_hook_slow 6 packets dropped at tun_do_read Tue Nov 17 00:27:01 2020 446 packets dropped at unix_stream_recvmsg 4 packets dropped at tun_do_read 4 packets dropped at nf_hook_slow Stopping dropped packet monitor When the script is being compiled on one machine and run on another the --all-modules and /proc/modules directory are not available; the symname function will just print out the raw address. To make the raw address of packet drops more meaningful, refer to the /boot/System.map-`uname -r` file. This file lists the starting addresses for each function, allowing you to map the addresses in the output of to a specific function name. Given the following snippet of the /boot/System.map-`uname -r` file, the address 0xffffffff8149a8ed maps to the function unix_stream_recvmsg: [...] ffffffff8149a420 t unix_dgram_poll ffffffff8149a5e0 t unix_stream_recvmsg ffffffff8149ad00 t unix_find_other [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-functioncalls.xml000066400000000000000000000065351414446751200305310ustar00rootroot00000000000000
Counting Function Calls Made script examples tallying function calls examples of SystemTap scripts tallying function calls tallying function calls examples of SystemTap scripts counting function calls examples of SystemTap scripts function calls, tallying examples of SystemTap scripts WAR STORY: Function call count http://sourceware.org/systemtap/wiki/WSFunctionCallCount?highlight=((WarStories)) no script in examples This section describes how to identify how many times the system called a specific kernel function in a 30-second sample. Depending on the use of wildcards, you can also use this script to target multiple kernel functions. functioncallcount.stp takes the targeted kernel function as an argument. The argument supports wildcards, which enables you to target multiple kernel functions up to a certain extent. script examples timer.ms(), sample usage examples of SystemTap scripts timer.ms(), sample usage timer.ms(), sample usage examples of SystemTap scripts The output of contains the name of the function called and how many times it was called during the sample time (in alphabetical order). contains an excerpt from the output of stap functioncallcount.stp "*@mm/*.c": <xref linkend="countcalls"/> Sample Output [...] __vma_link 97 __vma_link_file 66 __vma_link_list 97 __vma_link_rb 97 __xchg 103 add_page_to_active_list 102 add_page_to_inactive_list 19 add_to_page_cache 19 add_to_page_cache_lru 7 all_vm_events 6 alloc_pages_node 4630 alloc_slabmgmt 67 anon_vma_alloc 62 anon_vma_free 62 anon_vma_lock 66 anon_vma_prepare 98 anon_vma_unlink 97 anon_vma_unlock 66 arch_get_unmapped_area_topdown 94 arch_get_unmapped_exec_area 3 arch_unmap_area_topdown 97 atomic_add 2 atomic_add_negative 97 atomic_dec_and_test 5153 atomic_inc 470 atomic_inc_and_test 1 [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-futexes.xml000066400000000000000000000117151414446751200273440ustar00rootroot00000000000000
Identifying Contended User-Space Locks script examples identifying contended user-space locks (futex contentions) examples of SystemTap scripts identifying contended user-space locks (futex contentions) identifying contended user-space locks (futex contentions) examples of SystemTap scripts contended user-space locks (futex contentions), identifying examples of SystemTap scripts WAR STORY: Futex contention http://sourceware.org/systemtap/wiki/WSFutexContention?highlight=((WarStories)) This section describes how to identify contended user-space locks throughout the system within a specific time period. The ability to identify contended user-space locks can help you investigate poor program performance that you suspect may be caused by futex contentions. futex contentions, identifying examples of SystemTap scripts futex contention, definition examples of SystemTap scripts script examples futex (lock) contentions examples of SystemTap scripts futex (lock) contentions futex (lock) contentions examples of SystemTap scripts Simply put, futex contention occurs when multiple processes are trying to access the same lock variable at the same time. This can result in a poor performance because the lock serializes execution; one process obtains the lock while the other processes must wait for the lock variable to become available again. script examples futex system call examples of SystemTap scripts futex system call futex system call examples of SystemTap scripts The script probes the futex system call to show lock contention. futexes.stp needs to be manually stopped; upon exit, it prints the following information: Name and ID of the process responsible for a contention The location of the contested lock variable How many times the lock variable was contended Average time of contention throughout the probe contains an excerpt from the output of upon exiting the script (after approximately 20 seconds). <xref linkend="futexcontention"/> Sample Output [...] automount[2825] lock 0x00bc7784 contended 18 times, 999931 avg us synergyc[3686] lock 0x0861e96c contended 192 times, 101991 avg us synergyc[3758] lock 0x08d98744 contended 192 times, 101990 avg us synergyc[3938] lock 0x0982a8b4 contended 192 times, 101997 avg us [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch.xml000066400000000000000000000122531414446751200300040ustar00rootroot00000000000000
Monitoring Reads and Writes to a File script examples monitoring reads and writes to a file examples of SystemTap scripts monitoring reads and writes to a file monitoring reads and writes to a file examples of SystemTap scripts file reads/writes, monitoring examples of SystemTap scripts reads/writes to a file, monitoring examples of SystemTap scripts writes/reads to a file, monitoring examples of SystemTap scripts WAR STORY: monitoring inode activity http://sourceware.org/systemtap/wiki/WSFileMonitor?highlight=((WarStories)) no script in examples This section describes how to monitor reads from and writes to a file in real time. inodewatch.stp need to add references to sources/man pages that explain how "dev_nr = $file->f_dentry->d_inode->i_sb->s_dev" and "($1 << 20 | $2)". takes the following information about the file as arguments on the command line: script examples file device number (integer format) examples of SystemTap scripts file device number (integer format) file device number (integer format) examples of SystemTap scripts device number of a file (integer format) examples of SystemTap scripts The file's major device number. The file's minor device number. The file's inode number. script examples stat -c, determining file device number (integer format) examples of SystemTap scripts stat -c, determining file device number (integer format) stat -c, determining file device number (integer format) examples of SystemTap scripts To get this information, use stat -c '%D %i' filename, where filename is an absolute path. For instance: to monitor /etc/crontab, run stat -c '%D %i' /etc/crontab first. This gives the following output: 805 1078319 script examples inode number examples of SystemTap scripts inode number inode number examples of SystemTap scripts 805 is the base-16 (hexadecimal) device number. The lower two digits are the minor device number and the upper digits are the major number. 1078319 is the inode number. To start monitoring /etc/crontab, run stap inodewatch.stp 0x8 0x05 1078319 (The 0x prefixes indicate base-16 values. The output of this command contains the name and ID of any process performing a read/write, the function it is performing (that is, vfs_read or vfs_write), the device number (in hex format), and the inode number. contains the output of stap inodewatch.stp 0x8 0x05 1078319 (when cat /etc/crontab is executed while the script is running) : <xref linkend="inodewatch"/> Sample Output cat(16437) vfs_read 0x800005/1078319 cat(16437) vfs_read 0x800005/1078319
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-inodewatch2.xml000066400000000000000000000057141414446751200300720ustar00rootroot00000000000000
Monitoring Changes to File Attributes script examples monitoring changes to file attributes examples of SystemTap scripts monitoring changes to file attributes monitoring changes to file attributes examples of SystemTap scripts changes to file attributes, monitoring examples of SystemTap scripts file attributes, monitoring changes to examples of SystemTap scripts WAR STORY: monitoring more inode activity http://sourceware.org/systemtap/wiki/WSFileMonitor2?highlight=((WarStories)) no script in examples This section describes how to monitor if any processes are changing the attributes of a targeted file, in real time. inodewatch2.stp Like from , takes the targeted file's device number (in integer format) and inode number as arguments. For more information on how to retrieve this information, refer to . The output for is similar to that of , except that also contains the attribute changes to the monitored file, as well as the ID of the user responsible (uid()). shows the output of while monitoring /home/joe/bigfile when user joe executes chmod 777 /home/joe/bigfile and chmod 666 /home/joe/bigfile. <xref linkend="inodewatch2"/> Sample Output chmod(17448) inode_setattr 0x800005/6011835 100777 500 chmod(17449) inode_setattr 0x800005/6011835 100666 500
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-ioblktime.xml000066400000000000000000000066531414446751200276450ustar00rootroot00000000000000
Periodically Print I/O Block Time script examples monitoring I/O block time examples of SystemTap scripts monitoring I/O block time monitoring I/O block time examples of SystemTap scripts I/O block time, monitoring examples of SystemTap scripts printing I/O block time (periodically) examples of SystemTap scripts This section describes how to track the amount of time each block I/O requests spends waiting for completion. This is useful in determining whether there are too many outstanding block I/O operations at any given time. ioblktime.stp computes the average waiting time for block I/O per device, and prints a list every 10 seconds. As always, you can revise this refresh rate by editing the specified value in probe timer.s(10), end {. In some cases, there can be too many outstanding block I/O operations, at which point the script can exceed the default number of MAXMAPENTRIES. MAXMAPENTRIES is the maximum number of rows in an array if the array size is not specified explicitly when declared. If the script exceeds the default MAXMAPENTRIES value of 2048, run the script again with the stap option -DMAXMAPENTRIES=10000. <xref linkend="ioblktime"/> Sample Output device rw total (us) count avg (us) sda W 9659 6 1609 dm-0 W 20278 6 3379 dm-0 R 20524 5 4104 sda R 19277 5 3855 displays the device name, operations performed (rw), total wait time of all operations (total(us)), number of operations (count), and average wait time for all those operations (avg (us)). The times tallied by the script are in microseconds.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotime.xml000066400000000000000000000123231414446751200271430ustar00rootroot00000000000000
Tracking I/O Time For Each File Read or Write script examples monitoring I/O time examples of SystemTap scripts monitoring I/O time monitoring I/O time examples of SystemTap scripts I/O time, monitoring examples of SystemTap scripts time of I/O examples of SystemTap scripts This section describes how to monitor the amount of time it takes for each process to read from or write to any file. This is useful to determine what files are slow to load on a given system. iotime.stp tracks each time a system call opens, closes, reads from, and writes to a file. For each file any system call accesses, counts the number of microseconds it takes for any reads or writes to finish and tracks the amount of data (in bytes) read from or written to the file. local variables sample usage $count variables (local) sample usage $count $count sample usage local variables also uses the local variable $count to track the amount of data (in bytes) that any system call attempts to read or write. Note that $return (as used in from ) stores the actual amount of data read/written. $count can only be used on probes that track data reads or writes (that is, syscall.read and syscall.write). <xref linkend="iotime"/> Sample Output [...] 825946 3364 (NetworkManager) access /sys/class/net/eth0/carrier read: 8190 write: 0 825955 3364 (NetworkManager) iotime /sys/class/net/eth0/carrier time: 9 [...] 117061 2460 (pcscd) access /dev/bus/usb/003/001 read: 43 write: 0 117065 2460 (pcscd) iotime /dev/bus/usb/003/001 time: 7 [...] 3973737 2886 (sendmail) access /proc/loadavg read: 4096 write: 0 3973744 2886 (sendmail) iotime /proc/loadavg time: 11 [...] prints out the following data: A timestamp, in microseconds. Process ID and process name. An access or iotime flag. The file accessed. If a process was able to read or write any data, a pair of access and iotime lines should appear together. The access line's timestamp refers to the time that a given process started accessing a file; at the end of the line, it will show the amount of data read/written (in bytes). The iotime line will show the amount of time (in microseconds) that the process took in order to perform the read or write. If an access line is not followed by an iotime line, it means that the process did not read or write any data.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-iotop.xml000066400000000000000000000070011414446751200270040ustar00rootroot00000000000000
Periodically Print I/O Activity script examples monitoring I/O activity examples of SystemTap scripts monitoring I/O activity monitoring I/O activity examples of SystemTap scripts I/O activity, monitoring examples of SystemTap scripts printing I/O activity (periodically) examples of SystemTap scripts This section describes how to monitor I/O activity on the system. iotop.stp prints out the top ten executables generating I/O traffic every 5-second interval, in descending order. Its output contains the process name and the amount of data read or written by the process, in KB. For example: <xref linkend="iotop"/> Sample Output [...] Process KB Read KB Written Xorg 50287 0 staprun 3328 0 multiload-apple 3039 23 sshd 208 1 floaters 14 62 NetworkManager 15 0 gnome-vfs-daemo 8 0 cupsd 3 3 sendmail 4 0 mixer_applet2 3 0 Process KB Read KB Written Xorg 51886 0 staprun 3328 0 multiload-apple 3039 23 sshd 1344 4 snmpd 90 0 floaters 15 66 NetworkManager 23 0 irqbalance 16 0 pam_timestamp_c 9 0 sendmail 4 0 displays top I/O writes and reads within a random 10-second interval. Note that also detects I/O resulting from SystemTap activity — displays reads done by staprun.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-kernelprofiling.xml000066400000000000000000000101741414446751200310510ustar00rootroot00000000000000
Kernel Profiling WAR STORY: Kernel Profiling http://sourceware.org/systemtap/wiki/WSKernelProfile?highlight=((WarStories)) http://sourceware.org/systemtap/examples/process/pf2.stp In , you can revise the wildcards used in the probe to target all kernel functions. This can be useful if you are interested in indentifying what the kernel is performing over a specific time period. However, doing so can cause considerable stress on the machine. In addition, this does not provide any indication of whether a specific function is being called too often during small time increments. This section describes how to profile the kernel properly. does this by providing a list of the top ten kernel functions called within a specific time period, and how many times each function was called during that time. kernelprof.stp #! /usr/bin/env stap global profile, pcount probe timer.profile { pcount <<< 1 fn = probefunc () if (fn != "") profile[fn] <<< 1 } probe timer.ms(5000) { printf ("\n--- %d samples recorded:\n", @count(pcount)) foreach (f in profile- limit 10) { printf ("%-30s\t%6d\n", f, @count(profile[f])) } delete profile delete pcount } records and outputs kernel functions called every 5 seconds. You can change this setting by editing probe timer.ms(5000) accordingly. contains an excerpt of the output over a 20-second period: <xref linkend="kernelprof"/> Sample Output [...] --- 10002 samples recorded: sys_recvfrom 1 memmove 1 __copy_from_user_ll 17 __copy_to_user_ll 15 mwait_idle 5868 link_path_walk 1 kfree 1 fget_light 1 audit_syscall_exit 1 __d_lookup 1 --- 10002 samples recorded: sysfs_read_file 1 free_poll_entry 1 syscall_exit_work 1 profile_hit 1 do_page_fault 2 _read_lock 3 kmap_atomic 4 strncpy_from_user 1 find_vma_prepare 1 __copy_from_user_ll 12 --- 10000 samples recorded: system_call 4 unix_stream_sendmsg 1 __d_path 1 do_page_fault 2 kmap_atomic 1 find_vma 1 __copy_to_user_ll 16 __copy_from_user_ll 10 mwait_idle 5759 memcpy_fromiovec 1 --- 10004 samples recorded: syscall_exit 1 __d_path 1 fput 2 do_page_fault 4 strncpy_from_user 1 may_open 1 ide_outb 1 ide_outsw 1 __copy_to_user_ll 11 __copy_from_user_ll 14 [...] allows you to identify interesting kernel-specific performance facts about the system, such as kernel-intensive workloads and idle times (in this case, mwait_idle. Note that does not count user-space functions, although it counts all kernel functions as part of the sample (even if the script cannot identify from which specific kernel function a call originated.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-nettop.xml000066400000000000000000000141321414446751200271660ustar00rootroot00000000000000
Network Profiling script examples network profiling examples of SystemTap scripts network profiling network profiling examples of SystemTap scripts WAR STORY: Top network users by PID http://sourceware.org/systemtap/wiki/WSNetTop?highlight=((WarStories)) probably http://sourceware.org/systemtap/examples/network/nettop.stp profiling the network examples of SystemTap scripts network traffic, monitoring examples of SystemTap scripts This section describes how to profile network activity. provides a glimpse into how much network traffic each process is generating on a machine. nettop.stp script examples if/else conditionals, alternative syntax examples of SystemTap scripts if/else conditionals, alternative syntax if/else conditionals, alternative syntax examples of SystemTap scripts Note that function print_activity() uses the following expressions: n_xmit ? @sum(ifxmit[pid, dev, exec, uid])/1024 : 0 n_recv ? @sum(ifrecv[pid, dev, exec, uid])/1024 : 0 These expressions are if/else conditionals. The first statement is a more concise way of writing the following psuedo code: if n_recv != 0 then @sum(ifrecv[pid, dev, exec, uid])/1024 else 0 tracks which processes are generating network traffic on the system, and provides the following information about each process: PID — the ID of the listed process. UID — user ID. A user ID of 0 refers to the root user. DEV — which ethernet device the process used to send / receive data (for example, eth0, eth1) XMIT_PK — number of packets transmitted by the process RECV_PK — number of packets received by the process XMIT_KB — amount of data sent by the process, in kilobytes RECV_KB — amount of data received by the service, in kilobytes provides network profile sampling every 5 seconds. You can change this setting by editing probe timer.ms(5000) accordingly. contains an excerpt of the output from over a 20-second period: <xref linkend="nettop"/> Sample Output [...] PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 0 5 0 0 swapper 11178 0 eth0 2 0 0 0 synergyc PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 2886 4 eth0 79 0 5 0 cups-polld 11362 0 eth0 0 61 0 5 firefox 0 0 eth0 3 32 0 3 swapper 2886 4 lo 4 4 0 0 cups-polld 11178 0 eth0 3 0 0 0 synergyc PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 0 6 0 0 swapper 2886 4 lo 2 2 0 0 cups-polld 11178 0 eth0 3 0 0 0 synergyc 3611 0 eth0 0 1 0 0 Xorg PID UID DEV XMIT_PK RECV_PK XMIT_KB RECV_KB COMMAND 0 0 eth0 3 42 0 2 swapper 11178 0 eth0 43 1 3 0 synergyc 11362 0 eth0 0 7 0 0 firefox 3897 0 eth0 0 1 0 0 multiload-apple [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml000066400000000000000000000122421414446751200304560ustar00rootroot00000000000000
Call Graph Tracing script examples call graph tracing examples of SystemTap scripts call graph tracing call graph tracing examples of SystemTap scripts incoming/outgoing function calls, tracing examples of SystemTap scripts function calls (incoming/outgoing), tracing examples of SystemTap scripts tracing incoming/outgoing function calls examples of SystemTap scripts tracing call graph examples of SystemTap scripts WAR STORY: Call graph tracing http://sourceware.org/systemtap/wiki/WSCallGraph?highlight=((WarStories)) script: http://sourceware.org/systemtap/examples/general/para-callgraph.stp This section describes how to trace incoming and outgoing function calls. para-callgraph.stp script examples multiple command-line arguments, example of examples of SystemTap scripts multiple command-line arguments, example of multiple command-line arguments, example of examples of SystemTap scripts example of multiple command-line arguments examples of SystemTap scripts takes two command-line arguments: script examples trigger function examples of SystemTap scripts trigger function trigger function examples of SystemTap scripts The function/s whose entry/exit call you'd like to trace ($1). A second optional trigger function ($2), which enables or disables tracing on a per-thread basis. Tracing in each thread will continue as long as the trigger function has not exited yet. please verify previous if correct; i'm particularly interested in finding out how to better describe "trigger function" script examples thread_indent(), sample usage examples of SystemTap scripts thread_indent(), sample usage thread_indent(), sample usage examples of SystemTap scripts uses thread_indent(); as such, its output contains the timestamp, process name, and thread ID of $1 (that is, the probe function you are tracing). For more information about thread_indent(), refer to its entry in . The following example contains an excerpt from the output for stap para-callgraph.stp 'kernel.function("*@fs/*.c")' 'kernel.function("sys_read")': <xref linkend="scriptcallgraph"/> Sample Output [...] 267 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 269 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff880111eebbc0 2 gnome-terminal(2921):<-fput 0 gnome-terminal(2921):->fget_light fd=0x3 fput_needed=0xffff88010544df54 3 gnome-terminal(2921):<-fget_light return=0xffff8801116ce980 0 gnome-terminal(2921):->vfs_read file=0xffff8801116ce980 buf=0xc86504 count=0x1000 pos=0xffff88010544df48 4 gnome-terminal(2921): ->rw_verify_area read_write=0x0 file=0xffff8801116ce980 ppos=0xffff88010544df48 count=0x1000 7 gnome-terminal(2921): <-rw_verify_area return=0x1000 12 gnome-terminal(2921): ->do_sync_read filp=0xffff8801116ce980 buf=0xc86504 len=0x1000 ppos=0xffff88010544df48 15 gnome-terminal(2921): <-do_sync_read return=0xfffffffffffffff5 18 gnome-terminal(2921):<-vfs_read return=0xfffffffffffffff5 0 gnome-terminal(2921):->fput file=0xffff8801116ce980
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-sockettrace.xml000066400000000000000000000104611414446751200301650ustar00rootroot00000000000000
Tracing Functions Called in Network Socket Code script examples tracing functions called in network socket code examples of SystemTap scripts tracing functions called in network socket code tracing functions called in network socket code examples of SystemTap scripts network socket code, tracing functions called in examples of SystemTap scripts functions called in network socket code, tracing examples of SystemTap scripts http://sourceware.org/systemtap/examples/network/socket-trace.stp script examples net/socket.c, tracing functions from examples of SystemTap scripts net/socket.c, tracing functions from net/socket.c, tracing functions from examples of SystemTap scripts This section describes how to trace functions called from the kernel's net/socket.c file. This task helps you identify, in finer detail, how each process interacts with the network at the kernel level. socket-trace.stp is identical to , which was earlier used in to illustrate how thread_indent() works. <xref linkend="sockettrace"/> Sample Output [...] 0 Xorg(3611): -> sock_poll 3 Xorg(3611): <- sock_poll 0 Xorg(3611): -> sock_poll 3 Xorg(3611): <- sock_poll 0 gnome-terminal(11106): -> sock_poll 5 gnome-terminal(11106): <- sock_poll 0 scim-bridge(3883): -> sock_poll 3 scim-bridge(3883): <- sock_poll 0 scim-bridge(3883): -> sys_socketcall 4 scim-bridge(3883): -> sys_recv 8 scim-bridge(3883): -> sys_recvfrom 12 scim-bridge(3883):-> sock_from_file 16 scim-bridge(3883):<- sock_from_file 20 scim-bridge(3883):-> sock_recvmsg 24 scim-bridge(3883):<- sock_recvmsg 28 scim-bridge(3883): <- sys_recvfrom 31 scim-bridge(3883): <- sys_recv 35 scim-bridge(3883): <- sys_socketcall [...] contains a 3-second excerpt of the output for . For more information about the output of this script as provided by thread_indent(), refer to .
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-syscallsbyprocpid.xml000066400000000000000000000073241414446751200314330ustar00rootroot00000000000000
Tracking System Call Volume Per Process script examples monitoring system calls (volume per process) examples of SystemTap scripts monitoring system calls (volume per process) monitoring system calls (volume per process) examples of SystemTap scripts system calls volume (per process), monitoring examples of SystemTap scripts uses systemtap/testsuite/systemtap.examples/process/syscalls_by_p*.stp This section illustrates how to determine which processes are performing the highest volume of system calls. In previous sections, we've described how to monitor the top system calls used by the system over time (). We've also described how to identify which applications use a specific set of "polling suspect" system calls the most (). Monitoring the volume of system calls made by each process provides more data in investigating your system for polling processes and other resource hogs. syscalls_by_proc.stp lists the top 20 processes performing the highest number of system calls. It also lists how many system calls each process performed during the time period. Refer to for a sample output. <xref linkend="topsys"/> Sample Output Collecting data... Type Ctrl-C to exit and display results #SysCalls Process Name 1577 multiload-apple 692 synergyc 408 pcscd 376 mixer_applet2 299 gnome-terminal 293 Xorg 206 scim-panel-gtk 95 gnome-power-man 90 artsd 85 dhcdbd 84 scim-bridge 78 gnome-screensav 66 scim-launcher [...] To display the process IDs instead of the process names, use the following script instead. syscalls_by_pid.stp As indicated in the output, you need to manually exit the script in order to display the results. You can add a timed expiration to either script by simply adding a timer.s() probe; for example, to instruct the script to expire after 5 seconds, add the following probe to the script: probe timer.s(5) { exit() }
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcp_connections.xml000066400000000000000000000051661414446751200310540ustar00rootroot00000000000000
Monitoring Incoming TCP Connections script examples monitoring incoming TCP connections examples of SystemTap scripts monitoring incoming TCP connections monitoring incoming TCP connections examples of SystemTap scripts TCP connections (incoming), monitoring examples of SystemTap scripts incoming TCP connections, monitoring examples of SystemTap scripts This section illustrates how to monitor incoming TCP connections. This task is useful in identifying any unauthorized, suspicious, or otherwise unwanted network access requests in real time. tcp_connections.stp While is running, it will print out the following information about any incoming TCP connections accepted by the system in real time: Current UID CMD - the command accepting the connection PID of the command Port used by the connection IP address from which the TCP connection originated <xref linkend="tcpconnections"/> Sample Output UID CMD PID PORT IP_SOURCE 0 sshd 3165 22 10.64.0.227 0 sshd 3165 22 10.64.0.227
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-tcpdumplike.xml000066400000000000000000000075611414446751200302060ustar00rootroot00000000000000
Monitoring TCP Packets script examples monitoring TCP packets examples of SystemTap scripts monitoring TCP packets monitoring TCP packets examples of SystemTap scripts TCP packets, monitoring examples of SystemTap scripts TCP packets, monitoring examples of SystemTap scripts This section illustrates how to monitor TCP packets received by the system. This is useful in analyzing network traffic generated by applications running on the system. tcpdumplike.stp While is running, it will print out the following information about any received TCP packets in real time: Source and destination IP address (saddr, daddr, respectively) Source and destination ports (sport, dport, respectively) Packet flags To determine the flags used by the packet, uses the following functions: urg - urgent ack - acknowledgement psh - push rst - reset syn - synchronize fin - finished The aforementioned functions return 1 or 0 to specify whether the packet uses the corresponding flag. <xref linkend="tcpdumplike"/> Sample Output ----------------------------------------------------------------- Source IP Dest IP SPort DPort U A P R S F ----------------------------------------------------------------- 209.85.229.147 10.0.2.15 80 20373 0 1 1 0 0 0 92.122.126.240 10.0.2.15 80 53214 0 1 0 0 1 0 92.122.126.240 10.0.2.15 80 53214 0 1 0 0 0 0 209.85.229.118 10.0.2.15 80 63433 0 1 0 0 1 0 209.85.229.118 10.0.2.15 80 63433 0 1 0 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.147 10.0.2.15 80 21141 0 1 1 0 0 0 209.85.229.118 10.0.2.15 80 63433 0 1 1 0 0 0 [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-threadtimes.xml000066400000000000000000000056671414446751200302030ustar00rootroot00000000000000
Determining Time Spent in Kernel and User Space script examples determining time spent in kernel and user space examples of SystemTap scripts determining time spent in kernel and user space determining time spent in kernel and user space examples of SystemTap scripts time spent in kernel/user space, determining examples of SystemTap scripts kernel and user space, determining time spent in examples of SystemTap scripts user and kernel space, determining time spent in examples of SystemTap scripts http://sourceware.org/systemtap/examples/profiling/thread-times.stp This section illustrates how to determine the amount of time any given thread is spending in either kernel or user-space. thread-times.stp script examples CPU ticks examples of SystemTap scripts CPU ticks CPU ticks examples of SystemTap scripts lists the top 20 processes currently taking up CPU time within a 5-second sample, along with the total number of CPU ticks made during the sample. The output of this script also notes the percentage of CPU time each process used, as well as whether that time was spent in kernel space or user space. contains a 5-second sample of the output for : <xref linkend="threadtimes"/> Sample Output tid %user %kernel (of 20002 ticks) 0 0.00% 87.88% 32169 5.24% 0.03% 9815 3.33% 0.36% 9859 0.95% 0.00% 3611 0.56% 0.12% 9861 0.62% 0.01% 11106 0.37% 0.02% 32167 0.08% 0.08% 3897 0.01% 0.08% 3800 0.03% 0.00% 2886 0.02% 0.00% 3243 0.00% 0.01% 3862 0.01% 0.00% 3782 0.00% 0.00% 21767 0.00% 0.00% 2522 0.00% 0.00% 3883 0.00% 0.00% 3775 0.00% 0.00% 3943 0.00% 0.00% 3873 0.00% 0.00%
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-timeout.xml000066400000000000000000000110161414446751200273410ustar00rootroot00000000000000
Monitoring Polling Applications script examples monitoring polling applications examples of SystemTap scripts monitoring polling applications monitoring polling applications examples of SystemTap scripts polling applications, monitoring examples of SystemTap scripts uses systemtap/testsuite/systemtap.examples/profiling/timeout.stp This section describes how to identify and monitor which applications are polling. Doing so allows you to track unnecessary or excessive polling, which can help you pinpoint areas for improvement in terms of CPU usage and power savings. timeout.stp tracks how many times each of the following system calls completed due to time expiring rather than due to an actual event occurring: poll select epoll itimer futex nanosleep signal script examples timer.s(), sample usage examples of SystemTap scripts timer.s(), sample usage timer.s(), sample usage examples of SystemTap scripts <xref linkend="timeouts"/> Sample Output uid | poll select epoll itimer futex nanosle signal| process 28937 | 148793 0 0 4727 37288 0 0| firefox 22945 | 0 56949 0 1 0 0 0| scim-bridge 0 | 0 0 0 36414 0 0 0| swapper 4275 | 23140 0 0 1 0 0 0| mixer_applet2 4191 | 0 14405 0 0 0 0 0| scim-launcher 22941 | 7908 1 0 62 0 0 0| gnome-terminal 4261 | 0 0 0 2 0 7622 0| escd 3695 | 0 0 0 0 0 7622 0| gdm-binary 3483 | 0 7206 0 0 0 0 0| dhcdbd 4189 | 6916 0 0 2 0 0 0| scim-panel-gtk 1863 | 5767 0 0 0 0 0 0| iscsid 2562 | 0 2881 0 1 0 1438 0| pcscd 4257 | 4255 0 0 1 0 0 0| gnome-power-man 4278 | 3876 0 0 60 0 0 0| multiload-apple 4083 | 0 1331 0 1728 0 0 0| Xorg 3921 | 1603 0 0 0 0 0 0| gam_server 4248 | 1591 0 0 0 0 0 0| nm-applet 3165 | 0 1441 0 0 0 0 0| xterm 29548 | 0 1440 0 0 0 0 0| httpd 1862 | 0 0 0 0 0 1438 0| iscsid You can increase the sample time by editing the second probe (timer.s(1)). The output of contains the name and UID of the top 20 polling applications, along with how many times each application performed each polling system call (over time). contains an excerpt of the script. In this particular example firefox is doing an excessive amount of polling due to a plugin module.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-topsys.xml000066400000000000000000000073321414446751200272220ustar00rootroot00000000000000
Tracking Most Frequently Used System Calls script examples monitoring system calls examples of SystemTap scripts monitoring system calls monitoring system calls examples of SystemTap scripts system calls, monitoring examples of SystemTap scripts from helps you identify which applications are polling by examining a small subset of system calls ( poll, select, epoll, itimer, futex, nanosleep, and signal). However, in some systems, an excessive number of system calls outside that small subset might be responsible for time spent in the kernel. If you suspect that an application is using system calls excessively, you need to identify the most frequently used system calls on the system. To do this, use . topsys.stp lists the top 20 system calls used by the system per 5-second interval. It also lists how many times each system call was used during that period. Refer to for a sample output. script examples timer.s(), sample usage examples of SystemTap scripts timer.s(), sample usage timer.s(), sample usage examples of SystemTap scripts <xref linkend="topsys"/> Sample Output -------------------------------------------------------------- SYSCALL COUNT gettimeofday 1857 read 1821 ioctl 1568 poll 1033 close 638 open 503 select 455 write 391 writev 335 futex 303 recvmsg 251 socket 137 clock_gettime 124 rt_sigprocmask 121 sendto 120 setitimer 106 stat 90 time 81 sigreturn 72 fstat 66 --------------------------------------------------------------
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio.xml000066400000000000000000000114771414446751200273140ustar00rootroot00000000000000
Track Cumulative IO script examples tracking cumulative I/O examples of SystemTap scripts tracking cumulative I/O tracking cumulative I/O examples of SystemTap scripts cumulative I/O, tracking examples of SystemTap scripts monitoring cumulative I/O examples of SystemTap scripts printing I/O activity (cumulative) examples of SystemTap scripts This section describes how to track the cumulative amount of I/O to the system. traceio.stp prints the top ten executables generating I/O traffic over time. In addition, it also tracks the cumulative amount of I/O reads and writes done by those ten executables. This information is tracked and printed out in 1-second intervals, and in descending order. local variables sample usage $return variables (local) sample usage $return $return sample usage local variables Note that also uses the local variable $return, which is also used by from . <xref linkend="traceio"/> Sample Output [...] Xorg r: 583401 KiB w: 0 KiB floaters r: 96 KiB w: 7130 KiB multiload-apple r: 538 KiB w: 537 KiB sshd r: 71 KiB w: 72 KiB pam_timestamp_c r: 138 KiB w: 0 KiB staprun r: 51 KiB w: 51 KiB snmpd r: 46 KiB w: 0 KiB pcscd r: 28 KiB w: 0 KiB irqbalance r: 27 KiB w: 4 KiB cupsd r: 4 KiB w: 18 KiB Xorg r: 588140 KiB w: 0 KiB floaters r: 97 KiB w: 7143 KiB multiload-apple r: 543 KiB w: 542 KiB sshd r: 72 KiB w: 72 KiB pam_timestamp_c r: 138 KiB w: 0 KiB staprun r: 51 KiB w: 51 KiB snmpd r: 46 KiB w: 0 KiB pcscd r: 28 KiB w: 0 KiB irqbalance r: 27 KiB w: 4 KiB cupsd r: 4 KiB w: 18 KiB
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-traceio2.xml000066400000000000000000000126671414446751200274000ustar00rootroot00000000000000
I/O Monitoring (By Device) script examples monitoring device I/O examples of SystemTap scripts monitoring device I/O monitoring device I/O examples of SystemTap scripts I/O monitoring (by device) examples of SystemTap scripts device I/O, monitoring examples of SystemTap scripts example from http://sourceware.org/systemtap/examples/io/traceio2.stp, but error WAR STORY: http://sourceware.org/systemtap/wiki/WSDeviceMonitor?highlight=((WarStories)), but script errored was able to correct script through http://sourceware.org/systemtap/wiki/WSFileMonitor?highlight=((WarStories)) This section describes how to monitor I/O activity on a specific device. traceio2.stp script examples stat -c, determining whole device number examples of SystemTap scripts stat -c, determining whole device number stat -c, determining whole device number examples of SystemTap scripts script examples whole device number (usage as a command-line argument) examples of SystemTap scripts whole device number (usage as a command-line argument) whole device number (usage as a command-line argument) examples of SystemTap scripts takes 1 argument: the whole device number. To get this number, use stat -c "0x%D" directory, where directory is located in the device to be monitored. script examples usrdev2kerndev() examples of SystemTap scripts usrdev2kerndev() usrdev2kerndev() examples of SystemTap scripts The usrdev2kerndev() function converts the whole device number into the format understood by the kernel. The output produced by usrdev2kerndev() is used in conjunction with the MKDEV(), MINOR(), and MAJOR() functions to determine the major and minor numbers of a specific device. The output of includes the name and ID of any process performing a read/write, the function it is performing (that is, vfs_read or vfs_write), and the kernel device number. The following example is an excerpt from the full output of stap traceio2.stp 0x805, where 0x805 is the whole device number of /home. /home resides in /dev/sda5, which is the device we wish to monitor. <xref linkend="traceio2"/> Sample Output [...] synergyc(3722) vfs_read 0x800005 synergyc(3722) vfs_read 0x800005 cupsd(2889) vfs_write 0x800005 cupsd(2889) vfs_write 0x800005 cupsd(2889) vfs_write 0x800005 [...]
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Useful_SystemTap_Scripts.xml000066400000000000000000000111411414446751200276650ustar00rootroot00000000000000 Useful SystemTap Scripts SystemTap scripts useful examples examples of SystemTap scripts useful examples of SystemTap scripts systemtap-testsuite package sample scripts This chapter enumerates several SystemTap scripts you can use to monitor and investigate different subsystems. All of these scripts are available at /usr/share/systemtap/testsuite/systemtap.examples/ once you install the systemtap-testsuite RPM. short intro, reference to online source (http://sourceware.org/systemtap/examples/subsystem-index.html); "always updated" short description of gnuplot (?) for better GUI of results case studies and more info on some scripts here - http://sourceware.org/systemtap/wiki/WarStories
Network The following sections showcase scripts that trace network-related functions and build a profile of network activity.
Disk The following sections showcase scripts that monitor disk and I/O activity.
Profiling The following sections showcase scripts that profile kernel activity by monitoring function calls.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Userspace_probing.xml000066400000000000000000000274641414446751200263730ustar00rootroot00000000000000 User-space Probing SystemTap initially focused on kernel-space probing. Because there are many instances where user-space probing can help diagnose a problem, SystemTap 0.6 added support to allow probing user-space processes. SystemTap can probe the entry into and return from a function in user-space processes, probe predefined markers in user-space code, and monitor user-process events. SystemTap requires the uprobes module to perform user-space probing. If your Linux kernel is version 3.5 or higher, it already includes uprobes. To verify that the current kernel supports uprobes natively, run the following command: grep CONFIG_UPROBES /boot/config-`uname -r` If uprobes is integrated, the output of this command is as follows: CONFIG_UPROBES=y If you are running a kernel prior to version 3.5, SystemTap automatically builds the uprobes module. However, you also need the utrace kernel extensions required by the SystemTap user-space probing to track various user-space events. More details about the utrace infrastructure are available at . To determine whether the currently running Linux kernel provides the needed utrace support, type the following at a shell prompt: grep CONFIG_UTRACE /boot/config-`uname -r` If the Linux kernel supports user-space probing, the command produces the following output: CONFIG_UTRACE=y
User-Space Events Events user-space All user-space event probes begin with process. You can limit the process events to a specific running process by specifying the process ID. You can also limit the process events to monitor a particular executable by specifying the path to the executable (PATH). SystemTap makes use of the PATH environment variable, which allows you to use both the name used on the command-line to start the executable and the absolute path to the executable. Several of the user-space probe events limit their scope to a particular executable name (PATH), because SystemTap must use debug information to statically analyze where to place the probes. But for many user-space probe events, the process ID and executable name are optional. Any process event in the list below that include process ID or the path to the executable must include those arguments. The process ID and path to the executable are optional for the process events that do not list them: process("PATH").function("function") The entry to the user-space function function for the executable PATH. This event is the user-space analogue of the kernel.function("function") event. It allows wildcards for the function function and .return suffix. process("PATH").statement("statement") The earliest instruction in the code for statement. This is the user-space analogue of kernel.statement("statement"). process("PATH").mark("marker") The static probe point marker defined in PATH. You can use wildcards for marker to specify multiple marks with a single probe. The static probe points may also have numbered arguments ($1, $2, and so on) available to the probe. A variety of user-space packages such as Java include these static probe points. Most packages that provide static probe points also provide aliases for the raw user-space mark events. Below is one such alias for the x86_64 Java hotspot JVM: probe hotspot.gc_begin = process("/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server/libjvm.so").mark("gc__begin") process.begin A user-space process is created. You can limit this to a particular process ID or a full path to the executable. process.thread.begin A user-space thread is created. You can limit this to a particular process ID or a full path to the executable. process.end A user-space process dies. You can limit this to a particular process ID or a full path to the executable. process.thread.end A user-space thread is destroyed. You can limit this to a particular process ID or a full path to the executable. process.syscall A user-space process makes a system call. The system call number is available in the $syscall context variable, and the fist six arguments are available in $arg1 through $arg6. The .return suffix places the probe at the return from the system call. For syscall.return, the return value is available through the $return context variable. You can limit this to a particular process ID or a full path to the executable.
Accessing User-Space Target Variables target variables user-space You can access user-space target variables in the same manner as described in . In Linux, however, there are separate address spaces for the user and kernel code. When using the -> operator, SystemTap accesses the appropriate address space. For pointers to base types such as integers and strings, there are a number of functions listed below to access user-space data. The first argument for each functions is the pointer to the data item. user_char(address) Obtains the character at address for the current user process. user_short(address) Obtains the short integer at address for the current user process. user_int(address) Obtains the integer at address for the current user process. user_long(address) Obtains the long integer at address for the current user process. user_string(address) Obtains the string at address for the current user process. user_string_n(address, n) Obtains the string at address for the current user process and limits the string to n bytes.
User-Space Stack Backtraces Stack backtrace user-space The probe point (pp) function indicates which particular event triggered the SystemTap event handler. A probe on the entry into a function would list the function name. However, in many cases the same probe point event may be triggered by many different modules in the program; this is particularly true for functions in shared libraries. A SystemTap backtrace of the user-space stack can provide additional context on how the probe point event is triggered. The user-space stack backtrace generation is complicated by the compiler producing code optimized to eliminate stack frame pointers. However, the compiler also includes information in the debug information section to allow debugging tools to produce stack backtraces. SystemTap user-space stack backtrace mechanism makes use of that debug information to walk the stack to generate stack traces for 32-bit and 64-bit x86 processors; other processor architectures do not yet support the use of debug information to unwind the user-space stack. To ensure that the needed debug information is used to produce the user-space stack backtraces, use the option for executables and for shared libraries. For example, you can use the user-space backtrack functions to see how the xmalloc function is being called by the ls command. With the debuginfo for the ls command installed, the following SystemTap command provides a backtrace each time the xmalloc function is called: stap -d /bin/ls --ldd \ -e 'probe process("ls").function("xmalloc") {print_usyms(ubacktrace())}' \ -c "ls /" When executed, this command produces output similar to the following: bin dev lib media net proc sbin sys var boot etc lib64 misc op_session profilerc selinux tmp cgroup home lost+found mnt opt root srv usr 0x4116c0 : xmalloc+0x0/0x20 [/bin/ls] 0x4116fc : xmemdup+0x1c/0x40 [/bin/ls] 0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls] 0x4087e4 : main+0x3b4/0x1900 [/bin/ls] 0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so] 0x402799 : _start+0x29/0x2c [/bin/ls] 0x4116c0 : xmalloc+0x0/0x20 [/bin/ls] 0x4116fc : xmemdup+0x1c/0x40 [/bin/ls] 0x40e68b : clone_quoting_options+0x3b/0x50 [/bin/ls] 0x40884a : main+0x41a/0x1900 [/bin/ls] 0x3fa441ec5d : __libc_start_main+0xfd/0x1d0 [/lib64/libc-2.12.so] ... For more details on the functions available for user-space stack backtraces, refer to ucontext-symbols.stp and ucontext-unwind.stp tapsets. You can also find the description of the functions in the aforementioned tapsets in the SystemTap Tapset Reference Manual.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/Using_SystemTap.xml000066400000000000000000000317151414446751200260110ustar00rootroot00000000000000 Using SystemTap short intro, contents of chapter Using SystemTap This chapter documents how to install SystemTap in the system and explains how to use the stap utility to run SystemTap scripts.
Running SystemTap Scripts - basic commands (e.g. stap), useful options per command (e.g. stap -vv), tool references (man pages, related kernel-doc), references within book (i.e. errors chapter) - running systemtap scripts Usage running SystemTap scripts running SystemTap scripts Usage Usage stap stap Usage Usage staprun staprun Usage SystemTap is distributed with a number of command line tools that allow you to monitor the activities of the system. The stap command reads probing instructions from a SystemTap script, translates these instructions into C code, builds a kernel module, and loads it into the running Linux kernel. The staprun command runs SystemTap instrumentation, that is, a kernel module built from SystemTap scripts during a cross-instrumentation. SystemTap scripts, how to run Running stap and staprun requires elevated privileges to the system. Because not all users can be granted root access just to run SystemTap, you can allow a non-privileged user to run SystemTap instrumentation on their machine by adding them to one of the following user groups: stapdev Usage stapdev stapdev Usage Members of this group can use the stap command to run SystemTap scripts, or staprun to run SystemTap instrumentation modules. Running the stap command involves compiling SystemTap scripts into kernel modules and loading them into the kernel. This operation requires elevated privileges to the system, which are granted to stapdev members. Unfortunately, such privileges also grant effective root access to stapdev members. As a consequence, only grant stapdev group membership to users whom you can trust with root access. stapusr Usage stapusr stapusr Usage Members of this group can only use the staprun command to run SystemTap instrumentation modules. In addition, they can only run modules from the /lib/modules/kernel_version/systemtap/ directory. Note that this directory must be owned only by the root user, and must only be writable by the root user. The stap command reads a SystemTap script either from a file, or from standard input. To tell stap to read a SystemTap script from a file, specify the file name on the command line: stap file_name Usage standard input, running scripts from standard input, running scripts from Usage running scripts from standard input To instruct stap to read a SystemTap script from standard input, use the switch instead of the file name. Note that any command-line options you wish to use must be inserted before the switch. For example, to make the output of the stap command more verbose, type: echo "probe timer.s(1) {exit()}" | stap -v - Below is a list of commonly used stap options: Usage options, stap options, stap Usage stap options -v Makes the output of the SystemTap session more verbose. You can repeat this option multiple times to provide more details on the script's execution, for example: stap -vvv script.stp This option is particularly useful if you encounter any errors in running the script. For more information about common SystemTap script errors, refer to . -o file_name Sends the standard output to a file named file_name. -S size,count Limits the maximum size of output files to size megabytes and the maximum number of stored files to count. This option implements logrotate operations for SystemTap and the resulting file names have a sequence number suffix. -x process_id Sets the SystemTap handler function target() to the specified process ID. For more information about target(), refer to . -c 'command' Sets the SystemTap handler function target() to the specified command and runs the SystemTap instrumentation for the duration of this command. For more information about target(), refer to . -e 'script' Uses script rather than a file as input for the SystemTap translator. -F Uses SystemTap's flight recorder mode and makes the script a background process. For more information about flight recorder mode, refer to . any other useful options worth noting here for beginners? For more information about the stap command, refer to the stap1 man page. For more information about the staprun command and cross-instrumentation, refer to or the staprun8 man page.
SystemTap Flight Recorder Mode flight recorder mode SystemTap's flight recorder mode allows you to run a SystemTap script for long periods of time and just focus on recent output. The flight recorder mode limits the amount of output generated. There are two variations of the flight recorder mode: in-memory and file mode. In both cases, the SystemTap script runs as a background process.
In-memory Flight Recorder flight recorder mode in-memory mode When flight recorder mode is used without a file name, SystemTap uses a buffer in kernel memory to store the output of the script. Once the SystemTap instrumentation module is loaded and the probes start running, the instrumentation detaches and is put in the background. When the interesting event occurs, you can reattach to the instrumentation to see the recent output in the memory buffer and any continuing output. To run a SystemTap script by using the flight recorder in-memory mode, run the stap command with the command line option: stap -F iotime.stp Once the script starts, stap prints a message similar to the following to provide you with the command to reconnect to the running script: Disconnecting from systemtap module. To reconnect, type "staprun -A stap_5dd0073edcb1f13f7565d8c343063e68_19556" When the interesting event occurs, run the following command to connect to the currently running script, output the recent data in the memory buffer, and get continuing output: staprun -A stap_5dd0073edcb1f13f7565d8c343063e68_19556 By default, the kernel buffer is 1MB in size. You can increase this value by using the option with the size in megabytes (rounded up to the next power over 2) for the buffer. For example, on the SystemTap command line would specify 2MB for the buffer.
File Flight Recorder flight recorder mode file mode The flight recorder mode can also store data to files. You can control the number and size of the files kept by using the option followed by two numerical arguments separated by a comma: the first argument is the maximum size in megabytes for the each output file, the second argument is the number of recent files to keep. To specify the file name, use the option followed by the name. SystemTap automatically adds a number suffix to the file name to indicate the order of the files. The following command starts SystemTap in file flight recorder mode with the output going to files named /tmp/pfaults.log.[0-9]+, each file 1MB or smaller, and keeping latest two files: stap -F -o /tmp/pfaults.log -S 1,2 pfaults.stp The command prints the process ID to standard output. Sending a SIGTERM to the process terminates the SystemTap script and stops the data collection. For example, if the previous command listed 7590 as the process ID, the following command would stop the SystemTap script: kill -s SIGTERM 7590 In this example, only the most recent two files generated by the script are kept: SystemTap automatically removes older files. As a result, the ls -sh /tmp/pfaults.log.* command lists two files: 1020K /tmp/pfaults.log.5 44K /tmp/pfaults.log.6 To examine the latest data, read the file with the highest number, in this case /tmp/pfaults.log.6.
systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/000077500000000000000000000000001414446751200234705ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/cast_example.stp000066400000000000000000000001571414446751200266700ustar00rootroot00000000000000function task_state:long (task:long) { return @cast(task, "task_struct", "kernel")->state } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/defined_example.stp000066400000000000000000000004341414446751200273320ustar00rootroot00000000000000probe vm.pagefault = kernel.function("__handle_mm_fault@mm/memory.c") ?, kernel.function("handle_mm_fault@mm/memory.c") ? { name = "pagefault" write_access = (@defined($flags) ? $flags & FAULT_FLAG_WRITE : $write_access) address = $address } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/fedoradebugurl.sh000077500000000000000000000005151414446751200270220ustar00rootroot00000000000000#! /bin/bash echo -n "Enter nvr of kernel-debuginfo (e.g. 2.6.25-14.fc9.x86_64) " ; \ read NVR; \ BASE=`uname -m` ; \ NVR=`echo $NVR | sed s/.$BASE//` ; \ VERSION=`echo $NVR | awk -F- '{print $1}'` ; \ RELEASE=`echo $NVR | awk -F- '{print $2}'` ; \ echo "http://kojipkgs.fedoraproject.org/\ packages/kernel/$VERSION/$RELEASE/$BASE/" systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/perror.stp000066400000000000000000000000371414446751200255310ustar00rootroot00000000000000probe vfs.read probe vfs.write systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/rhelchannels.sh000077500000000000000000000010401414446751200264700ustar00rootroot00000000000000#! /bin/bash pkg=`rpm -q --whatprovides "redhat-release"` releasever=`rpm -q --qf "%{version}" $pkg` variant=`echo $releasever | tr -d "[:digit:]" | tr "[:upper:]" "[:lower:]" ` if test -z "$variant"; then echo "No Red Hat Enterprise Linux variant (workstation/client/server) found." exit 1 fi version=`echo $releasever | tr -cd "[:digit:]"` base=`uname -i` echo "rhel-$base-$variant-$version" echo "rhel-$base-$variant-$version-debuginfo" echo "rhel-$base-$variant-optional-$version-debuginfo" echo "rhel-$base-$variant-optional-$version" systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/rheldebugurl.sh000077500000000000000000000003211414446751200265070ustar00rootroot00000000000000#! /bin/bash pkg=`rpm -q --whatprovides "redhat-release"` releasever=`rpm -q --qf "%{version}" $pkg` base=`uname -m` echo "ftp://ftp.redhat.com/pub/redhat/linux/\ enterprise/$releasever/en/os/$base/Debuginfo" systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/extras/werror.stp000066400000000000000000000000401414446751200255320ustar00rootroot00000000000000probe begin { printf("x") = 1 } systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/images/000077500000000000000000000000001414446751200234275ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/images/gnuplotsample.png000077500000000000000000000201361414446751200270340ustar00rootroot00000000000000PNG  IHDR/(?Zj9Rp,T0vӖ@8X|,-:m}w_q)Y[@=϶bG??=U+ret'jW|Wb>x^DϏ2.a7x_K IE[33흉4J*OVϾ^]}aj^Ze2cK*53[^[I^`C>ǻvEXbB1Bs;( _>smU_S(#?yo}{bpݖ(Gyh}cj9xq5qqՙƏw?戈­<_c?O;ŎxW ^;1q,v]zVڛKqڦ(DǷlzω~+rh`]Gi[`׶2^.X~NQaU!yk*Oo?gS{ĚU08Q񙣱MqR|Ǣʸ3wXuם1ykbx썋>1v)q=?3O_.ſ#l^{ŧF̖w?3GǮw5ψgLįwC8DXِ3al6vFӇ㦏aZc#(Dsz&Y""";C#;bpxc|s +]Q>c黷џq] Y' q+N[M7~qݟ}=ν Ҧ8[_Ŋ WgC}{|3q}\1߽q]/+Ц37Yᐫ`l0lfQ [~ϝlzKF#]X,E(cx !~qXl^76Gqh =|~t\~Ʌ1yc<qlÉV#~hMص=btgLĖnG7"޹kKēOXx幨=9^yں""b~ȑ,5~Z-\|w>qQ??ﷴ`\tSK.q,GY0Bt|[C</ kO}`8qL kFk㵙r bqu i;^駝6EY\/m<=퉁_u?\=3D9" Q,ΝAX_5# @vUS0Y5n<߯T>v'/nk=Gab1sO\g<5n'̪8gkGFDՋ>G1x;p~/M[t߁xGc7/z*> _}ol*m[mϝ~š(->8=Q\j\V4RnzJM/"ED?}iӫ-wmPsxb?s?}XٵW/y-~ŕgxybpp0~qPu4k};?ϼgGuWqI|;~=u7K.Wc?&>{b"V,ڿg'㪷oyyQ(_Սq|/Vm0 '?q8ct_vYِ3#xg?v k̅fg˯{OplƸ-7f{LP oUFy]1u᱋<;cO1>3GFapexqxط2k/O_DqyiW;?wgLY\?؁'bQj1t뢸vSsqm7Ǒ쫇"b{թSlȑv[jf>8 b[ ].V@N7lGt_;QّQ(Ć~#G;}l #Q.GXgF#p=]ry& +q{˳[X1ç]6Gg"ʅ1vSV+]O8zhCSQ\Ŋi: ][I^Љ5QXLoX"b`u[Ea~V †m1uG7!V]+5^;T}8}׿bzȤ]sG/ES,ݰW3w|ݷTMO04W;}uߛ5 xe(k?c+`ގkOcD7-'X2;(Z4#H~0ƺq2͢pjb|} c%}:}cX Y>F! [`rVO}W6,A5nLpJ:#1PIEqFcF͜Mzэw %`$د;"FR=S}G.?Ȃ8u lr*1GѸQ',zH`dA *< pt]@0fR_ԍ,a[@0rh#XH p `@0F#,7@02J;`IF#Iֿ`@0 rr"`@0 Dq 059[,"#H7 Ʈ-rjǃpjb|_u V>h$ !Fk0TaeT]ݜ@%,`RRu79n]T;poŴ-B3)znTI5ωEcm$.st@@iR&nx@0 F#(nx@0""`@0w@\ `@0  a~߹#`w=@0'#U~1S<@0 F nx@0 !K@q4S9HMOLj<_VD#`r1$`Ré<洖uxV_jC^u`l:OE {ij$6Ӷ* ͨ#˲͹9X{tuV>'rAҹ X;FFHF#X:@0 -#S1ŝ~`@0B4:EFF#FX.1R#G`@0 @0R5z{@F;P (#]0eLX]a]D F.FF#\FЎҘG 2`@0)aHFԤFȉq@0 C`@0 !+F ""'cG#uNݍ:Gx1951.A $Vb1"D#@ރ:lXn\0ާ`\û(1 F2R טК\(@sU@f$QuYQ0t 1 F#|cbq46Һ!yiɒDhi,&Ubs~`T@0vh3r]΃q[~;D:,LUdbȷnIYDF,h;(#݌E@³]0ژ軤-B#@?$z^iWQ,8Ob^[rրRnJ؁gDZF92ix#Ɣx{#qsO` `>Mhe$p7=4nZU`>WӸ| E;f<@콳m{di;59 Iiv{ rJ@$}OAέw#=y 2߶:*hTBZ Z^P򶿭nLig\D+ =7ĐEFv_[woj/F!1 dQgHwbp2g)v{~SA0f2{A_,v*Mōɖ]ؼ}xN\x7{`p 7ۉ_QGȳf](`lC3)|-^L؀<`RF̀ιT0BnLuG 'n1(31 H F ׌. F(`%~-@04A^F# QǹYLϣ3{ftNы4?[{Lz:d::۾5x:}}!tp50/k?#6֧dcVaw~<گڗmRӚ֧XLԟ캷,oY[Y;޽uhv_.NIg:Y|D#cVyy]:La\.Gwӓ{&ŏ54'F#`@0 @0 F#@ Vݖmo`B\.[ 4/IENDB`systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/images/icon.svg000066400000000000000000003301271414446751200251060ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/xsl/000077500000000000000000000000001414446751200227705ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/xsl/defaults.xsl000066400000000000000000000173461414446751200253420ustar00rootroot00000000000000 figure after example before equation before table before procedure before qanda 0 0 CONFIDENTIAL maybe ansi 0 1 _ _ No DocBook localization exists for " " or " ". Using default " ". systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/xsl/html.xsl000066400000000000000000000254241414446751200244730ustar00rootroot00000000000000


The following annotations are from this essay. You are seeing them here because your browser doesn’t support the user-interface techniques used to make them appear as ‘popups’ on modern browsers.

title

  • SystemTap Beginners Guide


systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/xsl/pdf.xsl000066400000000000000000003430401414446751200242750ustar00rootroot00000000000000 ]> left left 0 - - true italic #0066cc start wrap \ wrap \ #f5f5f5 black 6pt 6pt 6pt pt 1pt solid #aaaaaa 0em 0em 0em 0em 0em 0em 0pt always 0.8em 1em 1.2em 0.8em 1em 1.2em true wrap false preserve preserve start justify start Common_Content/images/ 0em 0em 0em 0em 3em 13pt #eeeeec bold true always #8e9f00 #d08e13 #9e0000 #dddddd 0em 0em #eeeeec 1pt solid #aaaaaa 1pt solid #aaaaaa 1pt solid #aaaaaa 1.5em 1em 1em 0em 0em always black white 0pt 0pt 0em set toc book toc,qandadiv article toc chapter nop qandadiv nop qandaset nop sect1 nop sect2 nop sect3 nop sect4 nop sect5 nop section nop part nop 3 Common_Content/images/ 10pt 1 0.1pt 0.1pt 0.1pt 1em 1em 1em 0.1em 0.1em 0.1em 1em 1em 1em 1em 1em 1em 5pt 0.5em 0.5em 0.5em 0.5pt dashed black always 4pt 4pt 2pt 2pt bold 25pt normal 16pt 0.6pt 0.6pt black black white white white white 1 1 1 15mm 9mm 11mm 8mm 5mm 15mm 19mm 31mm 0pt 0pt 0pt 4pc 0pc #336699 white bold pt false bold always 0.8em 1.0em 1.2em 3pt solid #aaaaaa auto 0em 0.8em 0em 1.5em 2em 2em 2em 0.5em 1em 2em 0.5em 1em 2em auto normal pt 0.1pt 0.1pt 0.1pt normal pt 1em 0.5em 2em 0.1pt 0.1pt 0.1pt pt pt pt pt pt pt bold always 1.8em 2.0em 2.2em 0.1em 0.1em 0.1em left body-start() 0.1em 0.1em 0.1em 1em 0.8em 1.2em bold 12pt center always false black center left white pt 24pt bold left 1em 1em 24pt bold center bold white KacstBook, IPAPGothic,Sazanami Gothic, Baekmuk Batang, ZYSong18030,AR PL UMing CN, Lohit Assamese,Lohit Bengali, Lohit Bengali, Lohit Tamil, Lohit Punjabi, Lohit Hindi, Lohit Devanagari,Lohit Marathi,Lohit Hindi, Lohit Gujarati, AR PL ShanHeiSun Uni,AR PL UMing TW, Lohit Kannada, Meera,Lohit Malayalam, Lohit Oriya, Lohit Telugu, LKLUG, KacstFarsi, David CLM, Garuda, Liberation Sans,sans-serif KacstScreen, IPAGothic,Sazanami Gothic, Baekmuk Batang, ZYSong18030,AR PL UMing CN, Lohit Assamese,Lohit Bengali, Lohit Bengali, Lohit Tamil, Lohit Punjabi, Lohit Hindi, Lohit Devanagari,Lohit Marathi,Lohit Hindi, Lohit Gujarati, AR PL ShanHeiSun Uni,AR PL UMing TW, Lohit Kannada, Meera,Lohit Malayalam, Lohit Oriya, Lohit Telugu, LKLUG, KacstFarsi, Miriam Mono CLM, Garuda, Liberation Mono,monospace no-wrap 0.5pt solid black 0.5pt solid black pt 66.66% normal normal 0.25em 48pt black normal normal 0pt black rule 1in 0 : 6pt 6pt 8pt bold left 18pt 18pt 24pt bold left   right fo:wrapper , , , , always always 0 0 0 0 1 0 0 1.0 1.0 auto auto auto auto auto % scale-to-fit auto auto % scale-to-fit auto before center after auto #0000ff #007f00 #5C3566 #ff00ff #FF00FF #0000ff #00007f #ff0000 #00007f #007f00 #5C3566 #002F5D #ffa500 #b03060 #96b9ff #9b30ff #5C3566 #0000ff #0000ff #000000 < > italic #ff00ff , lot front front back back back index back body -draft -draft . Error: CALS tables must specify the number of columns. fixed No adjustColumnWidths function available. always Don't know how to do callouts with Unexpected verbatim environment: 1 No numberLines function available. 1em -3em 4em 0em 0em 0em 0em 2em systemtap-4.6/doc/SystemTap_Beginners_Guide/en-US/xsl/xhtml-common.xsl000066400000000000000000002754631414446751200261630ustar00rootroot00000000000000 Common_Content/images/ Common_Content/css/default.css Common_Content/css/print.css 0 set toc book toc article nop chapter toc qandadiv toc qandaset toc sect1 nop sect2 nop sect3 nop sect4 nop sect5 nop section toc part toc Note Warning Important Note

before
0 1
<xsl:copy-of select="$title"/> not publican /../chrome.css /../db4.css /..///css/brand.css /../print.cssprint toc_embeded desktop
formalpara

0 0 0 1 0 1.0 1.0 1.0 px px px px 0 0 middle {$alt} Warning: imagemaps not supported on scaled images 0 middle
Sample output of when piped through gnuplot
height: px
background-color:
calspair , , , Warning: only calspair or otherunits='imagemap' supported in imageobjectco Error: CALS tables must specify the number of columns. lt-4-cols gt-4-cols gt-8-cols lt-7-rows gt-7-rows gt-14-rows 100% 100% No convertLength function available. No adjustColumnWidths function available.
No insertCallouts function is available.

{$conum} Don't know how to generate Unicode callouts when $callout.unicode.start.character is ( ) ( ) Unexpected verbatim environment: 1 No numberLines function available. #ftn. [ ]
systemtap-4.6/doc/SystemTap_Beginners_Guide/testsuite000077700000000000000000000000001414446751200256042../../testsuiteustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/000077500000000000000000000000001414446751200214205ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/.gitignore000066400000000000000000000000461414446751200234100ustar00rootroot00000000000000/docproc stamp-* tapsets/ tapsets.xml systemtap-4.6/doc/SystemTap_Tapset_Reference/Makefile.am000066400000000000000000000043661414446751200234650ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap tapset reference manual ## process this file with automake to produce Makefile.in DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap MAN_INSTALL_DIR = $(DESTDIR)$(mandir)/man3 HTML_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap/tapsets if XMLTO_STRINGPARAM XMLTOHTMLPARAMS=--stringparam use.id.as.filename=1 -m $(abs_srcdir)/generate-toc.xml endif if BUILD_REFDOCS # The tapset documents are now pre generated in the source tree if BUILD_HTMLDOCS noinst_PROGRAMS = docproc SRCTREE=$(abs_top_srcdir)/ DOCPROC=$(abs_builddir)/docproc endif all: stamp-htmldocs tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp') if BUILD_HTMLDOCS sed -e '/^!Syscalls/{r $(abs_srcdir)/syscalls.xmlpart' -e 'd}' $(abs_srcdir)/tapsets.tmpl > tapsets.tmpl.new SRCTREE=$(SRCTREE) $(DOCPROC) doc tapsets.tmpl.new > tapsets.xml.new $(preferred_python) $(srcdir)/overload.py tapsets.xml.new > tapsets.xml.new1 xsltproc $(srcdir)/sort-tapsets.xslt tapsets.xml.new1 > tapsets.xml.new2 rm tapsets.xml.new tapsets.xml.new1 tapsets.tmpl.new if test -s tapsets.xml && cmp tapsets.xml.new2 tapsets.xml >/dev/null ; then \ echo tapsets.xml unchanged; \ rm tapsets.xml.new2; \ else \ mv tapsets.xml.new2 tapsets.xml; \ fi endif stamp-htmldocs: tapsets.xml if BUILD_HTMLDOCS xmlto $(XMLTOHTMLPARAMS) html -o tapsets tapsets.xml touch stamp-htmldocs endif #FIXME need to figure out where to install things appropriately #installmandocs: mandocs install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) $(MKDIR_P) $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output if BUILD_HTMLDOCS $(MKDIR_P) $(HTML_INSTALL_DIR) $(INSTALL_DATA) tapsets/* $(HTML_INSTALL_DIR) endif endif # Still install prebuilt docs if --enable-docs=prebuilt if !BUILD_REFDOCS if INSTALL_PREBUILT_DOCS install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) $(MKDIR_P) $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output endif endif CLEANFILES=stamp-* tapsets.pdf tapsets.xml clean-local: rm -rf tapsets systemtap-4.6/doc/SystemTap_Tapset_Reference/Makefile.in000066400000000000000000000522141414446751200234710ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap tapset reference manual VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@noinst_PROGRAMS = \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ docproc$(EXEEXT) subdir = doc/SystemTap_Tapset_Reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) docproc_SOURCES = docproc.c docproc_OBJECTS = docproc.$(OBJEXT) docproc_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/docproc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = docproc.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALIGNEDNEW = @ALIGNEDNEW@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ DYNINST_LIBS = @DYNINST_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ debuginfod_CFLAGS = @debuginfod_CFLAGS@ debuginfod_LIBS = @debuginfod_LIBS@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap MAN_INSTALL_DIR = $(DESTDIR)$(mandir)/man3 HTML_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap/tapsets @XMLTO_STRINGPARAM_TRUE@XMLTOHTMLPARAMS = --stringparam use.id.as.filename=1 -m $(abs_srcdir)/generate-toc.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@SRCTREE = $(abs_top_srcdir)/ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@DOCPROC = $(abs_builddir)/docproc CLEANFILES = stamp-* tapsets.pdf tapsets.xml all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/SystemTap_Tapset_Reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/SystemTap_Tapset_Reference/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) docproc$(EXEEXT): $(docproc_OBJECTS) $(docproc_DEPENDENCIES) $(EXTRA_docproc_DEPENDENCIES) @rm -f docproc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(docproc_OBJECTS) $(docproc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/docproc.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_FALSE@install-data-hook: clean: clean-am clean-am: clean-generic clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/docproc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/docproc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-data-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-local clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-tags dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @BUILD_REFDOCS_TRUE@all: stamp-htmldocs @BUILD_REFDOCS_TRUE@tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp') @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ sed -e '/^!Syscalls/{r $(abs_srcdir)/syscalls.xmlpart' -e 'd}' $(abs_srcdir)/tapsets.tmpl > tapsets.tmpl.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ SRCTREE=$(SRCTREE) $(DOCPROC) doc tapsets.tmpl.new > tapsets.xml.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(preferred_python) $(srcdir)/overload.py tapsets.xml.new > tapsets.xml.new1 @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ xsltproc $(srcdir)/sort-tapsets.xslt tapsets.xml.new1 > tapsets.xml.new2 @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ rm tapsets.xml.new tapsets.xml.new1 tapsets.tmpl.new @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ if test -s tapsets.xml && cmp tapsets.xml.new2 tapsets.xml >/dev/null ; then \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ echo tapsets.xml unchanged; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ rm tapsets.xml.new2; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ else \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ mv tapsets.xml.new2 tapsets.xml; \ @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ fi @BUILD_REFDOCS_TRUE@stamp-htmldocs: tapsets.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ xmlto $(XMLTOHTMLPARAMS) html -o tapsets tapsets.xml @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ touch stamp-htmldocs #FIXME need to figure out where to install things appropriately #installmandocs: mandocs @BUILD_REFDOCS_TRUE@install-data-hook: @BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(MAN_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) @BUILD_REFDOCS_TRUE@ cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(MKDIR_P) $(HTML_INSTALL_DIR) @BUILD_HTMLDOCS_TRUE@@BUILD_REFDOCS_TRUE@ $(INSTALL_DATA) tapsets/* $(HTML_INSTALL_DIR) # Still install prebuilt docs if --enable-docs=prebuilt @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@install-data-hook: @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp $(abs_srcdir)/tapsets.pdf $(DOC_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(MAN_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R $(abs_srcdir)/man3/* $(MAN_INSTALL_DIR) @BUILD_REFDOCS_FALSE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R $(abs_srcdir)/man_pages/* $(MAN_INSTALL_DIR) # manpager output clean-local: rm -rf tapsets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.6/doc/SystemTap_Tapset_Reference/docproc.c000066400000000000000000000263021414446751200232200ustar00rootroot00000000000000/* * docproc is a simple preprocessor for the template files * used as placeholders for the kernel internal documentation. * docproc is used for documentation-frontend and * dependency-generator. * The two usages have in common that they require * some knowledge of the .tmpl syntax, therefore they * are kept together. * * documentation-frontend * Scans the template file and call kernel-doc for * all occurrences of ![EIF]file * Beforehand each referenced file is scanned for * any symbols that are exported via these macros: * EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(), & * EXPORT_SYMBOL_GPL_FUTURE() * This is used to create proper -function and * -nofunction arguments in calls to kernel-doc. * Usage: docproc doc file.tmpl * * dependency-generator: * Scans the template file and list all files * referenced in a format recognized by make. * Usage: docproc depend file.tmpl * Writes dependency information to stdout * in the following format: * file.tmpl src.c src2.c * The filenames are obtained from the following constructs: * !Efilename * !Ifilename * !Dfilename * !Ffilename * !Pfilename * */ #include #include #include #include #include #include #include #include /* exitstatus is used to keep track of any failing calls to kernel-doc, * but execution continues. */ int exitstatus = 0; typedef void DFL(char *); DFL *defaultline; typedef void FILEONLY(char * file); FILEONLY *internalfunctions; FILEONLY *externalfunctions; FILEONLY *symbolsonly; typedef void FILELINE(char * file, char * line); FILELINE * singlefunctions; FILELINE * entity_system; FILELINE * docsection; #define MAXLINESZ 2048 #define MAXFILES 250 #define KERNELDOCPATH "scripts/" #define KERNELDOC "kernel-doc" #define DOCBOOK "-docbook" #define FUNCTION "-function" #define NOFUNCTION "-nofunction" #define NODOCSECTIONS "-no-doc-sections" char *srctree; void usage (void) { fprintf(stderr, "Usage: docproc {doc|depend} file\n"); fprintf(stderr, "Input is read from file.tmpl. Output is sent to stdout\n"); fprintf(stderr, "doc: frontend when generating kernel documentation\n"); fprintf(stderr, "depend: generate list of files referenced within file\n"); fprintf(stderr, "Environment variable SRCTREE: absolute path to kernel source tree.\n"); } /* * Execute kernel-doc with parameters given in svec */ void exec_kernel_doc(char **svec) { pid_t pid; int ret; char real_filename[PATH_MAX + 1]; /* Make sure output generated so far are flushed */ fflush(stdout); switch (pid=fork()) { case -1: perror("fork"); exit(1); case 0: memset(real_filename, 0, sizeof(real_filename)); strncat(real_filename, srctree, PATH_MAX - 1); strncat(real_filename, KERNELDOCPATH KERNELDOC, PATH_MAX - strlen(real_filename) - 1); execvp(real_filename, svec); fprintf(stderr, "exec "); perror(real_filename); exit(1); default: waitpid(pid, &ret ,0); } if (WIFEXITED(ret)) exitstatus |= WEXITSTATUS(ret); else exitstatus = 0xff; } /* Types used to create list of all exported symbols in a number of files */ struct symbols { char *name; }; struct symfile { char *filename; struct symbols *symbollist; int symbolcnt; }; struct symfile symfilelist[MAXFILES]; int symfilecnt = 0; void add_new_symbol(struct symfile *sym, char * symname) { sym->symbollist = realloc(sym->symbollist, (sym->symbolcnt + 1) * sizeof(char *)); sym->symbollist[sym->symbolcnt++].name = strdup(symname); } /* Add a filename to the list */ struct symfile * add_new_file(char * filename) { symfilelist[symfilecnt++].filename = strdup(filename); return &symfilelist[symfilecnt - 1]; } /* Check if file already are present in the list */ struct symfile * filename_exist(char * filename) { int i; for (i=0; i < symfilecnt; i++) if (strcmp(symfilelist[i].filename, filename) == 0) return &symfilelist[i]; return NULL; } /* * List all files referenced within the template file. * Files are separated by tabs. */ void adddep(char * file) { printf("\t%s", file); } void adddep2(char * file, char * line) { line = line; adddep(file); } void noaction(char * line) { line = line; } void noaction2(char * file, char * line) { file = file; line = line; } /* Echo the line without further action */ void printline(char * line) { printf("%s", line); } /* * Find all symbols in filename that are exported with EXPORT_SYMBOL & * EXPORT_SYMBOL_GPL (& EXPORT_SYMBOL_GPL_FUTURE implicitly). * All symbols located are stored in symfilelist. */ void find_export_symbols(char * filename) { FILE * fp; struct symfile *sym; char line[MAXLINESZ]; if (filename_exist(filename) == NULL) { char real_filename[PATH_MAX + 1]; memset(real_filename, 0, sizeof(real_filename)); strncat(real_filename, srctree, PATH_MAX - 1); strncat(real_filename, filename, PATH_MAX - strlen(real_filename) - 1); sym = add_new_file(filename); fp = fopen(real_filename, "r"); if (fp == NULL) { fprintf(stderr, "docproc: "); perror(real_filename); exit(1); } while (fgets(line, MAXLINESZ, fp)) { char *p; char *e; if (((p = strstr(line, "EXPORT_SYMBOL_GPL")) != NULL) || ((p = strstr(line, "EXPORT_SYMBOL")) != NULL)) { /* Skip EXPORT_SYMBOL{_GPL} */ while (isalnum(*p) || *p == '_') p++; /* Remove parentheses & additional whitespace */ while (isspace(*p)) p++; if (*p != '(') continue; /* Syntax error? */ else p++; while (isspace(*p)) p++; e = p; while (isalnum(*e) || *e == '_') e++; *e = '\0'; add_new_symbol(sym, p); } } fclose(fp); } } /* * Document all external or internal functions in a file. * Call kernel-doc with following parameters: * kernel-doc -docbook -nofunction function_name1 filename * Function names are obtained from all the src files * by find_export_symbols. * intfunc uses -nofunction * extfunc uses -function */ void docfunctions(char * filename, char * type) { int i,j; int symcnt = 0; int idx = 0; char **vec; for (i=0; i <= symfilecnt; i++) symcnt += symfilelist[i].symbolcnt; vec = malloc((2 + 2 * symcnt + 3) * sizeof(char *)); if (vec == NULL) { perror("docproc: "); exit(1); } vec[idx++] = KERNELDOC; vec[idx++] = DOCBOOK; vec[idx++] = NODOCSECTIONS; for (i=0; i < symfilecnt; i++) { struct symfile * sym = &symfilelist[i]; for (j=0; j < sym->symbolcnt; j++) { vec[idx++] = type; vec[idx++] = sym->symbollist[j].name; } } vec[idx++] = filename; vec[idx] = NULL; printf("\n", filename); exec_kernel_doc(vec); fflush(stdout); free(vec); } void intfunc(char * filename) { docfunctions(filename, NOFUNCTION); } void extfunc(char * filename) { docfunctions(filename, FUNCTION); } /* * Document specific function(s) in a file. * Call kernel-doc with the following parameters: * kernel-doc -docbook -function function1 [-function function2] */ void singfunc(char * filename, char * line) { char *vec[200]; /* Enough for specific functions */ int i, idx = 0; int startofsym = 1; vec[idx++] = KERNELDOC; vec[idx++] = DOCBOOK; /* Split line up in individual parameters preceded by FUNCTION */ for (i=0; line[i]; i++) { if (isspace(line[i])) { line[i] = '\0'; startofsym = 1; continue; } if (startofsym) { startofsym = 0; vec[idx++] = FUNCTION; vec[idx++] = &line[i]; } } vec[idx++] = filename; vec[idx] = NULL; exec_kernel_doc(vec); } /* * Insert specific documentation section from a file. * Call kernel-doc with the following parameters: * kernel-doc -docbook -function "doc section" filename */ void docsect(char *filename, char *line) { char *vec[6]; /* kerneldoc -docbook -function "section" file NULL */ char *s; for (s = line; *s; s++) if (*s == '\n') *s = '\0'; vec[0] = KERNELDOC; vec[1] = DOCBOOK; vec[2] = FUNCTION; vec[3] = line; vec[4] = filename; vec[5] = NULL; exec_kernel_doc(vec); } /* * Parse file, calling action specific functions for: * 1) Lines containing !E * 2) Lines containing !I * 3) Lines containing !D * 4) Lines containing !F * 5) Lines containing !P * 6) Default lines - lines not matching the above */ void parse_file(FILE *infile) { char line[MAXLINESZ]; char * s; while (fgets(line, MAXLINESZ, infile)) { if (line[0] == '!') { s = line + 2; switch (line[1]) { case 'E': while (*s && !isspace(*s)) s++; *s = '\0'; externalfunctions(line+2); break; case 'I': while (*s && !isspace(*s)) s++; *s = '\0'; internalfunctions(line+2); break; case 'D': while (*s && !isspace(*s)) s++; *s = '\0'; symbolsonly(line+2); break; case 'F': /* filename */ while (*s && !isspace(*s)) s++; *s++ = '\0'; /* function names */ while (isspace(*s)) s++; singlefunctions(line +2, s); break; case 'P': /* filename */ while (*s && !isspace(*s)) s++; *s++ = '\0'; /* DOC: section name */ while (isspace(*s)) s++; docsection(line + 2, s); break; default: defaultline(line); } } else { defaultline(line); } } fflush(stdout); } int main(int argc, char *argv[]) { FILE * infile; srctree = getenv("SRCTREE"); if (!srctree) srctree = getcwd(NULL, 0); if (argc != 3) { usage(); exit(1); } /* Open file, exit on error */ infile = fopen(argv[2], "r"); if (infile == NULL) { fprintf(stderr, "docproc: "); perror(argv[2]); exit(2); } if (strcmp("doc", argv[1]) == 0) { /* Need to do this in two passes. * First pass is used to collect all symbols exported * in the various files; * Second pass generate the documentation. * This is required because some functions are declared * and exported in different files :-(( */ /* Collect symbols */ defaultline = noaction; internalfunctions = find_export_symbols; externalfunctions = find_export_symbols; symbolsonly = find_export_symbols; singlefunctions = noaction2; docsection = noaction2; parse_file(infile); /* Rewind to start from beginning of file again */ fseek(infile, 0, SEEK_SET); defaultline = printline; internalfunctions = intfunc; externalfunctions = extfunc; symbolsonly = printline; singlefunctions = singfunc; docsection = docsect; parse_file(infile); } else if (strcmp("depend", argv[1]) == 0) { /* Create first part of dependency chain * file.tmpl */ printf("%s\t", argv[2]); defaultline = noaction; internalfunctions = adddep; externalfunctions = adddep; symbolsonly = adddep; singlefunctions = adddep2; docsection = adddep2; parse_file(infile); printf("\n"); } else { fprintf(stderr, "Unknown option: %s\n", argv[1]); exit(1); } fclose(infile); fflush(stdout); return exitstatus; } systemtap-4.6/doc/SystemTap_Tapset_Reference/dummy-tapsets.xml000066400000000000000000000025731414446751200247650ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2013 Red Hat, Inc. and others SystemTap Hackers Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel. The instrumentation makes extensive use of the probe points and functions provided in the tapset library. This document describes the various probe points and functions. systemtap-4.6/doc/SystemTap_Tapset_Reference/generate-toc.xml000066400000000000000000000010111414446751200245100ustar00rootroot00000000000000 appendix toc,title article/appendix nop article nop,title book toc,title,figure,table,example,equation chapter nop,title part nop,title preface toc,title qandadiv toc qandaset toc reference nop,title sect1 toc sect2 toc sect3 toc sect4 toc sect5 toc section toc set toc,title systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/000077500000000000000000000000001414446751200222565ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::-.3stap000066400000000000000000000000531414446751200253160ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::HZ.3stap000066400000000000000000000030011414446751200254770ustar00rootroot00000000000000'\" t .\" Title: function::HZ .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HZ" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::HZ \- Kernel HZ .SH "SYNOPSIS" .sp .nf HZ:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the value of the kernel HZ macro, which corresponds to the rate of increase of the jiffies value\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::MAJOR.3stap000066400000000000000000000027321414446751200260400ustar00rootroot00000000000000'\" t .\" Title: function::MAJOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MAJOR" "3stap" "November 2021" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MAJOR \- Extract major device number from a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MAJOR:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Kernel device number to query\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::MINOR.3stap000066400000000000000000000027321414446751200260540ustar00rootroot00000000000000'\" t .\" Title: function::MINOR .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MINOR" "3stap" "November 2021" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MINOR \- Extract minor device number from a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MINOR:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Kernel device number to query\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::MKDEF.3stap000066400000000000000000000000501414446751200260050ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::MKDEV.3stap000066400000000000000000000030011414446751200260240ustar00rootroot00000000000000'\" t .\" Title: function::MKDEV .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MKDEV" "3stap" "November 2021" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::MKDEV \- Creates a value that can be compared to a kernel device number (kdev_t) .SH "SYNOPSIS" .sp .nf MKDEV:long(major:long,minor:long) .fi .SH "ARGUMENTS" .PP \fImajor\fR .RS 4 Intended major device number\&. .RE .PP \fIminor\fR .RS 4 Intended minor device number\&. .RE systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::abort.3stap000066400000000000000000000033411414446751200262740ustar00rootroot00000000000000'\" t .\" Title: function::abort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ABORT" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::abort \- Immediately shutting down probing script\&. .SH "SYNOPSIS" .sp .nf abort() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This is similar to \fBexit\fR but immediately aborts the current probe handler instead of waiting for its completion\&. Probe handlers already running on *other* CPU cores, however, will still continue to their completion\&. Unlike \fBerror\fR, this function call cannot be caught by \*(Aqtry \&.\&.\&. catch\*(Aq\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::addr.3stap000066400000000000000000000032411414446751200260760ustar00rootroot00000000000000'\" t .\" Title: function::addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::addr \- Address of the current probe point\&. .SH "SYNOPSIS" .sp .nf addr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the instruction pointer from the current probe\*(Aqs register state\&. Not all probe types have registers though, in which case zero is returned\&. The returned address is suitable for use with functions like \fBsymname\fR and \fBsymdata\fR\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::addr_to_node.3stap000066400000000000000000000032071414446751200276070ustar00rootroot00000000000000'\" t .\" Title: function::addr_to_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ADDR_TO_NO" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::addr_to_node \- Returns which node a given address belongs to within a NUMA system .SH "SYNOPSIS" .sp .nf addr_to_node:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the address of the faulting memory access .RE .SH "DESCRIPTION" .PP This function accepts an address, and returns the node that the given address belongs to in a NUMA system\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_clear_screen.3stap000066400000000000000000000032061414446751200306240ustar00rootroot00000000000000'\" t .\" Title: function::ansi_clear_screen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CLEAR" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_clear_screen \- Move cursor to top left and clear screen\&. .SH "SYNOPSIS" .sp .nf ansi_clear_screen() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for moving cursor to top left and then the ansi code for clearing the screen from the cursor position to the end\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_hide.3stap000066400000000000000000000030201414446751200304770ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_hide .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_hide \- Hides the cursor\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_hide() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for hiding the cursor\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_move.3stap000066400000000000000000000033411414446751200305420ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_move .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_move \- Move cursor to new coordinates\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_move(x:long,y:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Row to move the cursor to\&. .RE .PP \fIy\fR .RS 4 Colomn to move the cursor to\&. .RE .SH "DESCRIPTION" .PP Sends ansi code for positioning the cursor at row x and column y\&. Coordinates start at one, (1,1) is the top\-left corner\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_restore.3stap000066400000000000000000000031651414446751200312630ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_restore .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_restore \- Restores a previously saved cursor position\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_restore() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for restoring the current cursor position previously saved with \fBansi_cursor_save\fR\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_save.3stap000066400000000000000000000030521414446751200305310ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_save .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_save \- Saves the cursor position\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_save() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for saving the current cursor position\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_cursor_show.3stap000066400000000000000000000030211414446751200305470ustar00rootroot00000000000000'\" t .\" Title: function::ansi_cursor_show .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_CURSO" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_cursor_show \- Shows the cursor\&. .SH "SYNOPSIS" .sp .nf ansi_cursor_show() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code for showing the cursor\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_new_line.3stap000066400000000000000000000030011414446751200277700ustar00rootroot00000000000000'\" t .\" Title: function::ansi_new_line .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_NEW_L" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_new_line \- Move cursor to new line\&. .SH "SYNOPSIS" .sp .nf ansi_new_line() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code new line\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_reset_color.3stap000066400000000000000000000031241414446751200305160ustar00rootroot00000000000000'\" t .\" Title: function::ansi_reset_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_RESET" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_reset_color \- Resets Select Graphic Rendition mode\&. .SH "SYNOPSIS" .sp .nf ansi_reset_color() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Sends ansi code to reset foreground, background and color attribute to default values\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ansi_set_color.3stap000066400000000000000000000052601414446751200301720ustar00rootroot00000000000000'\" t .\" Title: function::ansi_set_color .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ANSI_SET_C" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ansi_set_color \- Set the ansi Select Graphic Rendition mode\&. .SH "SYNOPSIS" .sp .nf 1) ansi_set_color(fg:long) .fi .sp .nf 2) ansi_set_color(fg:long,bg:long) .fi .sp .nf 3) ansi_set_color(fg:long,bg:long,attr:long) .fi .SH "ARGUMENTS" .PP \fIfg\fR .RS 4 Foreground color to set\&. .RE .PP \fIbg\fR .RS 4 Background color to set\&. .RE .PP \fIattr\fR .RS 4 Color attribute to set\&. .RE .SH "DESCRIPTION" .PP 1) Sends ansi code for Select Graphic Rendition mode for the given forground color\&. Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37)\&. .PP 2) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37) and the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47)\&. .PP 3) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37), the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47) and the color attribute All attributes off (0), Intensity Bold (1), Underline Single (4), Blink Slow (5), Blink Rapid (6), Image Negative (7)\&. .SH SEE ALSO\n .IR tapset::ansi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::asmlinkage.3stap000066400000000000000000000031101414446751200272720ustar00rootroot00000000000000'\" t .\" Title: function::asmlinkage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASMLINKAGE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::asmlinkage \- Mark function as declared asmlinkage .SH "SYNOPSIS" .sp .nf asmlinkage() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared asmlinkage in the source\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::assert.3stap000066400000000000000000000037251414446751200264740ustar00rootroot00000000000000'\" t .\" Title: function::assert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ASSERT" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::assert \- evaluate assertion .SH "SYNOPSIS" .sp .nf 1) assert(expression:long) .fi .sp .nf 2) assert(expression:long,msg:string) .fi .SH "ARGUMENTS" .PP \fIexpression\fR .RS 4 The expression to evaluate .RE .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP 1) This function checks the expression and aborts the current running probe if expression evaluates to zero\&. Uses\fBerror\fR and may be caught by try{} catch{}\&. A default message will be displayed\&. .PP 2) This function checks the expression and aborts the current running probe if expression evaluates to zero\&. Uses\fBerror\fR and may be caught by try{} catch{}\&. The specified message will be displayed\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::atomic_long_read.3stap000066400000000000000000000033171414446751200304560ustar00rootroot00000000000000'\" t .\" Title: function::atomic_long_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_LON" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::atomic_long_read \- Retrieves an atomic long variable from kernel memory .SH "SYNOPSIS" .sp .nf atomic_long_read:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 pointer to atomic long variable .RE .SH "DESCRIPTION" .PP Safely perform the read of an atomic long variable\&. This will be a NOP on kernels that do not have ATOMIC_LONG_INIT set on the kernel config\&. .SH SEE ALSO\n .IR tapset::atomic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::atomic_read.3stap000066400000000000000000000031251414446751200274340ustar00rootroot00000000000000'\" t .\" Title: function::atomic_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ATOMIC_REA" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::atomic_read \- Retrieves an atomic variable from kernel memory .SH "SYNOPSIS" .sp .nf atomic_read:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 pointer to atomic variable .RE .SH "DESCRIPTION" .PP Safely perform the read of an atomic variable\&. .SH SEE ALSO\n .IR tapset::atomic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::backtrace.3stap000066400000000000000000000032271414446751200271070ustar00rootroot00000000000000'\" t .\" Title: function::backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BACKTRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::backtrace \- Hex backtrace of current kernel stack .SH "SYNOPSIS" .sp .nf backtrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns a string of hex addresses that are a backtrace of the kernel stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. See \fBubacktrace\fR for user\-space backtrace\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::bytes_to_string.3stap000066400000000000000000000040251414446751200304030ustar00rootroot00000000000000'\" t .\" Title: function::bytes_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::BYTES_TO_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::bytes_to_string \- Human readable string for given bytes .SH "SYNOPSIS" .sp .nf bytes_to_string:string(bytes:long) .fi .SH "ARGUMENTS" .PP \fIbytes\fR .RS 4 Number of bytes to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of bytes (up to 1024 bytes), the number of kilobytes (when less than 1024K) postfixed by \*(AqK\*(Aq, the number of megabytes (when less than 1024M) postfixed by \*(AqM\*(Aq or the number of gigabytes postfixed by \*(AqG\*(Aq\&. If representing K, M or G, and the number is amount is less than 100, it includes a \*(Aq\&.\*(Aq plus the remainer\&. The returned string will be 5 characters wide (padding with whitespace at the front) unless negative or representing more than 9999G bytes\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::caller.3stap000066400000000000000000000031631414446751200264310ustar00rootroot00000000000000'\" t .\" Title: function::caller .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::caller \- Return name and address of calling function .SH "SYNOPSIS" .sp .nf caller:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the address and name of the calling function\&. This is equivalent to calling: sprintf(\(lq\fBs\fR 0x\fBx\fR\(rq, symname(\fBcaller_addr\fR), \fBcaller_addr\fR) .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::caller_addr.3stap000066400000000000000000000027641414446751200274310ustar00rootroot00000000000000'\" t .\" Title: function::caller_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLER_ADD" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::caller_addr \- Return caller address .SH "SYNOPSIS" .sp .nf caller_addr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the address of the calling function\&. .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::callers.3stap000066400000000000000000000033661414446751200266210ustar00rootroot00000000000000'\" t .\" Title: function::callers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CALLERS" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::callers \- Return first n elements of kernel stack backtrace .SH "SYNOPSIS" .sp .nf callers:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack (not counting the top level)\&. If n is \-1, print the entire stack\&. .RE .SH "DESCRIPTION" .PP This function returns a string of the first n hex addresses from the backtrace of the kernel stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. .SH SEE ALSO\n .IR tapset::context-caller (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cmdline_arg.3stap000066400000000000000000000033341414446751200274330ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_arg \- Fetch a command line argument .SH "SYNOPSIS" .sp .nf cmdline_arg:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 Argument to get (zero is the program itself) .RE .SH "DESCRIPTION" .PP Returns argument the requested argument from the current process or the empty string when there are not that many arguments or there is a problem retrieving the argument\&. Argument zero is traditionally the command itself\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cmdline_args.3stap000066400000000000000000000041071414446751200276150ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_args .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_args \- Fetch command line arguments from current process .SH "SYNOPSIS" .sp .nf cmdline_args:string(n:long,m:long,delim:string) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 First argument to get (zero is normally the program itself) .RE .PP \fIm\fR .RS 4 Last argument to get (or minus one for all arguments after n) .RE .PP \fIdelim\fR .RS 4 String to use to separate arguments when more than one\&. .RE .SH "DESCRIPTION" .PP Returns arguments from the current process starting with argument number n, up to argument m\&. If there are less than n arguments, or the arguments cannot be retrieved from the current process, the empty string is returned\&. If m is smaller than n then all arguments starting from argument n are returned\&. Argument zero is traditionally the command itself\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cmdline_str.3stap000066400000000000000000000031331414446751200274670ustar00rootroot00000000000000'\" t .\" Title: function::cmdline_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CMDLINE_ST" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cmdline_str \- Fetch all command line arguments from current process .SH "SYNOPSIS" .sp .nf cmdline_str:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns all arguments from the current process delimited by spaces\&. Returns the empty string when the arguments cannot be retrieved\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::commit.3stap000066400000000000000000000031461414446751200264600ustar00rootroot00000000000000'\" t .\" Title: function::commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::COMMIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::commit \- Write out all output related to a speculation buffer .SH "SYNOPSIS" .sp .nf commit(id:long) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 of the buffer to store the information in .RE .SH "DESCRIPTION" .PP Output all the output for \fIid\fR in the order that it was entered into the speculative buffer by \fBspeculative\fR\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpu.3stap000066400000000000000000000027121414446751200257550ustar00rootroot00000000000000'\" t .\" Title: function::cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu \- Returns the current cpu number .SH "SYNOPSIS" .sp .nf cpu:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the current cpu number\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ms.3stap000066400000000000000000000033401414446751200276250ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_ms \- Number of milliseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_ms:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of milliseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_ns.3stap000066400000000000000000000033361414446751200276330ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_ns \- Number of nanoseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_ns:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of nanoseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_s.3stap000066400000000000000000000033231414446751200274510ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_s \- Number of seconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_s:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of seconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpu_clock_us.3stap000066400000000000000000000033401414446751200276350ustar00rootroot00000000000000'\" t .\" Title: function::cpu_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPU_CLOCK_" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpu_clock_us \- Number of microseconds on the given cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf cpu_clock_us:long(cpu:long) .fi .SH "ARGUMENTS" .PP \fIcpu\fR .RS 4 Which processor\*(Aqs clock to read .RE .SH "DESCRIPTION" .PP This function returns the number of microseconds on the given cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cpuid.3stap000066400000000000000000000030221414446751200262650ustar00rootroot00000000000000'\" t .\" Title: function::cpuid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cpuid \- Returns the current cpu number .SH "SYNOPSIS" .sp .nf cpuid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the current cpu number\&. Deprecated in SystemTap 1\&.4 and removed in SystemTap 1\&.5\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_msecs.3stap000066400000000000000000000030041414446751200305230ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_msecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_msecs \- Translates the given cputime into milliseconds .SH "SYNOPSIS" .sp .nf cputime_to_msecs:long(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to convert to milliseconds\&. .RE .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_string.3stap000066400000000000000000000031171414446751200307240ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_string \- Human readable string for given cputime .SH "SYNOPSIS" .sp .nf cputime_to_string:string(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to translate\&. .RE .SH "DESCRIPTION" .PP Equivalent to calling: msec_to_string (cputime_to_msecs (cputime)\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::cputime_to_usecs.3stap000066400000000000000000000030041414446751200305330ustar00rootroot00000000000000'\" t .\" Title: function::cputime_to_usecs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CPUTIME_TO" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::cputime_to_usecs \- Translates the given cputime into microseconds .SH "SYNOPSIS" .sp .nf cputime_to_usecs:long(cputime:long) .fi .SH "ARGUMENTS" .PP \fIcputime\fR .RS 4 Time to convert to microseconds\&. .RE .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ctime.3stap000066400000000000000000000057141414446751200262740ustar00rootroot00000000000000'\" t .\" Title: function::ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CTIME" "3stap" "November 2021" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ctime \- Convert seconds since epoch into human readable date/time string .SH "SYNOPSIS" .sp .nf 1) ctime:string(epochsecs:long) .fi .sp .nf 2) ctime:string() .fi .SH "ARGUMENTS" .PP \fIepochsecs\fR .RS 4 Number of seconds since epoch (as returned by \fBgettimeofday_s\fR) .RE .SH "DESCRIPTION" .PP 1) Takes an argument of seconds since the epoch as returned by\fBgettimeofday_s\fR\&. Returns a string of the form .PP 2) \(lqWed Jun 30 21:49:08 1993\(rq .PP The string will always be exactly 24 characters\&. If the time would be unreasonable far in the past (before what can be represented with a 32 bit offset in seconds from the epoch) an error will occur (which can be avoided with try/catch)\&. If the time would be unreasonable far in the future, an error will also occur\&. .PP Note that the epoch (zero) corresponds to .PP \(lqThu Jan 1 00:00:00 1970\(rq .PP The earliest full date given by ctime, corresponding to epochsecs \-2147483648 is \(lqFri Dec 13 20:45:52 1901\(rq\&. The latest full date given by ctime, corresponding to epochsecs 2147483647 is \(lqTue Jan 19 03:14:07 2038\(rq\&. .PP The abbreviations for the days of the week are \(oqSun\(cq, \(oqMon\(cq, \(oqTue\(cq, \(oqWed\(cq, \(oqThu\(cq, \(oqFri\(cq, and \(oqSat\(cq\&. The abbreviations for the months are \(oqJan\(cq, \(oqFeb\(cq, \(oqMar\(cq, \(oqApr\(cq, \(oqMay\(cq, \(oqJun\(cq, \(oqJul\(cq, \(oqAug\(cq, \(oqSep\(cq, \(oqOct\(cq, \(oqNov\(cq, and \(oqDec\(cq\&. .PP Note that the real C library \fBctime\fR function puts a newline (\*(Aq\en\*(Aq) character at the end of the string that this function does not\&. Also note that since the kernel has no concept of timezones, the returned time is always in GMT\&. .PP .SH SEE ALSO\n .IR tapset::ctime (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::current_exe_file.3stap000066400000000000000000000033261414446751200305120ustar00rootroot00000000000000'\" t .\" Title: function::current_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::CURRENT_EX" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::current_exe_file \- get the file struct pointer for the current task\*(Aqs executable file .SH "SYNOPSIS" .sp .nf current_exe_file:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the file struct pointer for the current task\*(Aqs executable file\&. Note that the file struct pointer isn\*(Aqt locked on return\&. The return value of this function can be passed to \fBfullpath_struct_file\fR to get the path from the file struct\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::d_name.3stap000066400000000000000000000027551414446751200264200ustar00rootroot00000000000000'\" t .\" Title: function::d_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_NAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::d_name \- get the dirent name .SH "SYNOPSIS" .sp .nf d_name:string(dentry:long) .fi .SH "ARGUMENTS" .PP \fIdentry\fR .RS 4 Pointer to dentry\&. .RE .SH "DESCRIPTION" .PP .PP Returns the dirent name (path basename)\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::d_path.3stap000066400000000000000000000030361414446751200264250ustar00rootroot00000000000000'\" t .\" Title: function::d_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::D_PATH" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::d_path \- get the full nameidata path .SH "SYNOPSIS" .sp .nf d_path:string(nd:long) .fi .SH "ARGUMENTS" .PP \fInd\fR .RS 4 Pointer to nameidata\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::delete_stopwatch.3stap000066400000000000000000000030241414446751200305210ustar00rootroot00000000000000'\" t .\" Title: function::delete_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DELETE_STO" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::delete_stopwatch \- Remove an existing stopwatch .SH "SYNOPSIS" .sp .nf delete_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Remove stopwatch \fIname\fR\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::discard.3stap000066400000000000000000000027321414446751200266010ustar00rootroot00000000000000'\" t .\" Title: function::discard .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DISCARD" "3stap" "November 2021" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::discard \- Discard all output related to a speculation buffer .SH "SYNOPSIS" .sp .nf discard(id:long) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 of the buffer to store the information in .RE .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::dump_stack.3stap000066400000000000000000000032471414446751200273240ustar00rootroot00000000000000'\" t .\" Title: function::dump_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::DUMP_STACK" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::dump_stack \- Send the kernel backtrace to the kernel trace buffer .SH "SYNOPSIS" .sp .nf dump_stack() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Print the current kernel backtrace to the kernel trace buffer\&. not be safely called from all kernel probe contexts, so is restricted to guru mode only\&. Under the hood, it calls the kernel C API function dump_stack directly\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::egid.3stap000066400000000000000000000027511414446751200261010ustar00rootroot00000000000000'\" t .\" Title: function::egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EGID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::egid \- Returns the effective gid of a target process .SH "SYNOPSIS" .sp .nf egid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective gid of a target process .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::env_var.3stap000066400000000000000000000032311414446751200266230ustar00rootroot00000000000000'\" t .\" Title: function::env_var .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ENV_VAR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::env_var \- Fetch environment variable from current process .SH "SYNOPSIS" .sp .nf env_var:string(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the environment variable to fetch .RE .SH "DESCRIPTION" .PP Returns the contents of the specified environment value for the current process\&. If the variable isn\*(Aqt set an empty string is returned\&. .SH SEE ALSO\n .IR tapset::context-envvar (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::errno_str.3stap000066400000000000000000000032141414446751200272010ustar00rootroot00000000000000'\" t .\" Title: function::errno_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERRNO_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::errno_str \- Symbolic string associated with error code .SH "SYNOPSIS" .sp .nf errno_str:string(err:long) .fi .SH "ARGUMENTS" .PP \fIerr\fR .RS 4 The error number received .RE .SH "DESCRIPTION" .PP This function returns the symbolic string associated with the giver error code, such as ENOENT for the number 2, or E#3333 for an out\-of\-range value such as 3333\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::error.3stap000066400000000000000000000032351414446751200263200ustar00rootroot00000000000000'\" t .\" Title: function::error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ERROR" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::error \- Send an error message .SH "SYNOPSIS" .sp .nf error(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP An implicit end\-of\-line is added\&. staprun prepends the string \(lqERROR:\(rq\&. Sending an error message aborts the currently running probe\&. Depending on the MAXERRORS parameter, it may trigger an \fBexit\fR\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::euid.3stap000066400000000000000000000027431414446751200261200ustar00rootroot00000000000000'\" t .\" Title: function::euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EUID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::euid \- Return the effective uid of a target process .SH "SYNOPSIS" .sp .nf euid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the effective user ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::execname.3stap000066400000000000000000000030261414446751200267520ustar00rootroot00000000000000'\" t .\" Title: function::execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXECNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::execname \- Returns the execname of a target process (or group of processes) .SH "SYNOPSIS" .sp .nf execname:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the execname of a target process (or group of processes)\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::exit.3stap000066400000000000000000000031141414446751200261340ustar00rootroot00000000000000'\" t .\" Title: function::exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::EXIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::exit \- Start shutting down probing script\&. .SH "SYNOPSIS" .sp .nf exit() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This only enqueues a request to start shutting down the script\&. New probes will not fire (except \(lqend\(rq probes), but all currently running ones may complete their work\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fastcall.3stap000066400000000000000000000030741414446751200267610ustar00rootroot00000000000000'\" t .\" Title: function::fastcall .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FASTCALL" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fastcall \- Mark function as declared fastcall .SH "SYNOPSIS" .sp .nf fastcall() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared fastcall in the source\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::format_ipaddr.3stap000066400000000000000000000030731414446751200300020ustar00rootroot00000000000000'\" t .\" Title: function::format_ipaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FORMAT_IPA" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::format_ipaddr \- Returns a string representation for an IP address .SH "SYNOPSIS" .sp .nf format_ipaddr:string(addr:long,family:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the IP address .RE .PP \fIfamily\fR .RS 4 the IP address family (either AF_INET or AF_INET6) .RE .SH SEE ALSO\n .IR tapset::ip (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp32_to_fp64.3stap000066400000000000000000000031321414446751200272760ustar00rootroot00000000000000'\" t .\" Title: function::fp32_to_fp64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP32_TO_FP" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp32_to_fp64 \- Convert fp32 to 64 bit floating point .SH "SYNOPSIS" .sp .nf fp32_to_fp64:long(input:long) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 a long integer .RE .SH "DESCRIPTION" .PP Convert from 32 bit floating point to a 64 bit softfloat floating point\&. .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_add.3stap000066400000000000000000000032041414446751200264000ustar00rootroot00000000000000'\" t .\" Title: function::fp_add .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_ADD" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_add \- Addition between floating points .SH "SYNOPSIS" .sp .nf fp_add:long(add1:long,add2:long) .fi .SH "ARGUMENTS" .PP \fIadd1\fR .RS 4 the 64 bit floating point addend .RE .PP \fIadd2\fR .RS 4 second 64 bit floating point addend .RE .SH "DESCRIPTION" .PP Given addend 1 and addend 2, apply floating point adding .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_div.3stap000066400000000000000000000000621414446751200264310ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_eq.3stap000066400000000000000000000031461414446751200262620ustar00rootroot00000000000000'\" t .\" Title: function::fp_eq .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_EQ" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_eq \- fp comparison function equal .SH "SYNOPSIS" .sp .nf fp_eq:long(infp1:long,infp2:long) .fi .SH "ARGUMENTS" .PP \fIinfp1\fR .RS 4 the 64 bit floating point input .RE .PP \fIinfp2\fR .RS 4 second 64 bit floating point input .RE .SH "DESCRIPTION" .PP check if infp1 is equal to infp2 .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_le.3stap000066400000000000000000000032011414446751200262450ustar00rootroot00000000000000'\" t .\" Title: function::fp_le .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_LE" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_le \- Check if first fp is less than or equal to .SH "SYNOPSIS" .sp .nf fp_le:long(infp1:long,infp2:long) .fi .SH "ARGUMENTS" .PP \fIinfp1\fR .RS 4 the 64 bit floating point input .RE .PP \fIinfp2\fR .RS 4 second 64 bit floating point input .RE .SH "DESCRIPTION" .PP check if infp1 is less than or equal to infp2 .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_lt.3stap000066400000000000000000000031641414446751200262740ustar00rootroot00000000000000'\" t .\" Title: function::fp_lt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_LT" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_lt \- fp comparison function less than .SH "SYNOPSIS" .sp .nf fp_lt:long(infp1:long,infp2:long) .fi .SH "ARGUMENTS" .PP \fIinfp1\fR .RS 4 the 64 bit floating point input .RE .PP \fIinfp2\fR .RS 4 second 64 bit floating point input .RE .SH "DESCRIPTION" .PP check if infp1 is strictly less than infp2 .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_mul.3stap000066400000000000000000000031741414446751200264530ustar00rootroot00000000000000'\" t .\" Title: function::fp_mul .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_MUL" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_mul \- Multiplication between floating points .SH "SYNOPSIS" .sp .nf fp_mul:long(mul1:long,mul2:long) .fi .SH "ARGUMENTS" .PP \fImul1\fR .RS 4 the 64 bit floating point multiplicand .RE .PP \fImul2\fR .RS 4 64 bit floating point multiplier .RE .SH "DESCRIPTION" .PP result is multiplicand times multiplier .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_rem.3stap000066400000000000000000000031731414446751200264400ustar00rootroot00000000000000'\" t .\" Title: function::fp_rem .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_REM" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_rem \- Floating point division .SH "SYNOPSIS" .sp .nf fp_rem:long(div1:long,div2:long) .fi .SH "ARGUMENTS" .PP \fIdiv1\fR .RS 4 the 64 bit floating point dividend .RE .PP \fIdiv2\fR .RS 4 64 bit floating point divisor .RE .SH "DESCRIPTION" .PP result would be the remainder after divisor divides dividend .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_sqrt.3stap000066400000000000000000000030441414446751200266430ustar00rootroot00000000000000'\" t .\" Title: function::fp_sqrt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_SQRT" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_sqrt \- Floating point square root .SH "SYNOPSIS" .sp .nf fp_sqrt:long(infp:long) .fi .SH "ARGUMENTS" .PP \fIinfp\fR .RS 4 the 64 bit floating point input .RE .SH "DESCRIPTION" .PP apply sqrt to input floating point .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_sub.3stap000066400000000000000000000031651414446751200264470ustar00rootroot00000000000000'\" t .\" Title: function::fp_sub .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_SUB" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_sub \- Subtraction between floating points .SH "SYNOPSIS" .sp .nf fp_sub:long(sub1:long,sub2:long) .fi .SH "ARGUMENTS" .PP \fIsub1\fR .RS 4 the 64 bit floating point minuend .RE .PP \fIsub2\fR .RS 4 64 bit floating point subtrahend .RE .SH "DESCRIPTION" .PP result would be minuend minus subtrahend .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_to_long.3stap000066400000000000000000000037441414446751200273220ustar00rootroot00000000000000'\" t .\" Title: function::fp_to_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_TO_LONG" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_to_long \- Convert fp to int64 .SH "SYNOPSIS" .sp .nf fp_to_long:long(infp:long,roundingMode:long,exact:long) .fi .SH "ARGUMENTS" .PP \fIinfp\fR .RS 4 the 64 bit floating point stored in long .RE .PP \fIroundingMode\fR .RS 4 through 0\-6, which are round to nearest even, minMag, min, max, near maxMag and round to odd .RE .PP \fIexact\fR .RS 4 the boolean value, if exact is 1 than raising inexact exception, otherwise ignore the exception\&. .RE .SH "DESCRIPTION" .PP Given a 64 bit floating point, which is stored in long, use the long value to initiate self\-defined float64_t type, then apply the f64_to_i64 function to get the string representation\&. .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fp_to_string.3stap000066400000000000000000000034711414446751200276660ustar00rootroot00000000000000'\" t .\" Title: function::fp_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FP_TO_STRI" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fp_to_string \- Convert 64 bit floating point to string .SH "SYNOPSIS" .sp .nf fp_to_string:string(infp:long,precision:long) .fi .SH "ARGUMENTS" .PP \fIinfp\fR .RS 4 the 64 bit floating point stored in long .RE .PP \fIprecision\fR .RS 4 number of digits after decimal point .RE .SH "DESCRIPTION" .PP Given a 64 bit floating point, which is stored in long, use the long value to initiate self\-defined float64_t type, then apply the f64_to_i64 function to get the string representation\&. .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ftrace.3stap000066400000000000000000000032271414446751200264340ustar00rootroot00000000000000'\" t .\" Title: function::ftrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FTRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ftrace \- Send a message to the ftrace ring\-buffer .SH "SYNOPSIS" .sp .nf ftrace(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP If the ftrace ring\-buffer is configured & available, see /debugfs/tracing/trace for the message\&. Otherwise, the message may be quietly dropped\&. An implicit end\-of\-line is added\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_file.3stap000066400000000000000000000032121414446751200314040ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_file \- get the full path .SH "SYNOPSIS" .sp .nf fullpath_struct_file:string(task:long,file:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIfile\fR .RS 4 Pointer to \(lqstruct file\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_nameidata.3stap000066400000000000000000000032111414446751200324070ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_nameidata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_nameidata \- get the full nameidata path .SH "SYNOPSIS" .sp .nf fullpath_struct_nameidata(nd:) .fi .SH "ARGUMENTS" .PP \fInd\fR .RS 4 Pointer to \(lqstruct nameidata\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel (and systemtap\-tapset) d_path function, with a \(lq/\(rq\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::fullpath_struct_path.3stap000066400000000000000000000031201414446751200314170ustar00rootroot00000000000000'\" t .\" Title: function::fullpath_struct_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::FULLPATH_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::fullpath_struct_path \- get the full path .SH "SYNOPSIS" .sp .nf fullpath_struct_path:string(path:long) .fi .SH "ARGUMENTS" .PP \fIpath\fR .RS 4 Pointer to \(lqstruct path\(rq\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::get_cycles.3stap000066400000000000000000000033261414446751200273110ustar00rootroot00000000000000'\" t .\" Title: function::get_cycles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_CYCLES" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_cycles \- Processor cycle count .SH "SYNOPSIS" .sp .nf get_cycles:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the processor cycle counter value if available, else it returns zero\&. The cycle counter is free running and unsynchronized on each processor\&. Thus, the order of events cannot determined by comparing the results of the get_cycles function on different processors\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::get_loadavg_index.3stap000066400000000000000000000036361414446751200306370ustar00rootroot00000000000000'\" t .\" Title: function::get_loadavg_index .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_LOADAV" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_loadavg_index \- Get the load average for a specified interval .SH "SYNOPSIS" .sp .nf get_loadavg_index:long(indx:long) .fi .SH "ARGUMENTS" .PP \fIindx\fR .RS 4 The load average interval to capture\&. .RE .SH "DESCRIPTION" .PP This function returns the load average at a specified interval\&. The three load average values 1, 5 and 15 minute average corresponds to indexes 0, 1 and 2 of the avenrun array \- see linux/sched\&.h\&. Please note that the truncated\-integer portion of the load average is returned\&. If the specified index is out\-of\-bounds, then an error message and exception is thrown\&. .SH SEE ALSO\n .IR tapset::loadavg (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::get_sa_flags.3stap000066400000000000000000000027401414446751200276050ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_FLA" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_sa_flags \- Returns the numeric value of sa_flags .SH "SYNOPSIS" .sp .nf get_sa_flags:long(act:long) .fi .SH "ARGUMENTS" .PP \fIact\fR .RS 4 address of the sigaction to query\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::get_sa_handler.3stap000066400000000000000000000027501414446751200301270ustar00rootroot00000000000000'\" t .\" Title: function::get_sa_handler .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GET_SA_HAN" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::get_sa_handler \- Returns the numeric value of sa_handler .SH "SYNOPSIS" .sp .nf get_sa_handler:long(act:long) .fi .SH "ARGUMENTS" .PP \fIact\fR .RS 4 address of the sigaction to query\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ms.3stap000066400000000000000000000030421414446751200303430ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_ms \- Number of milliseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_ms:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of milliseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_ns.3stap000066400000000000000000000030401414446751200303420ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_ns \- Number of nanoseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of nanoseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_s.3stap000066400000000000000000000030251414446751200301670ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_s \- Number of seconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_s:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of seconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::gettimeofday_us.3stap000066400000000000000000000030421414446751200303530ustar00rootroot00000000000000'\" t .\" Title: function::gettimeofday_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GETTIMEOFD" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gettimeofday_us \- Number of microseconds since UNIX epoch .SH "SYNOPSIS" .sp .nf gettimeofday_us:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of microseconds since the UNIX epoch\&. .SH SEE ALSO\n .IR tapset::timestamp_gtod (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::gid.3stap000066400000000000000000000027361414446751200257370ustar00rootroot00000000000000'\" t .\" Title: function::gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::GID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::gid \- Returns the group ID of a target process .SH "SYNOPSIS" .sp .nf gid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the group ID of a target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::htonl.3stap000066400000000000000000000026761414446751200263230ustar00rootroot00000000000000'\" t .\" Title: function::htonl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONL" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htonl \- Convert 32\-bit long from host to network order .SH "SYNOPSIS" .sp .nf htonl:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::htonll.3stap000066400000000000000000000027071414446751200264720ustar00rootroot00000000000000'\" t .\" Title: function::htonll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONLL" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htonll \- Convert 64\-bit long long from host to network order .SH "SYNOPSIS" .sp .nf htonll:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::htons.3stap000066400000000000000000000026771414446751200263330ustar00rootroot00000000000000'\" t .\" Title: function::htons .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::HTONS" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::htons \- Convert 16\-bit short from host to network order .SH "SYNOPSIS" .sp .nf htons:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::indent.3stap000066400000000000000000000034241414446751200264500ustar00rootroot00000000000000'\" t .\" Title: function::indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::indent \- returns an amount of space to indent .SH "SYNOPSIS" .sp .nf indent:string(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of space added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a string with appropriate indentation\&. Call it with a small positive or matching negative delta\&. Unlike the thread_indent function, the indent does not track individual indent values on a per thread basis\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::indent_depth.3stap000066400000000000000000000035021414446751200276310ustar00rootroot00000000000000'\" t .\" Title: function::indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INDENT_DEP" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::indent_depth \- returns the global nested\-depth .SH "SYNOPSIS" .sp .nf indent_depth:long(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of depth added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a number for appropriate indentation, similar to \fBindent\fR\&. Call it with a small positive or matching negative delta\&. Unlike the thread_indent_depth function, the indent does not track individual indent values on a per thread basis\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::inet_get_ip_source.3stap000066400000000000000000000030001414446751200310230ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_ip_source .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_I" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inet_get_ip_source \- Provide IP source address string for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_ip_source:string(sock:long) .fi .SH "ARGUMENTS" .PP \fIsock\fR .RS 4 pointer to the kernel socket .RE .SH SEE ALSO\n .IR tapset::inet_sock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::inet_get_local_port.3stap000066400000000000000000000027721414446751200312100ustar00rootroot00000000000000'\" t .\" Title: function::inet_get_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INET_GET_L" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inet_get_local_port \- Provide local port number for a kernel socket .SH "SYNOPSIS" .sp .nf inet_get_local_port:long(sock:long) .fi .SH "ARGUMENTS" .PP \fIsock\fR .RS 4 pointer to the kernel socket .RE .SH SEE ALSO\n .IR tapset::inet_sock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::inode_name.3stap000066400000000000000000000030211414446751200272560ustar00rootroot00000000000000'\" t .\" Title: function::inode_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_NAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inode_name \- get the inode name .SH "SYNOPSIS" .sp .nf inode_name:string(inode:long) .fi .SH "ARGUMENTS" .PP \fIinode\fR .RS 4 Pointer to inode\&. .RE .SH "DESCRIPTION" .PP .PP Returns the first path basename associated with the given inode\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::inode_path.3stap000066400000000000000000000030151414446751200272750ustar00rootroot00000000000000'\" t .\" Title: function::inode_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INODE_PATH" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::inode_path \- get the path to an inode .SH "SYNOPSIS" .sp .nf inode_path:string(inode:long) .fi .SH "ARGUMENTS" .PP \fIinode\fR .RS 4 Pointer to inode\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full path associated with the given inode\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::int_arg.3stap000066400000000000000000000031151414446751200266070ustar00rootroot00000000000000'\" t .\" Title: function::int_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::INT_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::int_arg \- Return function argument as signed int .SH "SYNOPSIS" .sp .nf int_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a signed int (i\&.e\&., a 32\-bit integer sign\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ip_ntop.3stap000066400000000000000000000027521414446751200266420ustar00rootroot00000000000000'\" t .\" Title: function::ip_ntop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IP_NTOP" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ip_ntop \- Returns a string representation for an IPv4 address .SH "SYNOPSIS" .sp .nf ip_ntop:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the IPv4 address represented as an integer .RE .SH SEE ALSO\n .IR tapset::ip (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_filter_key.3stap000066400000000000000000000037551414446751200305130ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_FILT" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_filter_key \- Default filter function for ipmib\&.* probes .SH "SYNOPSIS" .sp .nf ipmib_filter_key:long(skb:long,op:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff .RE .PP \fIop\fR .RS 4 value to be counted if \fIskb\fR passes the filter .RE .PP \fISourceIsLocal\fR .RS 4 1 is local operation and 0 is non\-local operation .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIskb\fR\&. A return value of 0 means this particular \fIskb\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::ipmib-filter-default (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_get_proto.3stap000066400000000000000000000030471414446751200303520ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_get_proto .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_GET_" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_get_proto \- Get the protocol value .SH "SYNOPSIS" .sp .nf ipmib_get_proto:long(skb:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .SH "DESCRIPTION" .PP Returns the protocol value from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_local_addr.3stap000066400000000000000000000032071414446751200304320ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_LOCA" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_local_addr \- Get the local ip address .SH "SYNOPSIS" .sp .nf ipmib_local_addr:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the local ip address \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_remote_addr.3stap000066400000000000000000000032211414446751200306270ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_REMO" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_remote_addr \- Get the remote ip address .SH "SYNOPSIS" .sp .nf ipmib_remote_addr:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the remote ip address from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_local_port.3stap000066400000000000000000000032241414446751200313510ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_tcp_local_port \- Get the local tcp port .SH "SYNOPSIS" .sp .nf ipmib_tcp_local_port:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the local tcp port from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ipmib_tcp_remote_port.3stap000066400000000000000000000032311414446751200315500ustar00rootroot00000000000000'\" t .\" Title: function::ipmib_tcp_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IPMIB_TCP_" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ipmib_tcp_remote_port \- Get the remote tcp port .SH "SYNOPSIS" .sp .nf ipmib_tcp_remote_port:long(skb:long,SourceIsLocal:long) .fi .SH "ARGUMENTS" .PP \fIskb\fR .RS 4 pointer to a struct sk_buff .RE .PP \fISourceIsLocal\fR .RS 4 flag to indicate whether local operation .RE .SH "DESCRIPTION" .PP Returns the remote tcp port from \fIskb\fR\&. .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::is_myproc.3stap000066400000000000000000000031051414446751200271670ustar00rootroot00000000000000'\" t .\" Title: function::is_myproc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_MYPROC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_myproc \- Determines if the current probe point has occurred in the user\*(Aqs own process .SH "SYNOPSIS" .sp .nf is_myproc:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns 1 if the current probe point has occurred in the user\*(Aqs own process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::is_return.3stap000066400000000000000000000030301414446751200271720ustar00rootroot00000000000000'\" t .\" Title: function::is_return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_RETURN" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_return \- Whether the current probe context is a return probe .SH "SYNOPSIS" .sp .nf is_return:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns 1 if the current probe context is a return probe, returns 0 otherwise\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::is_sig_blocked.3stap000066400000000000000000000031021414446751200301200ustar00rootroot00000000000000'\" t .\" Title: function::is_sig_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::IS_SIG_BLO" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::is_sig_blocked \- Returns 1 if the signal is currently blocked, or 0 if it is not .SH "SYNOPSIS" .sp .nf is_sig_blocked:long(task:long,sig:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 address of the task_struct to query\&. .RE .PP \fIsig\fR .RS 4 the signal number to test\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::isdigit.3stap000066400000000000000000000031441414446751200266220ustar00rootroot00000000000000'\" t .\" Title: function::isdigit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISDIGIT" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::isdigit \- Checks for a digit .SH "SYNOPSIS" .sp .nf isdigit:long(str:string) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 string to check .RE .SH "DESCRIPTION" .PP Checks for a digit (0 through 9) as the first character of a string\&. Returns non\-zero if true, and a zero if false\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::isinstr.3stap000066400000000000000000000032271414446751200266630ustar00rootroot00000000000000'\" t .\" Title: function::isinstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ISINSTR" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::isinstr \- Returns whether a string is a substring of another string .SH "SYNOPSIS" .sp .nf isinstr:long(s1:string,s2:string) .fi .SH "ARGUMENTS" .PP \fIs1\fR .RS 4 string to search in .RE .PP \fIs2\fR .RS 4 substring to find .RE .SH "DESCRIPTION" .PP This function returns 1 if string \fIs1\fR contains \fIs2\fR, otherwise zero\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::jiffies.3stap000066400000000000000000000031511414446751200266030ustar00rootroot00000000000000'\" t .\" Title: function::jiffies .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JIFFIES" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::jiffies \- Kernel jiffies count .SH "SYNOPSIS" .sp .nf jiffies:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the value of the kernel jiffies variable\&. This value is incremented periodically by timer interrupts, and may wrap around a 32\-bit or 64\-bit boundary\&. See \fBHZ\fR\&. .SH SEE ALSO\n .IR tapset::timestamp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_add_array.3stap000066400000000000000000000033561414446751200301520ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array \- Add an array .SH "SYNOPSIS" .sp .nf json_add_array:long(name:string,description:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the array\&. .RE .PP \fIdescription\fR .RS 4 Array description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a array, setting up everything needed\&. Arrays contain other metrics, added with \fBjson_add_array_numeric_metric\fR or \fBjson_add_array_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_numeric_metric.3stap000066400000000000000000000037071414446751200332370ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array_numeric_metric \- Add a numeric metric to an array .SH "SYNOPSIS" .sp .nf json_add_array_numeric_metric:long(array_name:string,metric_name:string,metric_description:string,metric_units:string) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array the numeric metric should be added to\&. .RE .PP \fImetric_name\fR .RS 4 The name of the numeric metric\&. .RE .PP \fImetric_description\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .PP \fImetric_units\fR .RS 4 Metic units\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a numeric metric to an array, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_add_array_string_metric.3stap000066400000000000000000000035351414446751200331020ustar00rootroot00000000000000'\" t .\" Title: function::json_add_array_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_A" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_array_string_metric \- Add a string metric to an array .SH "SYNOPSIS" .sp .nf json_add_array_string_metric:long(array_name:string,metric_name:string,metric_description:string) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array the string metric should be added to\&. .RE .PP \fImetric_name\fR .RS 4 The name of the string metric\&. .RE .PP \fImetric_description\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a string metric to an array, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_add_numeric_metric.3stap000066400000000000000000000034031414446751200320320ustar00rootroot00000000000000'\" t .\" Title: function::json_add_numeric_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_N" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_numeric_metric \- Add a numeric metric .SH "SYNOPSIS" .sp .nf json_add_numeric_metric:long(name:string,description:string,units:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIdescription\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .PP \fIunits\fR .RS 4 Metic units\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a numeric metric, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_add_string_metric.3stap000066400000000000000000000032501414446751200316760ustar00rootroot00000000000000'\" t .\" Title: function::json_add_string_metric .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_ADD_S" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_add_string_metric \- Add a string metric .SH "SYNOPSIS" .sp .nf json_add_string_metric:long(name:string,description:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the string metric\&. .RE .PP \fIdescription\fR .RS 4 Metric description\&. An empty string can be used\&. .RE .SH "DESCRIPTION" .PP This function adds a string metric, setting up everything needed\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::json_set_prefix.3stap000066400000000000000000000032471414446751200303730ustar00rootroot00000000000000'\" t .\" Title: function::json_set_prefix .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::JSON_SET_P" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::json_set_prefix \- Set the metric prefix\&. .SH "SYNOPSIS" .sp .nf json_set_prefix:long(prefix:string) .fi .SH "ARGUMENTS" .PP \fIprefix\fR .RS 4 The prefix name to be used\&. .RE .SH "DESCRIPTION" .PP This function sets the \(lqprefix\(rq, which is the name of the base of the metric hierarchy\&. Calling this function is optional, by default the name of the systemtap module is used\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted.3stap000066400000000000000000000053211414446751200313570ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_buffer_quoted \- Retrieves and quotes buffer from kernel space .SH "SYNOPSIS" .sp .nf 1) kernel_buffer_quoted:string(addr:long,inlen:long) .fi .sp .nf 2) kernel_buffer_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP 1) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to MAXSTRINGLEN characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .PP 2) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_buffer_quoted_error.3stap000066400000000000000000000042401414446751200325670ustar00rootroot00000000000000'\" t .\" Title: function::kernel_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_BUF" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_buffer_quoted_error \- Retrieves and quotes buffer from kernel space .SH "SYNOPSIS" .sp .nf kernel_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when kernel space data is not accessible at the given address, an error is thrown\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_char.3stap000066400000000000000000000032651414446751200274470ustar00rootroot00000000000000'\" t .\" Title: function::kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_CHA" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_char \- Retrieves a char value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_char:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_int.3stap000066400000000000000000000032601414446751200273170ustar00rootroot00000000000000'\" t .\" Title: function::kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_INT" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_int \- Retrieves an int value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_int:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_long.3stap000066400000000000000000000032651414446751200274710ustar00rootroot00000000000000'\" t .\" Title: function::kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_LON" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_long \- Retrieves a long value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_long:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_pointer.3stap000066400000000000000000000033071414446751200302070ustar00rootroot00000000000000'\" t .\" Title: function::kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_POI" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_pointer \- Retrieves a pointer value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_pointer:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the pointer from .RE .SH "DESCRIPTION" .PP Returns the pointer value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_short.3stap000066400000000000000000000032731414446751200276700ustar00rootroot00000000000000'\" t .\" Title: function::kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_SHO" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_short \- Retrieves a short value stored in kernel memory .SH "SYNOPSIS" .sp .nf kernel_short:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given kernel memory address\&. Reports an error when reading from the given address fails\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string.3stap000066400000000000000000000037511414446751200300400ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string \- Retrieves string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string:string(addr:long) .fi .sp .nf 2) kernel_string:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns the null terminated C string from a given kernel memory address\&. Reports an error on string copy fault\&. .PP 2) This function returns the null terminated C string from a given kernel memory address\&. Reports the given error message on string copy fault\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_n.3stap000066400000000000000000000034441414446751200303540ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_n \- Retrieves string of given length from kernel memory .SH "SYNOPSIS" .sp .nf kernel_string_n:string(addr:long,n:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIn\fR .RS 4 The maximum length of the string (if not null terminated) .RE .SH "DESCRIPTION" .PP Returns the C string of a maximum given length from a given kernel memory address\&. Reports an error on string copy fault\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted.3stap000066400000000000000000000037511414446751200314210ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted \- Retrieves and quotes string from kernel memory .SH "SYNOPSIS" .sp .nf kernel_string_quoted:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the kernel memory address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the null terminated C string from a given kernel memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. If the kernel memory data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf16.3stap000066400000000000000000000033241414446751200324420ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted_utf16 \- Quote given kernel UTF\-16 string\&. .SH "SYNOPSIS" .sp .nf kernel_string_quoted_utf16:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-16 decoding as per \fIkernel_string_utf16\fR\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_quoted_utf32.3stap000066400000000000000000000033241414446751200324400ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_quoted_utf32 \- Quote given UTF\-32 kernel string\&. .SH "SYNOPSIS" .sp .nf kernel_string_quoted_utf32:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-32 decoding as per \fIkernel_string_utf32\fR\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf16.3stap000066400000000000000000000041671414446751200310670ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_utf16 \- Retrieves UTF\-16 string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string_utf16:string(addr:long) .fi .sp .nf 2) kernel_string_utf16:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given kernel memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given kernel memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::kernel_string_utf32.3stap000066400000000000000000000041671414446751200310650ustar00rootroot00000000000000'\" t .\" Title: function::kernel_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KERNEL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::kernel_string_utf32 \- Retrieves UTF\-32 string from kernel memory .SH "SYNOPSIS" .sp .nf 1) kernel_string_utf32:string(addr:long) .fi .sp .nf 2) kernel_string_utf32:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given kernel memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given kernel memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::conversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ktime_get_ns.3stap000066400000000000000000000027701414446751200276420ustar00rootroot00000000000000'\" t .\" Title: function::ktime_get_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::KTIME_GET_" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ktime_get_ns \- Number of nanoseconds since boot .SH "SYNOPSIS" .sp .nf ktime_get_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the system ktime\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::linuxmib_filter_key.3stap000066400000000000000000000036141414446751200312340ustar00rootroot00000000000000'\" t .\" Title: function::linuxmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LINUXMIB_F" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::linuxmib_filter_key \- Default filter function for linuxmib\&.* probes .SH "SYNOPSIS" .sp .nf linuxmib_filter_key:long(sk:long,op:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to the struct sock .RE .PP \fIop\fR .RS 4 value to be counted if \fIsk\fR passes the filter .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIsk\fR\&. A return value of 0 means this particular \fIsk\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::linuxmib-filter-default (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ms.3stap000066400000000000000000000032531414446751200301330ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_ms \- Number of milliseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_ms:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of milliseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::local_clock_ns.3stap000066400000000000000000000032511414446751200301320ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_ns \- Number of nanoseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_ns:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of nanoseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::local_clock_s.3stap000066400000000000000000000032361414446751200277570ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_s \- Number of seconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_s:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of seconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::local_clock_us.3stap000066400000000000000000000032531414446751200301430ustar00rootroot00000000000000'\" t .\" Title: function::local_clock_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOCAL_CLOC" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::local_clock_us \- Number of microseconds on the local cpu\*(Aqs clock .SH "SYNOPSIS" .sp .nf local_clock_us:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the number of microseconds on the local cpu\*(Aqs clock\&. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy)\&. .SH SEE ALSO\n .IR tapset::timestamp_monotonic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::log.3stap000066400000000000000000000033561414446751200257540ustar00rootroot00000000000000'\" t .\" Title: function::log .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LOG" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::log \- Send a line to the common trace buffer .SH "SYNOPSIS" .sp .nf log(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP This function logs data\&. log sends the message immediately to staprun and to the bulk transport (relayfs) if it is being used\&. If the last character given is not a newline, then one is added\&. This function is not as efficient as printf and should be used only for urgent messages\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::long_arg.3stap000066400000000000000000000031571414446751200267620ustar00rootroot00000000000000'\" t .\" Title: function::long_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONG_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::long_arg \- Return function argument as signed long .SH "SYNOPSIS" .sp .nf long_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a signed long\&. On architectures where a long is 32 bits, the value is sign\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::long_to_fp.3stap000066400000000000000000000031111414446751200273060ustar00rootroot00000000000000'\" t .\" Title: function::long_to_fp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONG_TO_FP" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::long_to_fp \- Convert long int to 64 bit floating point .SH "SYNOPSIS" .sp .nf long_to_fp:long(input:long) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 a long integer .RE .SH "DESCRIPTION" .PP Convert from a long to a 64 bit softfloat floating point\&. .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::longlong_arg.3stap000066400000000000000000000030551414446751200276370ustar00rootroot00000000000000'\" t .\" Title: function::longlong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::LONGLONG_A" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::longlong_arg \- Return function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf longlong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a 64\-bit value\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::matched.3stap000066400000000000000000000036401414446751200265740ustar00rootroot00000000000000'\" t .\" Title: function::matched .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::matched \- Return a given matched subexpression\&. .SH "SYNOPSIS" .sp .nf matched:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index to the subexpression to return\&. 0 corresponds to the entire regular expression\&. .RE .SH "DESCRIPTION" .PP returns the content of the n\*(Aqth subexpression of the last successful use of the =~ regex matching operator\&. Returns an empty string if the n\*(Aqth subexpression was not matched (e\&.g\&. due to alternation)\&. Throws an error if the last use of =~ was a failed match, or if fewer than n subexpressions are present in the original regexp\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::matched_str.3stap000066400000000000000000000031751414446751200274670ustar00rootroot00000000000000'\" t .\" Title: function::matched_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MATCHED_ST" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::matched_str \- Return the last matched string\&. .SH "SYNOPSIS" .sp .nf matched_str:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP returns the string matched by the last successful use of the =~ regexp matching operator\&. Returns an error if the last use of =~ led to a failed match\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::mdelay.3stap000066400000000000000000000030551414446751200264420ustar00rootroot00000000000000'\" t .\" Title: function::mdelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MDELAY" "3stap" "November 2021" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::mdelay \- millisecond delay .SH "SYNOPSIS" .sp .nf mdelay(ms:long) .fi .SH "ARGUMENTS" .PP \fIms\fR .RS 4 Number of milliseconds to delay\&. .RE .SH "DESCRIPTION" .PP This function inserts a multi\-millisecond busy\-delay into a probe handler\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-delay (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::mem_page_size.3stap000066400000000000000000000026631414446751200277770ustar00rootroot00000000000000'\" t .\" Title: function::mem_page_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MEM_PAGE_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::mem_page_size \- Number of bytes in a page for this architecture .SH "SYNOPSIS" .sp .nf mem_page_size:long() .fi .SH "ARGUMENTS" .PP None .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::modname.3stap000066400000000000000000000033621414446751200266100ustar00rootroot00000000000000'\" t .\" Title: function::modname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::modname \- Return the kernel module name loaded at the address .SH "SYNOPSIS" .sp .nf modname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to map to a kernel module name .RE .SH "DESCRIPTION" .PP Returns the module name associated with the given address if known\&. If not known it will raise an error\&. If the address was not in a kernel module, but in the kernel itself, then the string \(lqkernel\(rq will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::module_name.3stap000066400000000000000000000031241414446751200274510ustar00rootroot00000000000000'\" t .\" Title: function::module_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_NAM" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::module_name \- The module name of the current script .SH "SYNOPSIS" .sp .nf module_name:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the stap module\&. Either generated randomly (stap_[0\-9a\-f]+_[0\-9a\-f]+) or set by stap \-m \&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::module_size.3stap000066400000000000000000000030141414446751200275010ustar00rootroot00000000000000'\" t .\" Title: function::module_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MODULE_SIZ" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::module_size \- The module size of the current script .SH "SYNOPSIS" .sp .nf module_size:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the sizes of various sections of the stap module\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::msecs_to_string.3stap000066400000000000000000000033631414446751200303730ustar00rootroot00000000000000'\" t .\" Title: function::msecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::MSECS_TO_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::msecs_to_string \- Human readable string for given milliseconds .SH "SYNOPSIS" .sp .nf msecs_to_string:string(msecs:long) .fi .SH "ARGUMENTS" .PP \fImsecs\fR .RS 4 Number of milliseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of milliseconds as a human readable string consisting of \(lqXmY\&.ZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZ is the number of milliseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::nfsderror.3stap000066400000000000000000000031011414446751200271630ustar00rootroot00000000000000'\" t .\" Title: function::nfsderror .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NFSDERROR" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::nfsderror \- Convert nfsd error number into string .SH "SYNOPSIS" .sp .nf nfsderror:string(err:long) .fi .SH "ARGUMENTS" .PP \fIerr\fR .RS 4 errnum .RE .SH "DESCRIPTION" .PP This function returns a string for the error number passed into the function\&. .SH SEE ALSO\n .IR tapset::nfsderrno (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ngroups.3stap000066400000000000000000000035761414446751200266740ustar00rootroot00000000000000'\" t .\" Title: function::ngroups .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NGROUPS" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ngroups \- Number of subexpressions in the last match\&. .SH "SYNOPSIS" .sp .nf ngroups:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP returns the number of subexpressions from the last successful use of the =~ regex matching operator\&. .PP Note that this number includes subexpressions which are present in the regex but did not match any string; for example, given the regex \(lqa|(b)\(rq, the subexpressions will count the group for (b) regardless of whether it matched a string or not\&. Throws an error if the last use of =~ was a failed match\&. .SH SEE ALSO\n .IR tapset::regex (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_egid.3stap000066400000000000000000000031411414446751200265730ustar00rootroot00000000000000'\" t .\" Title: function::ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EGID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_egid \- Returns the effective gid of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_egid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective gid of a target process as seen in the target user namespace if provided, or the stap process namespace .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_euid.3stap000066400000000000000000000031561414446751200266170ustar00rootroot00000000000000'\" t .\" Title: function::ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_EUID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_euid \- Returns the effective user ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_euid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the effective user ID of the target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_gid.3stap000066400000000000000000000031261414446751200264310ustar00rootroot00000000000000'\" t .\" Title: function::ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_GID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_gid \- Returns the group ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_gid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the group ID of a target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_pgrp.3stap000066400000000000000000000031561414446751200266410ustar00rootroot00000000000000'\" t .\" Title: function::ns_pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PGRP" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_pgrp \- Returns the process group ID of the current process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_pgrp:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process group ID of the current process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_pid.3stap000066400000000000000000000030351414446751200264410ustar00rootroot00000000000000'\" t .\" Title: function::ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_pid \- Returns the ID of a target process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the ID of a target process as seen in the target pid namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_ppid.3stap000066400000000000000000000032101414446751200266140ustar00rootroot00000000000000'\" t .\" Title: function::ns_ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_PPID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_ppid \- Returns the process ID of a target process\*(Aqs parent process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_ppid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function return the process ID of the target proccess\*(Aqs parent process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_sid.3stap000066400000000000000000000033011414446751200264400ustar00rootroot00000000000000'\" t .\" Title: function::ns_sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_SID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_sid \- Returns the session ID of the current process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_sid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The namespace\-aware session ID of a process is the process group ID of the session leader as seen in the target pid namespace if provided, or the stap process namespace\&. Session ID is stored in the signal_struct since Kernel 2\&.6\&.0\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_tid.3stap000066400000000000000000000031261414446751200264460ustar00rootroot00000000000000'\" t .\" Title: function::ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_TID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_tid \- Returns the thread ID of a target process as seen in a pid namespace .SH "SYNOPSIS" .sp .nf ns_tid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the thread ID of a target process as seen in the target pid namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ns_uid.3stap000066400000000000000000000031261414446751200264470ustar00rootroot00000000000000'\" t .\" Title: function::ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NS_UID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ns_uid \- Returns the user ID of a target process as seen in a user namespace .SH "SYNOPSIS" .sp .nf ns_uid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the user ID of the target process as seen in the target user namespace if provided, or the stap process namespace\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::nsecs_to_string.3stap000066400000000000000000000033701414446751200303720ustar00rootroot00000000000000'\" t .\" Title: function::nsecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NSECS_TO_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::nsecs_to_string \- Human readable string for given nanoseconds .SH "SYNOPSIS" .sp .nf nsecs_to_string:string(nsecs:long) .fi .SH "ARGUMENTS" .PP \fInsecs\fR .RS 4 Number of nanoseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of nanoseconds as a human readable string consisting of \(lqXmY\&.ZZZZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZZZZZZZ is the number of nanoseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ntohl.3stap000066400000000000000000000026761414446751200263230ustar00rootroot00000000000000'\" t .\" Title: function::ntohl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHL" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohl \- Convert 32\-bit long from network to host order .SH "SYNOPSIS" .sp .nf ntohl:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ntohll.3stap000066400000000000000000000027071414446751200264720ustar00rootroot00000000000000'\" t .\" Title: function::ntohll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHLL" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohll \- Convert 64\-bit long long from network to host order .SH "SYNOPSIS" .sp .nf ntohll:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ntohs.3stap000066400000000000000000000026771414446751200263330ustar00rootroot00000000000000'\" t .\" Title: function::ntohs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::NTOHS" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ntohs \- Convert 16\-bit short from network to host order .SH "SYNOPSIS" .sp .nf ntohs:long(x:long) .fi .SH "ARGUMENTS" .PP \fIx\fR .RS 4 Value to convert .RE .SH SEE ALSO\n .IR tapset::inet (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pages_to_string.3stap000066400000000000000000000031671414446751200303620ustar00rootroot00000000000000'\" t .\" Title: function::pages_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PAGES_TO_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pages_to_string \- Turns pages into a human readable string .SH "SYNOPSIS" .sp .nf pages_to_string:string(pages:long) .fi .SH "ARGUMENTS" .PP \fIpages\fR .RS 4 Number of pages to translate\&. .RE .SH "DESCRIPTION" .PP Multiplies pages by \fBpage_size\fR to get the number of bytes and returns the result of \fBbytes_to_string\fR\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::panic.3stap000066400000000000000000000031211414446751200262530ustar00rootroot00000000000000'\" t .\" Title: function::panic .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PANIC" "3stap" "November 2021" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::panic \- trigger a panic .SH "SYNOPSIS" .sp .nf panic(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 message to pass to kernel\*(Aqs \fBpanic\fR function .RE .SH "DESCRIPTION" .PP This function triggers an immediate panic of the running kernel with a user\-specified panic message\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::panic (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pexecname.3stap000066400000000000000000000030421414446751200271300ustar00rootroot00000000000000'\" t .\" Title: function::pexecname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PEXECNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pexecname \- Returns the execname of a target process\*(Aqs parent process .SH "SYNOPSIS" .sp .nf pexecname:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the execname of a target process\*(Aqs parent procces\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pgrp.3stap000066400000000000000000000027701414446751200261420ustar00rootroot00000000000000'\" t .\" Title: function::pgrp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PGRP" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pgrp \- Returns the process group ID of the current process .SH "SYNOPSIS" .sp .nf pgrp:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process group ID of the current process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pid.3stap000066400000000000000000000027221414446751200257430ustar00rootroot00000000000000'\" t .\" Title: function::pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid \- Returns the ID of a target process .SH "SYNOPSIS" .sp .nf pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the ID of a target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pid2execname.3stap000066400000000000000000000030321414446751200275260ustar00rootroot00000000000000'\" t .\" Title: function::pid2execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2EXECNA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid2execname \- The name of the given process identifier .SH "SYNOPSIS" .sp .nf pid2execname:string(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 process identifier .RE .SH "DESCRIPTION" .PP Return the name of the given process id\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pid2task.3stap000066400000000000000000000030301414446751200267010ustar00rootroot00000000000000'\" t .\" Title: function::pid2task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PID2TASK" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pid2task \- The task_struct of the given process identifier .SH "SYNOPSIS" .sp .nf pid2task:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 process identifier .RE .SH "DESCRIPTION" .PP Return the task struct of the given process id\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pn.3stap000066400000000000000000000031071414446751200256020ustar00rootroot00000000000000'\" t .\" Title: function::pn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PN" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pn \- Returns the active probe name .SH "SYNOPSIS" .sp .nf pn:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the script\-level probe point associated with a currently running probe handler, including wild\-card expansion effects\&. Context: The current probe point\&. .SH SEE ALSO\n .IR tapset::pn (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pnlabel.3stap000066400000000000000000000032561414446751200266070ustar00rootroot00000000000000'\" t .\" Title: function::pnlabel .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PNLABEL" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pnlabel \- Returns the label name parsed from the probe name .SH "SYNOPSIS" .sp .nf pnlabel:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This returns the label name as parsed from the script\-level probe point\&. This function will only work if called directly from the body of a \*(Aq\&.label\*(Aq probe point (i\&.e\&. no aliases)\&. .SH "CONTEXT" .PP The current probe point\&. .SH SEE ALSO\n .IR tapset::pn (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pointer_arg.3stap000066400000000000000000000031331414446751200274750ustar00rootroot00000000000000'\" t .\" Title: function::pointer_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::POINTER_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pointer_arg \- Return function argument as pointer value .SH "SYNOPSIS" .sp .nf pointer_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned value of argument n, same as ulong_arg\&. Can be used with any type of pointer\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pp.3stap000066400000000000000000000031311414446751200256010ustar00rootroot00000000000000'\" t .\" Title: function::pp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PP" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pp \- Returns the active probe point .SH "SYNOPSIS" .sp .nf pp:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the fully\-resolved probe point associated with a currently running probe handler, including alias and wild\-card expansion effects\&. Context: The current probe point\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ppfunc.3stap000066400000000000000000000030751414446751200264640ustar00rootroot00000000000000'\" t .\" Title: function::ppfunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPFUNC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ppfunc \- Returns the function name parsed from \fBpp\fR .SH "SYNOPSIS" .sp .nf ppfunc:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This returns the function name from the current \fBpp\fR\&. Not all \fBpp\fR have functions in them, in which case "" is returned\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ppid.3stap000066400000000000000000000030221414446751200261150ustar00rootroot00000000000000'\" t .\" Title: function::ppid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PPID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ppid \- Returns the process ID of a target process\*(Aqs parent process .SH "SYNOPSIS" .sp .nf ppid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function return the process ID of the target proccess\*(Aqs parent process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_backtrace.3stap000066400000000000000000000032221414446751200303160ustar00rootroot00000000000000'\" t .\" Title: function::print_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_BACK" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_backtrace \- Print kernel stack back trace .SH "SYNOPSIS" .sp .nf print_backtrace() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function is equivalent to print_stack(\fBbacktrace\fR), except that deeper stack nesting may be supported\&. See print_ubacktrace for user\-space backtrace\&. The function does not return a value\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_backtrace_fileline.3stap000066400000000000000000000032151414446751200321670ustar00rootroot00000000000000'\" t .\" Title: function::print_backtrace_fileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_BACK" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_backtrace_fileline \- Print kernel stack back trace .SH "SYNOPSIS" .sp .nf print_backtrace_fileline() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function is equivalent to \fBprint_backtrace\fR, but output for each symbol is longer including file names and line numbers\&. The function does not return a value\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_regs.3stap000066400000000000000000000030221414446751200273350ustar00rootroot00000000000000'\" t .\" Title: function::print_regs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_REGS" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_regs \- Print a register dump .SH "SYNOPSIS" .sp .nf print_regs() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function prints a register dump\&. Does nothing if no registers are available for the probe point\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_stack.3stap000066400000000000000000000036411414446751200275110ustar00rootroot00000000000000'\" t .\" Title: function::print_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_STAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_stack \- Print out kernel stack from string .SH "SYNOPSIS" .sp .nf print_stack(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBbacktrace\fR\&. .PP Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function\&. Return nothing\&. .SH "NOTE" .PP it is recommended to use \fBprint_syms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_syms.3stap000066400000000000000000000036341414446751200274010ustar00rootroot00000000000000'\" t .\" Title: function::print_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_SYMS" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_syms \- Print out kernel stack from string .SH "SYNOPSIS" .sp .nf print_syms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to \fBstack\fR, \fBcallers\fR, and similar functions\&. .PP Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by \fBsymdata\fR\&. Returns nothing\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace.3stap000066400000000000000000000042651414446751200305130ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ubacktrace \- Print stack back trace for current user\-space task\&. .SH "SYNOPSIS" .sp .nf 1) print_ubacktrace() .fi .sp .nf 2) print_ubacktrace(pc:long,sp:long,fp:long) .fi .SH "ARGUMENTS" .PP \fIpc\fR .RS 4 override PC .RE .PP \fIsp\fR .RS 4 override SP .RE .PP \fIfp\fR .RS 4 override FP .RE .SH "DESCRIPTION" .PP 1) .PP 2) Equivalent to print_ustack(\fBubacktrace\fR), except that deeper stack nesting may be supported\&. Returns nothing\&. See \fBprint_backtrace\fR for kernel backtrace\&. .PP Equivalent to \fBprint_ubacktrace\fR, but it performs the backtrace using the pc, sp, and fp provided\&. Useful .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace_brief.3stap000066400000000000000000000035001414446751200316510ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace_brief .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ubacktrace_brief \- Print stack back trace for current user\-space task\&. .SH "SYNOPSIS" .sp .nf print_ubacktrace_brief() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Equivalent to \fBprint_ubacktrace\fR, but output for each symbol is shorter (just name and offset, or just the hex address of no symbol could be found)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_ubacktrace_fileline.3stap000066400000000000000000000041631414446751200323570ustar00rootroot00000000000000'\" t .\" Title: function::print_ubacktrace_fileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_UBAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ubacktrace_fileline \- Print stack back trace for current user\-space task\&. .SH "SYNOPSIS" .sp .nf 1) print_ubacktrace_fileline() .fi .sp .nf 2) print_ubacktrace_fileline(pc:long,sp:long,fp:long) .fi .SH "ARGUMENTS" .PP \fIpc\fR .RS 4 override PC .RE .PP \fIsp\fR .RS 4 override SP .RE .PP \fIfp\fR .RS 4 override FP .RE .SH "DESCRIPTION" .PP 1) .PP 2) Equivalent to\fBprint_ubacktrace\fR, but output for each symbol is longer including file names and line numbers\&. .PP Equivalent to \fBprint_ubacktrace_fileline\fR, but it performs the backtrace using the pc, sp, and fp passed in\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_ustack.3stap000066400000000000000000000037261414446751200277020ustar00rootroot00000000000000'\" t .\" Title: function::print_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USTA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_ustack \- Print out stack for the current task from string\&. .SH "SYNOPSIS" .sp .nf print_ustack(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses for the current task\&. .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBubacktrace\fR for the current task\&. .PP Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function\&. Return nothing\&. .SH "NOTE" .PP it is recommended to use \fBprint_usyms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::print_usyms.3stap000066400000000000000000000036371414446751200275710ustar00rootroot00000000000000'\" t .\" Title: function::print_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINT_USYM" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::print_usyms \- Print out user stack from string .SH "SYNOPSIS" .sp .nf print_usyms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (user) addresses .RE .SH "DESCRIPTION" .PP This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to \fBustack\fR, \fBucallers\fR, and similar functions\&. .PP Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by \fBusymdata\fR\&. Returns nothing\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::printk.3stap000066400000000000000000000034501414446751200264750ustar00rootroot00000000000000'\" t .\" Title: function::printk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PRINTK" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::printk \- Send a message to the kernel trace buffer .SH "SYNOPSIS" .sp .nf printk(level:long,msg:string) .fi .SH "ARGUMENTS" .PP \fIlevel\fR .RS 4 an integer for the severity level (0=KERN_EMERG \&.\&.\&. 7=KERN_DEBUG) .RE .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP Print a line of text to the kernel dmesg/console with the given severity\&. An implicit end\-of\-line is added\&. This function may not be safely called from all kernel probe contexts, so is restricted to guru mode only\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::probe_type.3stap000066400000000000000000000037031414446751200273370ustar00rootroot00000000000000'\" t .\" Title: function::probe_type .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBE_TYPE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probe_type \- The low level probe handler type of the current probe\&. .SH "SYNOPSIS" .sp .nf probe_type:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns a short string describing the low level probe handler type for the current probe point\&. This is for informational purposes only\&. Depending on the low level probe handler different context functions can or cannot provide information about the current event (for example some probe handlers only trigger in user space and have no associated kernel context)\&. High\-level probes might map to the same or different low\-level probes (depending on systemtap version and/or kernel used)\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::probefunc.3stap000066400000000000000000000037611414446751200271560ustar00rootroot00000000000000'\" t .\" Title: function::probefunc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEFUNC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probefunc \- Return the probe point\*(Aqs function name, if known .SH "SYNOPSIS" .sp .nf probefunc:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the function being probed based on the current address, as computed by symname(\fBaddr\fR) or usymname(\fBuaddr\fR) depending on probe context (whether the probe is a user probe or a kernel probe)\&. .SH "PLEASE NOTE" .PP this function\*(Aqs behaviour differs between SystemTap 2\&.0 and earlier versions\&. Prior to 2\&.0, \fBprobefunc\fR obtained the function name from the probe point string as returned by \fBpp\fR, and used the current address as a fallback\&. .PP Consider using \fBppfunc\fR instead\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::probemod.3stap000066400000000000000000000030451414446751200267750ustar00rootroot00000000000000'\" t .\" Title: function::probemod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROBEMOD" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::probemod \- Return the probe point\*(Aqs kernel module name .SH "SYNOPSIS" .sp .nf probemod:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the name of the kernel module containing the probe point, if known\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_data.3stap000066400000000000000000000035351414446751200277640ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_D" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_data \- Program data size (data + stack) in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_data:long() .fi .sp .nf 2) proc_mem_data:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the current process data size (data + stack) in pages, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the given process data size (data + stack) in pages, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_rss.3stap000066400000000000000000000035221414446751200276560ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_rss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_R" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_rss \- Program resident set size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_rss:long() .fi .sp .nf 2) proc_mem_rss:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the resident set size in pages of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the resident set size in pages of the given process, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_shr.3stap000066400000000000000000000035551414446751200276510ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_shr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_shr \- Program shared pages (from shared mappings) .SH "SYNOPSIS" .sp .nf 1) proc_mem_shr:long() .fi .sp .nf 2) proc_mem_shr:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the shared pages (from shared mappings) of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the shared pages (from shared mappings) of the given process, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_size.3stap000066400000000000000000000035571414446751200300310ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_size \- Total program virtual memory size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_size:long() .fi .sp .nf 2) proc_mem_size:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the total virtual memory size in pages of the current process, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the total virtual memory size in pages of the given process, or zero when that process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_string.3stap000066400000000000000000000036651414446751200303650ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_string \- Human readable string of process memory usage .SH "SYNOPSIS" .sp .nf 1) proc_mem_string:string() .fi .sp .nf 2) proc_mem_string:string(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the current process\&. For example\(lqsize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k\(rq\&. .PP 2) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the given process\&. For example\(lqsize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k\(rq\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::proc_mem_txt.3stap000066400000000000000000000035011414446751200276630ustar00rootroot00000000000000'\" t .\" Title: function::proc_mem_txt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PROC_MEM_T" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::proc_mem_txt \- Program text (code) size in pages .SH "SYNOPSIS" .sp .nf 1) proc_mem_txt:long() .fi .sp .nf 2) proc_mem_txt:long(pid:long) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of process to examine .RE .SH "DESCRIPTION" .PP 1) Returns the current process text (code) size in pages, or zero when there is no current process or the number of pages couldn\*(Aqt be retrieved\&. .PP 2) Returns the given process text (code) size in pages, or zero when the process doesn\*(Aqt exist or the number of pages couldn\*(Aqt be retrieved\&. .SH SEE ALSO\n .IR tapset::proc_mem (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::pstrace.3stap000066400000000000000000000032131414446751200266240ustar00rootroot00000000000000'\" t .\" Title: function::pstrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::PSTRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::pstrace \- Chain of processes and pids back to init(1) .SH "SYNOPSIS" .sp .nf pstrace:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 Pointer to task struct of process .RE .SH "DESCRIPTION" .PP This function returns a string listing execname and pid for each process starting from \fItask\fR back to the process ancestor that init(1) spawned\&. .SH SEE ALSO\n .IR tapset::pstrace (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qs_done.3stap000066400000000000000000000031431414446751200266150ustar00rootroot00000000000000'\" t .\" Title: function::qs_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_DONE" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_done \- Function to record finishing request .SH "SYNOPSIS" .sp .nf qs_done(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service that finished .RE .SH "DESCRIPTION" .PP This function records that a request originally from the given queue has completed being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qs_run.3stap000066400000000000000000000032341414446751200264750ustar00rootroot00000000000000'\" t .\" Title: function::qs_run .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_RUN" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_run \- Function to record being moved from wait queue to being serviced .SH "SYNOPSIS" .sp .nf qs_run(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service being moved and started .RE .SH "DESCRIPTION" .PP This function records that the previous enqueued request was removed from the given wait queue and is now being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qs_wait.3stap000066400000000000000000000031221414446751200266310ustar00rootroot00000000000000'\" t .\" Title: function::qs_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QS_WAIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qs_wait \- Function to record enqueue requests .SH "SYNOPSIS" .sp .nf qs_wait(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the queue requesting enqueue .RE .SH "DESCRIPTION" .PP This function records that a new request was enqueued for the given queue name\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_blocked.3stap000066400000000000000000000033111414446751200274510ustar00rootroot00000000000000'\" t .\" Title: function::qsq_blocked .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_BLOCKE" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_blocked \- Returns the time reqest was on the wait queue .SH "SYNOPSIS" .sp .nf qsq_blocked:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the fraction of elapsed time during which one or more requests were on the wait queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_print.3stap000066400000000000000000000035401414446751200272060ustar00rootroot00000000000000'\" t .\" Title: function::qsq_print .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_PRINT" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_print \- Prints a line of statistics for the given queue .SH "SYNOPSIS" .sp .nf qsq_print(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .SH "DESCRIPTION" .PP This function prints a line containing the following .SH "STATISTICS FOR THE GIVEN QUEUE" .PP the queue name, the average rate of requests per second, the average wait queue length, the average time on the wait queue, the average time to service a request, the percentage of time the wait queue was used, and the percentage of time request was being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_service_time.3stap000066400000000000000000000033351414446751200305320ustar00rootroot00000000000000'\" t .\" Title: function::qsq_service_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_SERVIC" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_service_time \- Amount of time per request service .SH "SYNOPSIS" .sp .nf qsq_service_time:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds required to service a request once it is removed from the wait queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_start.3stap000066400000000000000000000033061414446751200272070ustar00rootroot00000000000000'\" t .\" Title: function::qsq_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_START" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_start \- Function to reset the stats for a queue .SH "SYNOPSIS" .sp .nf qsq_start(qname:string) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 the name of the service that finished .RE .SH "DESCRIPTION" .PP This function resets the statistics counters for the given queue, and restarts tracking from the moment the function was called\&. This function is also used to create intialize a queue\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_throughput.3stap000066400000000000000000000032541414446751200302650ustar00rootroot00000000000000'\" t .\" Title: function::qsq_throughput .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_THROUG" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_throughput \- Number of requests served per unit time .SH "SYNOPSIS" .sp .nf qsq_throughput:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average number or requests served per microsecond\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_utilization.3stap000066400000000000000000000033241414446751200304250ustar00rootroot00000000000000'\" t .\" Title: function::qsq_utilization .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_UTILIZ" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_utilization \- Fraction of time that any request was being serviced .SH "SYNOPSIS" .sp .nf qsq_utilization:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds that at least one request was being serviced\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_queue_length.3stap000066400000000000000000000032321414446751200315610ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_queue_length .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_Q" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_wait_queue_length \- length of wait queue .SH "SYNOPSIS" .sp .nf qsq_wait_queue_length:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average length of the wait queue .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::qsq_wait_time.3stap000066400000000000000000000033451414446751200300370ustar00rootroot00000000000000'\" t .\" Title: function::qsq_wait_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Queue Statistics Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::QSQ_WAIT_T" "3stap" "November 2021" "SystemTap Tapset Reference" "Queue Statistics Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::qsq_wait_time \- Amount of time in queue + service per request .SH "SYNOPSIS" .sp .nf qsq_wait_time:long(qname:string,scale:long) .fi .SH "ARGUMENTS" .PP \fIqname\fR .RS 4 queue name .RE .PP \fIscale\fR .RS 4 scale variable to take account for interval fraction .RE .SH "DESCRIPTION" .PP This function returns the average time in microseconds that it took for a request to be serviced (\fBqs_wait\fR to \fBqa_done\fR)\&. .SH SEE ALSO\n .IR tapset::queue_stats (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::raise.3stap000066400000000000000000000032061414446751200262700ustar00rootroot00000000000000'\" t .\" Title: function::raise .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RAISE" "3stap" "November 2021" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::raise \- raise a signal in the current thread .SH "SYNOPSIS" .sp .nf raise(signo:long) .fi .SH "ARGUMENTS" .PP \fIsigno\fR .RS 4 signal number .RE .SH "DESCRIPTION" .PP This function calls the kernel send_sig routine on the current thread, with the given raw unchecked signal number\&. It may raise an error if \fBsend_sig\fR failed\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::randint.3stap000066400000000000000000000027631414446751200266330ustar00rootroot00000000000000'\" t .\" Title: function::randint .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Random functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RANDINT" "3stap" "November 2021" "SystemTap Tapset Reference" "Random functions Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::randint \- Return a random number between [0,n) .SH "SYNOPSIS" .sp .nf randint:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 Number past upper limit of range, not larger than 2**20\&. .RE .SH SEE ALSO\n .IR tapset::random (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ms.3stap000066400000000000000000000032031414446751200306700ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_ms \- Reads the time in milliseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_ms:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in milliseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_ns.3stap000066400000000000000000000032011414446751200306670ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_ns .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_ns \- Reads the time in nanoseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_ns:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in nanoseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_s.3stap000066400000000000000000000031661414446751200305230ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_s .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_s \- Reads the time in seconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_s:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in seconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::read_stopwatch_us.3stap000066400000000000000000000032031414446751200307000ustar00rootroot00000000000000'\" t .\" Title: function::read_stopwatch_us .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::READ_STOPW" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::read_stopwatch_us \- Reads the time in microseconds for a stopwatch .SH "SYNOPSIS" .sp .nf read_stopwatch_us:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 stopwatch name .RE .SH "DESCRIPTION" .PP Returns time in microseconds for stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::real_mount.3stap000066400000000000000000000031171414446751200273330ustar00rootroot00000000000000'\" t .\" Title: function::real_mount .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REAL_MOUNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::real_mount \- get the \*(Aqstruct mount\*(Aq pointer .SH "SYNOPSIS" .sp .nf real_mount:long(vfsmnt:long) .fi .SH "ARGUMENTS" .PP \fIvfsmnt\fR .RS 4 Pointer to \*(Aqstruct vfsmount\*(Aq .RE .SH "DESCRIPTION" .PP .PP Returns the \*(Aqstruct mount\*(Aq pointer value for a \*(Aqstruct vfsmount\*(Aq pointer\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::register.3stap000066400000000000000000000052371414446751200270170ustar00rootroot00000000000000'\" t .\" Title: function::register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTER" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::register \- Return the signed value of the named CPU register .SH "SYNOPSIS" .sp .nf register:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the register to return .RE .SH "DESCRIPTION" .PP Return the value of the named CPU register, as it was saved when the current probe point was hit\&. If the register is 32 bits, it is sign\-extended to 64 bits\&. .PP For the i386 architecture, the following names are recognized\&. (name1/name2 indicates that name1 and name2 are alternative names for the same register\&.) eax/ax, ebp/bp, ebx/bx, ecx/cx, edi/di, edx/dx, eflags/flags, eip/ip, esi/si, esp/sp, orig_eax/orig_ax, xcs/cs, xds/ds, xes/es, xfs/fs, xss/ss\&. .PP For the x86_64 architecture, the following names are recognized: 64\-bit registers: r8, r9, r10, r11, r12, r13, r14, r15, rax/ax, rbp/bp, rbx/bx, rcx/cx, rdi/di, rdx/dx, rip/ip, rsi/si, rsp/sp; 32\-bit registers: eax, ebp, ebx, ecx, edx, edi, edx, eip, esi, esp, flags/eflags, orig_eax; segment registers: xcs/cs, xss/ss\&. .PP For powerpc, the following names are recognized: r0, r1, \&.\&.\&. r31, nip, msr, orig_gpr3, ctr, link, xer, ccr, softe, trap, dar, dsisr, result\&. .PP For s390x, the following names are recognized: r0, r1, \&.\&.\&. r15, args, psw\&.mask, psw\&.addr, orig_gpr2, ilc, trap\&. .PP For AArch64, the following names are recognized: x0, x1, \&.\&.\&. x30, fp, lr, sp, pc, and orig_x0\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::registers_valid.3stap000066400000000000000000000032771414446751200303630ustar00rootroot00000000000000'\" t .\" Title: function::registers_valid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGISTERS_" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::registers_valid \- Determines validity of \fBregister\fR and \fBu_register\fR in current context .SH "SYNOPSIS" .sp .nf registers_valid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns 1 if \fBregister\fR and \fBu_register\fR can be used in the current context, or 0 otherwise\&. For example, \fBregisters_valid\fR returns 0 when called from a begin or end probe\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::regparm.3stap000066400000000000000000000035751414446751200266330ustar00rootroot00000000000000'\" t .\" Title: function::regparm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REGPARM" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::regparm \- Specify regparm value used to compile function .SH "SYNOPSIS" .sp .nf regparm(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 original regparm value .RE .SH "DESCRIPTION" .PP Call this function with argument n before accessing function arguments using the *_arg function is the function was build with the gcc \-mregparm=n option\&. .PP (The i386 kernel is built with \e\-mregparm=3, so systemtap considers regparm(3) the default for kernel functions on that architecture\&.) Only valid on i386 and x86_64 (when probing 32bit applications)\&. Produces an error on other architectures\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::remote_id.3stap000066400000000000000000000035211414446751200271340ustar00rootroot00000000000000'\" t .\" Title: function::remote_id .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_ID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::remote_id \- The index of this instance in a remote execution\&. .SH "SYNOPSIS" .sp .nf remote_id:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns a number 0\&.\&.N, which is the unique index of this particular script execution from a swarm of \(lqstap \-\-remote A \-\-remote B \&.\&.\&.\(rq runs, and is the same number \(lqstap \-\-remote\-prefix\(rq would print\&. The function returns \-1 if the script was not launched with \(lqstap \-\-remote\(rq, or if the remote staprun/stapsh are older than version 1\&.7\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::remote_uri.3stap000066400000000000000000000033361414446751200273430ustar00rootroot00000000000000'\" t .\" Title: function::remote_uri .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REMOTE_URI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::remote_uri \- The name of this instance in a remote execution\&. .SH "SYNOPSIS" .sp .nf remote_uri:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the remote host used to invoke this particular script execution from a swarm of \(lqstap \-\-remote\(rq runs\&. It may not be unique among the swarm\&. The function returns an empty string if the script was not launched with \(lqstap \-\-remote\(rq\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::return_str.3stap000066400000000000000000000034111414446751200273720ustar00rootroot00000000000000'\" t .\" Title: function::return_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURN_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::return_str \- Formats the return value as a string .SH "SYNOPSIS" .sp .nf return_str:string(format:long,ret:long) .fi .SH "ARGUMENTS" .PP \fIformat\fR .RS 4 Variable to determine return type base value .RE .PP \fIret\fR .RS 4 Return value (typically \fB$return\fR) .RE .SH "DESCRIPTION" .PP This function is used by the syscall tapset, and returns a string\&. Set format equal to 1 for a decimal, 2 for hex, 3 for octal\&. .PP Note that this function is preferred over \fBreturnstr\fR\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::returnstr.3stap000066400000000000000000000034461414446751200272430ustar00rootroot00000000000000'\" t .\" Title: function::returnstr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNSTR" "3stap" "November 2021" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::returnstr \- Formats the return value as a string .SH "SYNOPSIS" .sp .nf returnstr:string(format:long) .fi .SH "ARGUMENTS" .PP \fIformat\fR .RS 4 Variable to determine return type base value .RE .SH "DESCRIPTION" .PP This function is used by the nd_syscall tapset, and returns a string\&. Set format equal to 1 for a decimal, 2 for hex, 3 for octal\&. .PP Note that this function should only be used in dwarfless probes (i\&.e\&. \*(Aqkprobe\&.function(\(lqfoo\(rq)\*(Aq)\&. Other probes should use \fBreturn_str\fR\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::returnval.3stap000066400000000000000000000032731414446751200272130ustar00rootroot00000000000000'\" t .\" Title: function::returnval .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Errno Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RETURNVAL" "3stap" "November 2021" "SystemTap Tapset Reference" "Errno Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::returnval \- Possible return value of probed function .SH "SYNOPSIS" .sp .nf returnval:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Return the value of the register in which function values are typically returned\&. Can be used in probes where \fB$return\fR isn\*(Aqt available\&. This is only a guess of the actual return value and can be totally wrong\&. Normally only used in dwarfless probes\&. .SH SEE ALSO\n .IR tapset::errno (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::reverse_path_walk.3stap000066400000000000000000000030431414446751200306710ustar00rootroot00000000000000'\" t .\" Title: function::reverse_path_walk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::REVERSE_PA" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::reverse_path_walk \- get the full dirent path .SH "SYNOPSIS" .sp .nf reverse_path_walk:string(dentry:long) .fi .SH "ARGUMENTS" .PP \fIdentry\fR .RS 4 Pointer to dentry\&. .RE .SH "DESCRIPTION" .PP .PP Returns the path name (partial path to mount point)\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::rlimit_from_str.3stap000066400000000000000000000032431414446751200304010ustar00rootroot00000000000000'\" t .\" Title: function::rlimit_from_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: RLIMIT Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::RLIMIT_FRO" "3stap" "November 2021" "SystemTap Tapset Reference" "RLIMIT Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::rlimit_from_str \- Symbolic string associated with resource limit code .SH "SYNOPSIS" .sp .nf rlimit_from_str:long(lim_str:string) .fi .SH "ARGUMENTS" .PP \fIlim_str\fR .RS 4 The string representation of limit .RE .SH "DESCRIPTION" .PP This function returns the number associated with the given string, such as 0 for the string RLIMIT_CPU, or \-1 for an out\-of\-range value\&. .SH SEE ALSO\n .IR tapset::rlimit (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::s32_arg.3stap000066400000000000000000000030571414446751200264310ustar00rootroot00000000000000'\" t .\" Title: function::s32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S32_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::s32_arg \- Return function argument as signed 32\-bit value .SH "SYNOPSIS" .sp .nf s32_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the signed 32\-bit value of argument n, same as int_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::s64_arg.3stap000066400000000000000000000030641414446751200264340ustar00rootroot00000000000000'\" t .\" Title: function::s64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::S64_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::s64_arg \- Return function argument as signed 64\-bit value .SH "SYNOPSIS" .sp .nf s64_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the signed 64\-bit value of argument n, same as longlong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sa_flags_str.3stap000066400000000000000000000027701414446751200276410ustar00rootroot00000000000000'\" t .\" Title: function::sa_flags_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_FLAGS_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sa_flags_str \- Returns the string representation of sa_flags .SH "SYNOPSIS" .sp .nf sa_flags_str:string(sa_flags:long) .fi .SH "ARGUMENTS" .PP \fIsa_flags\fR .RS 4 the set of flags to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sa_handler.3stap000066400000000000000000000000531414446751200272620ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sa_handler_str.3stap000066400000000000000000000031541414446751200301570ustar00rootroot00000000000000'\" t .\" Title: function::sa_handler_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SA_HANDLER" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sa_handler_str \- Returns the string representation of an sa_handler .SH "SYNOPSIS" .sp .nf sa_handler_str(handler:) .fi .SH "ARGUMENTS" .PP \fIhandler\fR .RS 4 the sa_handler to convert to string\&. .RE .SH "DESCRIPTION" .PP Returns the string representation of an sa_handler\&. If it is not SIG_DFL, SIG_IGN or SIG_ERR, it will return the address of the handler\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_int_arg.3stap000066400000000000000000000031731414446751200274660ustar00rootroot00000000000000'\" t .\" Title: function::set_int_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_INT_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_int_arg \- Set function argument as signed int .SH "SYNOPSIS" .sp .nf set_int_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as a signed int (i\&.e\&., a 32\-bit integer sign\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_char.3stap000066400000000000000000000034221414446751200303150ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_char \- Writes a char value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_char(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the char to .RE .PP \fIval\fR .RS 4 The char which is to be written .RE .SH "DESCRIPTION" .PP Writes the char value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_int.3stap000066400000000000000000000034141414446751200301730ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_int \- Writes an int value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_int(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the int to .RE .PP \fIval\fR .RS 4 The int which is to be written .RE .SH "DESCRIPTION" .PP Writes the int value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_long.3stap000066400000000000000000000034221414446751200303370ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_long \- Writes a long value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_long(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the long to .RE .PP \fIval\fR .RS 4 The long which is to be written .RE .SH "DESCRIPTION" .PP Writes the long value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_pointer.3stap000066400000000000000000000034521414446751200310630ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_pointer \- Writes a pointer value to kernel memory\&. .SH "SYNOPSIS" .sp .nf set_kernel_pointer(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the pointer to .RE .PP \fIval\fR .RS 4 The pointer which is to be written .RE .SH "DESCRIPTION" .PP Writes the pointer value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_short.3stap000066400000000000000000000034311414446751200305370ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_short \- Writes a short value to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_short(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the short to .RE .PP \fIval\fR .RS 4 The short which is to be written .RE .SH "DESCRIPTION" .PP Writes the short value to a given kernel memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string.3stap000066400000000000000000000034111414446751200307040ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_string \- Writes a string to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_string(addr:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the string to .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string to a given kernel memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_kernel_string_n.3stap000066400000000000000000000035721414446751200312310ustar00rootroot00000000000000'\" t .\" Title: function::set_kernel_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_KERNEL" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_kernel_string_n \- Writes a string of given length to kernel memory .SH "SYNOPSIS" .sp .nf set_kernel_string_n(addr:long,n:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The kernel address to write the string to .RE .PP \fIn\fR .RS 4 The maximum length of the string .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string up to a maximum given length to a given kernel memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::conversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_long_arg.3stap000066400000000000000000000032201414446751200276240ustar00rootroot00000000000000'\" t .\" Title: function::set_long_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_LONG_A" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_long_arg \- Set argument as signed long .SH "SYNOPSIS" .sp .nf set_long_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to set .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as a signed long\&. On architectures where a long is 32 bits, the value is sign\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_longlong_arg.3stap000066400000000000000000000031351414446751200305110ustar00rootroot00000000000000'\" t .\" Title: function::set_longlong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_LONGLO" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_longlong_arg \- Set function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf set_longlong_arg:long(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as a 64\-bit value\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_pointer_arg.3stap000066400000000000000000000032061414446751200303510ustar00rootroot00000000000000'\" t .\" Title: function::set_pointer_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_POINTE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_pointer_arg \- Set function argument as pointer value .SH "SYNOPSIS" .sp .nf set_pointer_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the unsigned value of argument n, same as ulong_arg\&. Can be used with any type of pointer\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_s32_arg.3stap000066400000000000000000000031351414446751200273010ustar00rootroot00000000000000'\" t .\" Title: function::set_s32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_S32_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_s32_arg \- Set function argument as signed 32\-bit value .SH "SYNOPSIS" .sp .nf set_s32_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the signed 32\-bit value of argument n, same as int_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_s64_arg.3stap000066400000000000000000000031421414446751200273040ustar00rootroot00000000000000'\" t .\" Title: function::set_s64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_S64_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_s64_arg \- Set function argument as signed 64\-bit value .SH "SYNOPSIS" .sp .nf set_s64_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the signed 64\-bit value of argument n, same as longlong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_u32_arg.3stap000066400000000000000000000031421414446751200273010ustar00rootroot00000000000000'\" t .\" Title: function::set_u32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_U32_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_u32_arg \- Set function argument as unsigned 32\-bit value .SH "SYNOPSIS" .sp .nf set_u32_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the unsigned 32\-bit value of argument n, same as uint_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_u64_arg.3stap000066400000000000000000000031471414446751200273130ustar00rootroot00000000000000'\" t .\" Title: function::set_u64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_U64_AR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_u64_arg \- Set function argument as unsigned 64\-bit value .SH "SYNOPSIS" .sp .nf set_u64_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the unsigned 64\-bit value of argument n, same as ulonglong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_uint_arg.3stap000066400000000000000000000031741414446751200276540ustar00rootroot00000000000000'\" t .\" Title: function::set_uint_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_UINT_A" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_uint_arg \- Set argument as unsigned int .SH "SYNOPSIS" .sp .nf set_uint_arg:long(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to set .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as an unsigned int (i\&.e\&., a 32\-bit integer zero\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_ulong_arg.3stap000066400000000000000000000032441414446751200300170ustar00rootroot00000000000000'\" t .\" Title: function::set_ulong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_ULONG_" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_ulong_arg \- Set function argument as unsigned long .SH "SYNOPSIS" .sp .nf set_ulong_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as an unsigned long\&. On architectures where a long is 32 bits, the value is zero\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_ulonglong_arg.3stap000066400000000000000000000031651414446751200307010ustar00rootroot00000000000000'\" t .\" Title: function::set_ulonglong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_ULONGL" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_ulonglong_arg \- Set function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf set_ulonglong_arg(n:long,v:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .PP \fIv\fR .RS 4 value to set .RE .SH "DESCRIPTION" .PP Set the value of argument n as a 64\-bit value\&. (Same as longlong_arg\&.) .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_char.3stap000066400000000000000000000034071414446751200300160ustar00rootroot00000000000000'\" t .\" Title: function::set_user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_C" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_char \- Writes a char value to user memory .SH "SYNOPSIS" .sp .nf set_user_char(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the char to .RE .PP \fIval\fR .RS 4 The char which is to be written .RE .SH "DESCRIPTION" .PP Writes the char value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_int.3stap000066400000000000000000000034011414446751200276650ustar00rootroot00000000000000'\" t .\" Title: function::set_user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_I" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_int \- Writes an int value to user memory .SH "SYNOPSIS" .sp .nf set_user_int(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the int to .RE .PP \fIval\fR .RS 4 The int which is to be written .RE .SH "DESCRIPTION" .PP Writes the int value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_long.3stap000066400000000000000000000034071414446751200300400ustar00rootroot00000000000000'\" t .\" Title: function::set_user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_L" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_long \- Writes a long value to user memory .SH "SYNOPSIS" .sp .nf set_user_long(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the long to .RE .PP \fIval\fR .RS 4 The long which is to be written .RE .SH "DESCRIPTION" .PP Writes the long value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_pointer.3stap000066400000000000000000000034371414446751200305640ustar00rootroot00000000000000'\" t .\" Title: function::set_user_pointer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_P" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_pointer \- Writes a pointer value to user memory\&. .SH "SYNOPSIS" .sp .nf set_user_pointer(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the pointer to .RE .PP \fIval\fR .RS 4 The pointer which is to be written .RE .SH "DESCRIPTION" .PP Writes the pointer value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_short.3stap000066400000000000000000000034161414446751200302400ustar00rootroot00000000000000'\" t .\" Title: function::set_user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_short \- Writes a short value to user memory .SH "SYNOPSIS" .sp .nf set_user_short(addr:long,val:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the short to .RE .PP \fIval\fR .RS 4 The short which is to be written .RE .SH "DESCRIPTION" .PP Writes the short value to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_string.3stap000066400000000000000000000034211414446751200304030ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_string \- Writes a string to user memory .SH "SYNOPSIS" .sp .nf set_user_string(addr:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the string to .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string to a given user memory address\&. Reports an error when writing to the given address fails\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_string_arg.3stap000066400000000000000000000034161414446751200312400ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_string_arg \- Writes a string to user memory\&. .SH "SYNOPSIS" .sp .nf set_user_string_arg(addr:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the string to .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string to a given user memory address\&. Reports a warning on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::set_user_string_n.3stap000066400000000000000000000035571414446751200307320ustar00rootroot00000000000000'\" t .\" Title: function::set_user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data writing functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SET_USER_S" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data writing functi" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::set_user_string_n \- Writes a string of given length to user memory .SH "SYNOPSIS" .sp .nf set_user_string_n(addr:long,n:long,val:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to write the string to .RE .PP \fIn\fR .RS 4 The maximum length of the string .RE .PP \fIval\fR .RS 4 The string which is to be written .RE .SH "DESCRIPTION" .PP Writes the given string up to a maximum given length to a given user memory address\&. Reports an error on string copy fault\&. Requires the use of guru mode (\-g)\&. .SH SEE ALSO\n .IR tapset::uconversions-guru (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sid.3stap000066400000000000000000000030721414446751200257450ustar00rootroot00000000000000'\" t .\" Title: function::sid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sid \- Returns the session ID of the current process .SH "SYNOPSIS" .sp .nf sid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The session ID of a process is the process group ID of the session leader\&. Session ID is stored in the signal_struct since Kernel 2\&.6\&.0\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::signal_str.3stap000066400000000000000000000027451414446751200273410ustar00rootroot00000000000000'\" t .\" Title: function::signal_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGNAL_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::signal_str \- Returns the string representation of a signal number .SH "SYNOPSIS" .sp .nf signal_str(num:) .fi .SH "ARGUMENTS" .PP \fInum\fR .RS 4 the signal number to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sigset_mask_str.3stap000066400000000000000000000027631414446751200303750ustar00rootroot00000000000000'\" t .\" Title: function::sigset_mask_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SIGSET_MAS" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sigset_mask_str \- Returns the string representation of a sigset .SH "SYNOPSIS" .sp .nf sigset_mask_str:string(mask:long) .fi .SH "ARGUMENTS" .PP \fImask\fR .RS 4 the sigset to convert to string\&. .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_num2str.3stap000066400000000000000000000027721414446751200304500ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_N" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_fam_num2str \- Given a protocol family number, return a string representation .SH "SYNOPSIS" .sp .nf sock_fam_num2str:string(family:long) .fi .SH "ARGUMENTS" .PP \fIfamily\fR .RS 4 The family number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_fam_str2num.3stap000066400000000000000000000030201414446751200304330ustar00rootroot00000000000000'\" t .\" Title: function::sock_fam_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_FAM_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_fam_str2num \- Given a protocol family name (string), return the corresponding protocol family number .SH "SYNOPSIS" .sp .nf sock_fam_str2num:long(family:string) .fi .SH "ARGUMENTS" .PP \fIfamily\fR .RS 4 The family name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_num2str.3stap000066400000000000000000000027661414446751200306740ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_prot_num2str \- Given a protocol number, return a string representation .SH "SYNOPSIS" .sp .nf sock_prot_num2str:string(proto:long) .fi .SH "ARGUMENTS" .PP \fIproto\fR .RS 4 The protocol number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_prot_str2num.3stap000066400000000000000000000030051414446751200306570ustar00rootroot00000000000000'\" t .\" Title: function::sock_prot_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_PROT_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_prot_str2num \- Given a protocol name (string), return the corresponding protocol number .SH "SYNOPSIS" .sp .nf sock_prot_str2num:long(proto:string) .fi .SH "ARGUMENTS" .PP \fIproto\fR .RS 4 The protocol name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_state_num2str.3stap000066400000000000000000000027721414446751200310250ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_num2str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_state_num2str \- Given a socket state number, return a string representation .SH "SYNOPSIS" .sp .nf sock_state_num2str:string(state:long) .fi .SH "ARGUMENTS" .PP \fIstate\fR .RS 4 The state number .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sock_state_str2num.3stap000066400000000000000000000027771414446751200310320ustar00rootroot00000000000000'\" t .\" Title: function::sock_state_str2num .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SOCK_STATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sock_state_str2num \- Given a socket state string, return the corresponding state number .SH "SYNOPSIS" .sp .nf sock_state_str2num:long(state:string) .fi .SH "ARGUMENTS" .PP \fIstate\fR .RS 4 The state name .RE .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::speculate.3stap000066400000000000000000000031521414446751200271520ustar00rootroot00000000000000'\" t .\" Title: function::speculate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::speculate \- Store a string for possible output later .SH "SYNOPSIS" .sp .nf speculate(id:long,output:string) .fi .SH "ARGUMENTS" .PP \fIid\fR .RS 4 buffer id to store the information in .RE .PP \fIoutput\fR .RS 4 string to write out when commit occurs .RE .SH "DESCRIPTION" .PP Add a string to the speculaive buffer for id\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::speculation.3stap000066400000000000000000000033231414446751200275130ustar00rootroot00000000000000'\" t .\" Title: function::speculation .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Speculation .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPECULATIO" "3stap" "November 2021" "SystemTap Tapset Reference" "Speculation" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::speculation \- Allocate a new id for speculative output .SH "SYNOPSIS" .sp .nf speculation:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP The \fBspeculation\fR function is called when a new speculation buffer is needed\&. It returns an id for the speculative output\&. There can be multiple threads being speculated on concurrently\&. This id is used by other speculation functions to keep the threads separate\&. .SH SEE ALSO\n .IR tapset::speculative (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_backtrace.3stap000066400000000000000000000041511414446751200305030ustar00rootroot00000000000000'\" t .\" Title: function::sprint_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_BAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_backtrace \- Return stack back trace as string .SH "SYNOPSIS" .sp .nf sprint_backtrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Returns a simple (kernel) backtrace\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_backtrace\fR\&. Equivalent to sprint_stack(\fBbacktrace\fR), but more efficient (no need to translate between hex strings and final backtrace string)\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_loadavg.3stap000066400000000000000000000031041414446751200301760ustar00rootroot00000000000000'\" t .\" Title: function::sprint_loadavg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_LOA" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_loadavg \- Report a pretty\-printed load average .SH "SYNOPSIS" .sp .nf sprint_loadavg:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the a string with three decimal numbers in the usual format for 1\-, 5\- and 15\-minute load averages\&. .SH SEE ALSO\n .IR tapset::loadavg (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_stack.3stap000066400000000000000000000044221414446751200276720ustar00rootroot00000000000000'\" t .\" Title: function::sprint_stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_STA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_stack \- Return stack for kernel addresses from string .SH "SYNOPSIS" .sp .nf sprint_stack:string(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBbacktrace\fR\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_stack\&. .SH "NOTE" .PP it is recommended to use \fBsprint_syms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_syms.3stap000066400000000000000000000044031414446751200275570ustar00rootroot00000000000000'\" t .\" Title: function::sprint_syms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_SYM" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_syms \- Return stack for kernel addresses from string .SH "SYNOPSIS" .sp .nf sprint_syms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (kernel) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to \fBstack\fR, \fBcallers\fR, and similar functions\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found), as obtained from \fBsymdata\fR\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_syms\fR\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_ubacktrace.3stap000066400000000000000000000045741414446751200307010ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UBA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_ubacktrace \- Return stack back trace for current user\-space task as string\&. .SH "SYNOPSIS" .sp .nf sprint_ubacktrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Returns a simple backtrace for the current task\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_ubacktrace\fR\&. Equivalent to sprint_ustack(\fBubacktrace\fR), but more efficient (no need to translate between hex strings and final backtrace string)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_ustack.3stap000066400000000000000000000045001414446751200300540ustar00rootroot00000000000000'\" t .\" Title: function::sprint_ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_UST" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_ustack \- Return stack for the current task from string\&. .SH "SYNOPSIS" .sp .nf sprint_ustack:string(stk:string) .fi .SH "ARGUMENTS" .PP \fIstk\fR .RS 4 String with list of hexadecimal addresses for the current task\&. .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to \fBubacktrace\fR for the current task\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found)\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ustack\&. .SH "NOTE" .PP it is recommended to use \fBsprint_usyms\fR instead of this function\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::sprint_usyms.3stap000066400000000000000000000044071414446751200277500ustar00rootroot00000000000000'\" t .\" Title: function::sprint_usyms .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SPRINT_USY" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::sprint_usyms \- Return stack for user addresses from string .SH "SYNOPSIS" .sp .nf sprint_usyms(callers:string) .fi .SH "ARGUMENTS" .PP \fIcallers\fR .RS 4 String with list of hexadecimal (user) addresses .RE .SH "DESCRIPTION" .PP Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to \fBustack\fR, \fBucallers\fR, and similar functions\&. .PP Returns a simple backtrace from the given hex string\&. One line per address\&. Includes the symbol name (or hex address if symbol couldn\*(Aqt be resolved) and module name (if found), as obtained from \fBusymdata\fR\&. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets)\&. Returns the backtrace as string (each line terminated by a newline character)\&. Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use \fBprint_usyms\fR\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stack.3stap000066400000000000000000000034151414446751200262740ustar00rootroot00000000000000'\" t .\" Title: function::stack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack \- Return address at given depth of kernel stack backtrace .SH "SYNOPSIS" .sp .nf stack:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack\&. .RE .SH "DESCRIPTION" .PP Performs a simple (kernel) backtrace, and returns the element at the specified position\&. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times \fBstack\fR is called, or in what order\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stack_size.3stap000066400000000000000000000027611414446751200273310ustar00rootroot00000000000000'\" t .\" Title: function::stack_size .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_SIZE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_size \- Return the size of the kernel stack .SH "SYNOPSIS" .sp .nf stack_size:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the size of the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stack_unused.3stap000066400000000000000000000030531414446751200276550ustar00rootroot00000000000000'\" t .\" Title: function::stack_unused .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_UNUS" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_unused \- Returns the amount of kernel stack currently available .SH "SYNOPSIS" .sp .nf stack_unused:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function determines how many bytes are currently available in the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stack_used.3stap000066400000000000000000000030211414446751200273050ustar00rootroot00000000000000'\" t .\" Title: function::stack_used .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STACK_USED" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stack_used \- Returns the amount of kernel stack used .SH "SYNOPSIS" .sp .nf stack_used:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function determines how many bytes are currently used in the kernel stack\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::start_stopwatch.3stap000066400000000000000000000031041414446751200304130ustar00rootroot00000000000000'\" t .\" Title: function::start_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::START_STOP" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::start_stopwatch \- Start a stopwatch .SH "SYNOPSIS" .sp .nf start_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Start stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stop_stopwatch.3stap000066400000000000000000000030771414446751200302540ustar00rootroot00000000000000'\" t .\" Title: function::stop_stopwatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Timestamp Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STOP_STOPW" "3stap" "November 2021" "SystemTap Tapset Reference" "Timestamp Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stop_stopwatch \- Stop a stopwatch .SH "SYNOPSIS" .sp .nf stop_stopwatch(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 the stopwatch name .RE .SH "DESCRIPTION" .PP Stop stopwatch \fIname\fR\&. Creates stopwatch \fIname\fR if it does not currently exist\&. .SH SEE ALSO\n .IR tapset::stopwatch (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stp_pid.3stap000066400000000000000000000031351414446751200266300ustar00rootroot00000000000000'\" t .\" Title: function::stp_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STP_PID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stp_pid \- The process id of the stapio process .SH "SYNOPSIS" .sp .nf stp_pid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process id of the stapio process that launched this script\&. There could be other SystemTap scripts and stapio processes running on the system\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::str_replace.3stap000066400000000000000000000034551414446751200274760ustar00rootroot00000000000000'\" t .\" Title: function::str_replace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STR_REPLAC" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::str_replace \- str_replace Replaces all instances of a substring with another .SH "SYNOPSIS" .sp .nf str_replace:string(prnt_str:string,srch_str:string,rplc_str:string) .fi .SH "ARGUMENTS" .PP \fIprnt_str\fR .RS 4 the string to search and replace in .RE .PP \fIsrch_str\fR .RS 4 the substring which is used to search in \fIprnt_str\fR string .RE .PP \fIrplc_str\fR .RS 4 the substring which is used to replace \fIsrch_str\fR .RE .SH "DESCRIPTION" .PP This function returns the given string with substrings replaced\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::string_quoted.3stap000066400000000000000000000034451414446751200300610ustar00rootroot00000000000000'\" t .\" Title: function::string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRING_QUO" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::string_quoted \- Quotes a given string .SH "SYNOPSIS" .sp .nf string_quoted:string(str:string) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 The kernel address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the quoted string version of the given string, with characters where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::string_to_fp.3stap000066400000000000000000000032551414446751200276660ustar00rootroot00000000000000'\" t .\" Title: function::string_to_fp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Floating point processing Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRING_TO_" "3stap" "November 2021" "SystemTap Tapset Reference" "Floating point processing Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::string_to_fp \- Convert the given string into floating point .SH "SYNOPSIS" .sp .nf string_to_fp:long(input:string) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 the string representation of a decimal number .RE .SH "DESCRIPTION" .PP Given the string representation of a decimal number, convert it to a floating point which is stored in 64 bit long\&. .SH SEE ALSO\n .IR tapset::floatingpoint (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::stringat.3stap000066400000000000000000000034641414446751200270260ustar00rootroot00000000000000'\" t .\" Title: function::stringat .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRINGAT" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::stringat \- Returns the char at a given position in the string .SH "SYNOPSIS" .sp .nf stringat:long(str:string,pos:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 the string to fetch the character from .RE .PP \fIpos\fR .RS 4 the position to get the character from (first character is 0) .RE .SH "DESCRIPTION" .PP This function returns the character at a given position in the string or zero if the string doesn\*(Aqt have as many characters\&. Reports an error if pos is out of bounds\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::strlen.3stap000066400000000000000000000031021414446751200264670ustar00rootroot00000000000000'\" t .\" Title: function::strlen .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRLEN" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strlen \- Returns the length of a string .SH "SYNOPSIS" .sp .nf strlen:long(s:string) .fi .SH "ARGUMENTS" .PP \fIs\fR .RS 4 the string .RE .SH "DESCRIPTION" .PP This function returns the length of the string, which can be zero up to MAXSTRINGLEN\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::strpos.3stap000066400000000000000000000034561414446751200265260ustar00rootroot00000000000000'\" t .\" Title: function::strpos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRPOS" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strpos \- Returns location of a substring within another string .SH "SYNOPSIS" .sp .nf strpos:long(s1:string,s2:string) .fi .SH "ARGUMENTS" .PP \fIs1\fR .RS 4 string to search in .RE .PP \fIs2\fR .RS 4 substring to find .RE .SH "DESCRIPTION" .PP This function returns location of the first occurence of string \fIs2\fR within \fIs1\fR, namely the return value is 0 in case \fIs2\fR is a prefix of \fIs1\fR\&. If \fIs2\fR is not a substring of \fIs1\fR, then the return value is \-1\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::strtol.3stap000066400000000000000000000033711414446751200265170ustar00rootroot00000000000000'\" t .\" Title: function::strtol .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::STRTOL" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::strtol \- strtol \- Convert a string to a long .SH "SYNOPSIS" .sp .nf strtol:long(str:string,base:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 string to convert .RE .PP \fIbase\fR .RS 4 the base to use .RE .SH "DESCRIPTION" .PP This function converts the string representation of a number to an integer\&. The \fIbase\fR parameter indicates the number base to assume for the string (eg\&. 16 for hex, 8 for octal, 2 for binary)\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::substr.3stap000066400000000000000000000035721414446751200265150ustar00rootroot00000000000000'\" t .\" Title: function::substr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SUBSTR" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::substr \- Returns a substring .SH "SYNOPSIS" .sp .nf substr:string(str:string,start:long,length:long) .fi .SH "ARGUMENTS" .PP \fIstr\fR .RS 4 the string to take a substring from .RE .PP \fIstart\fR .RS 4 starting position of the extracted string (first character is 0) .RE .PP \fIlength\fR .RS 4 length of string to return .RE .SH "DESCRIPTION" .PP Returns the substring of the given string at the given start position with the given length (or smaller if the length of the original string is less than start + length, or length is bigger than MAXSTRINGLEN)\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::switch_file.3stap000066400000000000000000000031231414446751200274630ustar00rootroot00000000000000'\" t .\" Title: function::switch_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Output file switching Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SWITCH_FIL" "3stap" "November 2021" "SystemTap Tapset Reference" "Output file switching Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::switch_file \- switch to the next output file .SH "SYNOPSIS" .sp .nf switch_file() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function sends a signal to the stapio process, commanding it to rotate to the next output file when output is sent to file(s)\&. .SH SEE ALSO\n .IR tapset::switchfile (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::symdata.3stap000066400000000000000000000036431414446751200266340ustar00rootroot00000000000000'\" t .\" Title: function::symdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMDATA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symdata \- Return the kernel symbol and module offset for the address .SH "SYNOPSIS" .sp .nf symdata:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known, the offset from the start and size of the symbol, plus module name (between brackets)\&. If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added\&. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::symfile.3stap000066400000000000000000000031341414446751200266350ustar00rootroot00000000000000'\" t .\" Title: function::symfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symfile \- Return the file name of a given address\&. .SH "SYNOPSIS" .sp .nf symfile:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name of the given address, if known\&. If the file name cannot be found, the hex string representation of the address will be returned\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::symfileline.3stap000066400000000000000000000033371414446751200275120ustar00rootroot00000000000000'\" t .\" Title: function::symfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMFILELIN" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symfileline \- Return the file name and line number of an address\&. .SH "SYNOPSIS" .sp .nf symfileline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name and the (approximate) line number of the given address, if known\&. If the file name or the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::symline.3stap000066400000000000000000000031531414446751200266460ustar00rootroot00000000000000'\" t .\" Title: function::symline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMLINE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symline \- Return the line number of an address\&. .SH "SYNOPSIS" .sp .nf symline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (approximate) line number of the given address, if known\&. If the line number cannot be found, the hex string representation of the address will be returned\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::symname.3stap000066400000000000000000000032301414446751200266330ustar00rootroot00000000000000'\" t .\" Title: function::symname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYMNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::symname \- Return the kernel symbol associated with the given address .SH "SYNOPSIS" .sp .nf symname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known\&. If not known it will return the hex string representation of addr\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::system.3stap000066400000000000000000000034711414446751200265150ustar00rootroot00000000000000'\" t .\" Title: function::system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Shell command functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::SYSTEM" "3stap" "November 2021" "SystemTap Tapset Reference" "Shell command functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::system \- Issue a command to the system .SH "SYNOPSIS" .sp .nf system(cmd:string) .fi .SH "ARGUMENTS" .PP \fIcmd\fR .RS 4 the command to issue to the system .RE .SH "DESCRIPTION" .PP This function runs a command on the system\&. The command is started in the background some time after the current probe completes\&. The command is run with the same UID as the user running the stap or staprun command\&. The runtime may impose a relatively short length limit on the command string\&. Exceeding it may print a warning\&. .SH SEE ALSO\n .IR tapset::system (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::target.3stap000066400000000000000000000034611414446751200264560ustar00rootroot00000000000000'\" t .\" Title: function::target .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target \- Return the process ID of the target process .SH "SYNOPSIS" .sp .nf target:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the process ID of the target process\&. This is useful in conjunction with the \-x PID or \-c CMD command\-line options to stap\&. An example of its use is to create scripts that filter on a specific process\&. .PP \-x \fBtarget\fR returns the pid specified by \-x .PP \-c \fBtarget\fR returns the pid for the executed command specified by \-c .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::target_set_pid.3stap000066400000000000000000000032451414446751200301650ustar00rootroot00000000000000'\" t .\" Title: function::target_set_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target_set_pid \- Does pid descend from target process? .SH "SYNOPSIS" .sp .nf target_set_pid(pid:) .fi .SH "ARGUMENTS" .PP \fIpid\fR .RS 4 The pid of the process to query .RE .SH "DESCRIPTION" .PP This function returns whether the given process\-id is within the \(lqtarget set\(rq, that is whether it is a descendant of the top\-level \fBtarget\fR process\&. .SH SEE ALSO\n .IR tapset::target_set (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::target_set_report.3stap000066400000000000000000000030611414446751200307200ustar00rootroot00000000000000'\" t .\" Title: function::target_set_report .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TARGET_SET" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::target_set_report \- Print a report about the target set .SH "SYNOPSIS" .sp .nf target_set_report() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function prints a report about the processes in the target set, and their ancestry\&. .SH SEE ALSO\n .IR tapset::target_set (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ancestry.3stap000066400000000000000000000033431414446751200300410ustar00rootroot00000000000000'\" t .\" Title: function::task_ancestry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_ANCES" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ancestry \- The ancestry of the given task .SH "SYNOPSIS" .sp .nf task_ancestry:string(task:long,with_time:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .PP \fIwith_time\fR .RS 4 set to 1 to also print the start time of processes (given as a delta from boot time) .RE .SH "DESCRIPTION" .PP Return the ancestry of the given task in the form of \(lqgrandparent_process=>parent_process=>process\(rq\&. .SH SEE ALSO\n .IR tapset::task_ancestry (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_backtrace.3stap000066400000000000000000000032771414446751200301360ustar00rootroot00000000000000'\" t .\" Title: function::task_backtrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_BACKT" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_backtrace \- Hex backtrace of an arbitrary task .SH "SYNOPSIS" .sp .nf task_backtrace:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 pointer to task_struct .RE .SH "DESCRIPTION" .PP This function returns a string of hex addresses that are a backtrace of the stack of a particular task Output may be truncated as per maximum string length\&. Deprecated in SystemTap 1\&.6\&. .SH SEE ALSO\n .IR tapset::context-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_cpu.3stap000066400000000000000000000030251414446751200267750ustar00rootroot00000000000000'\" t .\" Title: function::task_cpu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CPU" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_cpu \- The scheduled cpu of the task .SH "SYNOPSIS" .sp .nf task_cpu:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the scheduled cpu for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_current.3stap000066400000000000000000000031641414446751200276740ustar00rootroot00000000000000'\" t .\" Title: function::task_current .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CURRE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_current \- The current task_struct of the current task .SH "SYNOPSIS" .sp .nf task_current:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the task_struct representing the current process\&. This address can be passed to the various task_*() functions to extract more task\-specific data\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_cwd_path.3stap000066400000000000000000000027251414446751200300050ustar00rootroot00000000000000'\" t .\" Title: function::task_cwd_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_CWD_P" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_cwd_path \- get the path struct pointer for a task\*(Aqs current working directory .SH "SYNOPSIS" .sp .nf task_cwd_path:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_dentry_path.3stap000066400000000000000000000032641414446751200305340ustar00rootroot00000000000000'\" t .\" Title: function::task_dentry_path .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Directory-entry (dentry) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_DENTR" "3stap" "November 2021" "SystemTap Tapset Reference" "Directory-entry (dentry) Tapse" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_dentry_path \- get the full dentry path .SH "SYNOPSIS" .sp .nf task_dentry_path:string(task:long,dentry:long,vfsmnt:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIdentry\fR .RS 4 direntry pointer\&. .RE .PP \fIvfsmnt\fR .RS 4 vfsmnt pointer\&. .RE .SH "DESCRIPTION" .PP .PP Returns the full dirent name (full path to the root), like the kernel d_path function\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_egid.3stap000066400000000000000000000030521414446751200271160ustar00rootroot00000000000000'\" t .\" Title: function::task_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EGID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_egid \- The effective group identifier of the task .SH "SYNOPSIS" .sp .nf task_egid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_euid.3stap000066400000000000000000000030501414446751200271320ustar00rootroot00000000000000'\" t .\" Title: function::task_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EUID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_euid \- The effective user identifier of the task .SH "SYNOPSIS" .sp .nf task_euid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_exe_file.3stap000066400000000000000000000027131414446751200277710ustar00rootroot00000000000000'\" t .\" Title: function::task_exe_file .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXE_F" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_exe_file \- get the file struct pointer for a task\*(Aqs executable file .SH "SYNOPSIS" .sp .nf task_exe_file:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_execname.3stap000066400000000000000000000030061414446751200277720ustar00rootroot00000000000000'\" t .\" Title: function::task_execname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_EXECN" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_execname \- The name of the task .SH "SYNOPSIS" .sp .nf task_execname:string(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP Return the name of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_fd_lookup.3stap000066400000000000000000000031141414446751200301670ustar00rootroot00000000000000'\" t .\" Title: function::task_fd_lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_FD_LO" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_fd_lookup \- get the file struct for a task\*(Aqs fd .SH "SYNOPSIS" .sp .nf task_fd_lookup:long(task:long,fd:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer\&. .RE .PP \fIfd\fR .RS 4 file descriptor number\&. .RE .SH "DESCRIPTION" .PP Returns the file struct pointer for a task\*(Aqs file descriptor\&. systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_gid.3stap000066400000000000000000000030221414446751200267460ustar00rootroot00000000000000'\" t .\" Title: function::task_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_GID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_gid \- The group identifier of the task .SH "SYNOPSIS" .sp .nf task_gid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_max_file_handles.3stap000066400000000000000000000031341414446751200314710ustar00rootroot00000000000000'\" t .\" Title: function::task_max_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_MAX_F" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_max_file_handles \- The max number of open files for the task .SH "SYNOPSIS" .sp .nf task_max_file_handles:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the maximum number of file handlers for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_nice.3stap000066400000000000000000000030221414446751200271210ustar00rootroot00000000000000'\" t .\" Title: function::task_nice .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NICE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_nice \- The nice value of the task .SH "SYNOPSIS" .sp .nf task_nice:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the nice value of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_egid.3stap000066400000000000000000000030641414446751200276210ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_egid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_egid \- The effective group identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_egid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective group id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_euid.3stap000066400000000000000000000030621414446751200276350ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_euid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_EU" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_euid \- The effective user identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_euid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the effective user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_gid.3stap000066400000000000000000000031331414446751200274510ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_gid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_GI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_gid \- The group identifier of the task as seen in a namespace .SH "SYNOPSIS" .sp .nf task_ns_gid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the group id of the given task as seen in in the given user namespace\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_pid.3stap000066400000000000000000000031111414446751200274560ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_PI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_pid \- The process identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_pid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This fucntion returns the process id of the given task based on the specified pid namespace\&.\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_tid.3stap000066400000000000000000000031231414446751200274650ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_TI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_tid \- The thread identifier of the task as seen in a namespace .SH "SYNOPSIS" .sp .nf task_ns_tid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the thread id of the given task as seen in the pid namespace\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_ns_uid.3stap000066400000000000000000000030331414446751200274660ustar00rootroot00000000000000'\" t .\" Title: function::task_ns_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_NS_UI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_ns_uid \- The user identifier of the task .SH "SYNOPSIS" .sp .nf task_ns_uid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_open_file_handles.3stap000066400000000000000000000031271414446751200316470ustar00rootroot00000000000000'\" t .\" Title: function::task_open_file_handles .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_OPEN_" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_open_file_handles \- The number of open files of the task .SH "SYNOPSIS" .sp .nf task_open_file_handles:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the number of open file handlers for the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_parent.3stap000066400000000000000000000032151414446751200275000ustar00rootroot00000000000000'\" t .\" Title: function::task_parent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PAREN" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_parent \- The task_struct of the parent task .SH "SYNOPSIS" .sp .nf task_parent:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the parent task_struct of the given task\&. This address can be passed to the various task_*() functions to extract more task\-specific data\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_pid.3stap000066400000000000000000000030261414446751200267630ustar00rootroot00000000000000'\" t .\" Title: function::task_pid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_pid \- The process identifier of the task .SH "SYNOPSIS" .sp .nf task_pid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This fucntion returns the process id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_prio.3stap000066400000000000000000000030321414446751200271550ustar00rootroot00000000000000'\" t .\" Title: function::task_prio .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_PRIO" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_prio \- The priority value of the task .SH "SYNOPSIS" .sp .nf task_prio:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the priority value of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_start_time.3stap000066400000000000000000000031411414446751200303600ustar00rootroot00000000000000'\" t .\" Title: function::task_start_time .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_START" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_start_time \- Start time of the given task .SH "SYNOPSIS" .sp .nf task_start_time:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP Returns the start time of the given task in nanoseconds since boot time or 0 if the task does not exist\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_state.3stap000066400000000000000000000032211414446751200273240ustar00rootroot00000000000000'\" t .\" Title: function::task_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_state \- The state of the task .SH "SYNOPSIS" .sp .nf task_state:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP Return the state of the given task, one of: TASK_RUNNING (0), TASK_INTERRUPTIBLE (1), TASK_UNINTERRUPTIBLE (2), TASK_STOPPED (4), TASK_TRACED (8), EXIT_ZOMBIE (16), or EXIT_DEAD (32)\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_stime.3stap000066400000000000000000000036351414446751200273360ustar00rootroot00000000000000'\" t .\" Title: function::task_stime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_STIME" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_stime \- System time of the task .SH "SYNOPSIS" .sp .nf 1) task_stime:long() .fi .sp .nf 2) task_stime:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP 1) Returns the system time of the current task in cputime\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .PP 2) Returns the system time of the given task in cputime, or zero if the task doesn\*(Aqt exist\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_tid.3stap000066400000000000000000000030241414446751200267650ustar00rootroot00000000000000'\" t .\" Title: function::task_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_tid \- The thread identifier of the task .SH "SYNOPSIS" .sp .nf task_tid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the thread id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_time_string.3stap000066400000000000000000000031651414446751200305370ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_time_string \- Human readable string of task time usage .SH "SYNOPSIS" .sp .nf task_time_string:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns a human readable string showing the user and system time the current task has used up to now\&. For example \(lqusr: 0m12\&.908s, sys: 1m6\&.851s\(rq\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_time_string_tid.3stap000066400000000000000000000032621414446751200313750ustar00rootroot00000000000000'\" t .\" Title: function::task_time_string_tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_TIME_" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_time_string_tid \- Human readable string of task time usage .SH "SYNOPSIS" .sp .nf task_time_string_tid:string(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP Returns a human readable string showing the user and system time the given task has used up to now\&. For example \(lqusr: 0m12\&.908s, sys: 1m6\&.851s\(rq\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_uid.3stap000066400000000000000000000030201414446751200267620ustar00rootroot00000000000000'\" t .\" Title: function::task_uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_uid \- The user identifier of the task .SH "SYNOPSIS" .sp .nf task_uid:long(task:long) .fi .SH "ARGUMENTS" .PP \fItask\fR .RS 4 task_struct pointer .RE .SH "DESCRIPTION" .PP This function returns the user id of the given task\&. .SH SEE ALSO\n .IR tapset::task (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::task_utime.3stap000066400000000000000000000036271414446751200273410ustar00rootroot00000000000000'\" t .\" Title: function::task_utime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TASK_UTIME" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::task_utime \- User time of the task .SH "SYNOPSIS" .sp .nf 1) task_utime:long() .fi .sp .nf 2) task_utime:long(tid:long) .fi .SH "ARGUMENTS" .PP \fItid\fR .RS 4 Thread id of the given task .RE .SH "DESCRIPTION" .PP 1) Returns the user time of the current task in cputime\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .PP 2) Returns the user time of the given task in cputime, or zero if the task doesn\*(Aqt exist\&. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_filter_key.3stap000066400000000000000000000036211414446751200306610ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_filter_key .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_FIL" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_filter_key \- Default filter function for tcpmib\&.* probes .SH "SYNOPSIS" .sp .nf tcpmib_filter_key:long(sk:long,op:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be counted if \fIsk\fR passes the filter .RE .SH "DESCRIPTION" .PP This function is a default filter function\&. The user can replace this function with their own\&. The user\-supplied filter function returns an index key based on the values in \fIsk\fR\&. A return value of 0 means this particular \fIsk\fR should be not be counted\&. .SH SEE ALSO\n .IR tapset::tcpmib-filter-default (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_get_state.3stap000066400000000000000000000030461414446751200305040ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_get_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_GET" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_get_state \- Get a socket\*(Aqs state .SH "SYNOPSIS" .sp .nf tcpmib_get_state:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct sock .RE .SH "DESCRIPTION" .PP Returns the sk_state from a struct sock\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_addr.3stap000066400000000000000000000030741414446751200306120ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_local_addr \- Get the source address .SH "SYNOPSIS" .sp .nf tcpmib_local_addr:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the saddr from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_local_port.3stap000066400000000000000000000030701414446751200306600ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_local_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_LOC" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_local_port \- Get the local port .SH "SYNOPSIS" .sp .nf tcpmib_local_port:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the sport from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_addr.3stap000066400000000000000000000030771414446751200310160ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_addr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_remote_addr \- Get the remote address .SH "SYNOPSIS" .sp .nf tcpmib_remote_addr:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the daddr from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tcpmib_remote_port.3stap000066400000000000000000000030741414446751200310650ustar00rootroot00000000000000'\" t .\" Title: function::tcpmib_remote_port .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TCPMIB_REM" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tcpmib_remote_port \- Get the remote port .SH "SYNOPSIS" .sp .nf tcpmib_remote_port:long(sk:long) .fi .SH "ARGUMENTS" .PP \fIsk\fR .RS 4 pointer to a struct inet_sock .RE .SH "DESCRIPTION" .PP Returns the dport from a struct inet_sock in host order\&. .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::text_str.3stap000066400000000000000000000032701414446751200270420ustar00rootroot00000000000000'\" t .\" Title: function::text_str .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STR" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::text_str \- Escape any non\-printable chars in a string .SH "SYNOPSIS" .sp .nf text_str:string(input:string) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 the string to escape .RE .SH "DESCRIPTION" .PP This function accepts a string argument, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::text_strn.3stap000066400000000000000000000037061414446751200272240ustar00rootroot00000000000000'\" t .\" Title: function::text_strn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TEXT_STRN" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::text_strn \- Escape any non\-printable chars in a string .SH "SYNOPSIS" .sp .nf text_strn:string(input:string,len:long,quoted:long) .fi .SH "ARGUMENTS" .PP \fIinput\fR .RS 4 the string to escape .RE .PP \fIlen\fR .RS 4 maximum length of string to return (0 implies MAXSTRINGLEN) .RE .PP \fIquoted\fR .RS 4 put double quotes around the string\&. If input string is truncated it will have \(lq\&.\&.\&.\(rq after the second quote .RE .SH "DESCRIPTION" .PP This function accepts a string of designated length, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. .SH SEE ALSO\n .IR tapset::string (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::thread_indent.3stap000066400000000000000000000037171414446751200300040ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::thread_indent \- returns an amount of space with the current task information .SH "SYNOPSIS" .sp .nf thread_indent:string(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of space added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns a string with appropriate indentation for a thread\&. Call it with a small positive or matching negative delta\&. If this is the real outermost, initial level of indentation, then the function resets the relative timestamp base to zero\&. The timestamp is as per provided by the __indent_timestamp function, which by default measures microseconds\&. .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::thread_indent_depth.3stap000066400000000000000000000037511414446751200311660ustar00rootroot00000000000000'\" t .\" Title: function::thread_indent_depth .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Utility functions for using ansi control chars in logs .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::THREAD_IND" "3stap" "November 2021" "SystemTap Tapset Reference" "Utility functions for using an" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::thread_indent_depth \- returns the nested\-depth of the current task .SH "SYNOPSIS" .sp .nf thread_indent_depth:long(delta:long) .fi .SH "ARGUMENTS" .PP \fIdelta\fR .RS 4 the amount of depth added/removed for each call .RE .SH "DESCRIPTION" .PP This function returns an integer equal to the nested function\-call depth starting from the outermost initial level\&. This function is useful for saving space (consumed by whitespace) in traces with long nested function calls\&. Use this function in a similar fashion to \fBthread_indent\fR, i\&.e\&., in call\-probe, use thread_indent_depth(1) and in return\-probe, use thread_indent_depth(\-1) .SH SEE ALSO\n .IR tapset::indent (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tid.3stap000066400000000000000000000027421414446751200257510ustar00rootroot00000000000000'\" t .\" Title: function::tid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tid \- Returns the thread ID of a target process .SH "SYNOPSIS" .sp .nf tid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the thread ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tokenize.3stap000066400000000000000000000046541414446751200270250ustar00rootroot00000000000000'\" t .\" Title: function::tokenize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: A collection of standard string functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TOKENIZE" "3stap" "November 2021" "SystemTap Tapset Reference" "A collection of standard strin" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tokenize \- Return the next non\-empty token in a string .SH "SYNOPSIS" .sp .nf 1) tokenize:string(delim:string) .fi .sp .nf 2) tokenize:string(input:string,delim:string) .fi .SH "ARGUMENTS" .PP \fIdelim\fR .RS 4 set of characters that delimit the tokens .RE .PP \fIinput\fR .RS 4 string to tokenize\&. If empty, returns the next non\-empty token in the string passed in the previous call to \fBtokenize\fR\&. .RE .SH "DESCRIPTION" .PP 1) This function returns the next token in the string passed in the previous call to tokenize\&. If no delimiter is found, the entire remaining input string is * returned\&. It returns empty when no more tokens are available\&. .PP 2) This function returns the next non\-empty token in the given input string, where the tokens are delimited by characters in the delim string\&. If the input string is non\-empty, it returns the first token\&. If the input string is empty, it returns the next token in the string passed in the previous call to tokenize\&. If no delimiter is found, the entire remaining input string is returned\&. It returns empty when no more tokens are available\&. .SH SEE ALSO\n .IR tapset::tokenize (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tz_ctime.3stap000066400000000000000000000036351414446751200270110ustar00rootroot00000000000000'\" t .\" Title: function::tz_ctime .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_CTIME" "3stap" "November 2021" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_ctime \- Convert seconds since epoch into human readable date/time string, with local time zone .SH "SYNOPSIS" .sp .nf tz_ctime(epochsecs:) .fi .SH "ARGUMENTS" .PP \fIepochsecs\fR .RS 4 number of seconds since epoch (as returned by \fBgettimeofday_s\fR) .RE .SH "DESCRIPTION" .PP Takes an argument of seconds since the epoch as returned by \fBgettimeofday_s\fR\&. Returns a string of the same form as \fBctime\fR, but offsets the epoch time for the local time zone, and appends the name of the local time zone\&. The string length may vary\&. The time zone information is passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tz_gmtoff.3stap000066400000000000000000000030361414446751200271650ustar00rootroot00000000000000'\" t .\" Title: function::tz_gmtoff .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_GMTOFF" "3stap" "November 2021" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_gmtoff \- Return local time zone offset .SH "SYNOPSIS" .sp .nf tz_gmtoff() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the local time zone offset (seconds west of UTC), as passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::tz_name.3stap000066400000000000000000000027741414446751200266330ustar00rootroot00000000000000'\" t .\" Title: function::tz_name .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Time utility functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::TZ_NAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Time utility functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::tz_name \- Return local time zone name .SH "SYNOPSIS" .sp .nf tz_name() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the local time zone name, as passed by staprun at script startup only\&. .SH SEE ALSO\n .IR tapset::tzinfo (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::u32_arg.3stap000066400000000000000000000030641414446751200264310ustar00rootroot00000000000000'\" t .\" Title: function::u32_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U32_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u32_arg \- Return function argument as unsigned 32\-bit value .SH "SYNOPSIS" .sp .nf u32_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned 32\-bit value of argument n, same as uint_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::u64_arg.3stap000066400000000000000000000030711414446751200264340ustar00rootroot00000000000000'\" t .\" Title: function::u64_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U64_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u64_arg \- Return function argument as unsigned 64\-bit value .SH "SYNOPSIS" .sp .nf u64_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the unsigned 64\-bit value of argument n, same as ulonglong_arg\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::u_register.3stap000066400000000000000000000031571414446751200273420ustar00rootroot00000000000000'\" t .\" Title: function::u_register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::U_REGISTER" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::u_register \- Return the unsigned value of the named CPU register .SH "SYNOPSIS" .sp .nf u_register:long(name:string) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 Name of the register to return .RE .SH "DESCRIPTION" .PP Same as register(name), except that if the register is 32 bits wide, it is zero\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::uaddr.3stap000066400000000000000000000034311414446751200262640ustar00rootroot00000000000000'\" t .\" Title: function::uaddr .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UADDR" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uaddr \- User space address of current running task .SH "SYNOPSIS" .sp .nf uaddr:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP Returns the address in userspace that the current task was at when the probe occurred\&. When the current running task isn\*(Aqt a user space thread, or the address cannot be found, zero is returned\&. Can be used to see where the current task is combined with \fBusymname\fR or \fBusymdata\fR\&. Often the task will be in the VDSO where it entered the kernel\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ubacktrace.3stap000066400000000000000000000037071414446751200272770ustar00rootroot00000000000000'\" t .\" Title: function::ubacktrace .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UBACKTRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ubacktrace \- Hex backtrace of current user\-space task stack\&. .SH "SYNOPSIS" .sp .nf ubacktrace:string() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Return a string of hex addresses that are a backtrace of the stack of the current task\&. Output may be truncated as per maximum string length\&. Returns empty string when current probe point cannot determine user backtrace\&. See \fBbacktrace\fR for kernel traceback\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext-unwind (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ucallers.3stap000066400000000000000000000037201414446751200270000ustar00rootroot00000000000000'\" t .\" Title: function::ucallers .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UCALLERS" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ucallers \- Return first n elements of user stack backtrace .SH "SYNOPSIS" .sp .nf ucallers:string(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack (not counting the top level)\&. If n is \-1, print the entire stack\&. .RE .SH "DESCRIPTION" .PP This function returns a string of the first n hex addresses from the backtrace of the user stack\&. Output may be truncated as per maximum string length (MAXSTRINGLEN)\&. .SH "NOTE" .PP To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with \-d /path/to/exe\-or\-so and/or add \-\-ldd to load all needed unwind data\&. .SH SEE ALSO\n .IR tapset::ucontext (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::udelay.3stap000066400000000000000000000030551414446751200264520ustar00rootroot00000000000000'\" t .\" Title: function::udelay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Guru tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UDELAY" "3stap" "November 2021" "SystemTap Tapset Reference" "Guru tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::udelay \- microsecond delay .SH "SYNOPSIS" .sp .nf udelay(us:long) .fi .SH "ARGUMENTS" .PP \fIus\fR .RS 4 Number of microseconds to delay\&. .RE .SH "DESCRIPTION" .PP This function inserts a multi\-microsecond busy\-delay into a probe handler\&. It requires guru mode\&. .SH SEE ALSO\n .IR tapset::guru-delay (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::uid.3stap000066400000000000000000000027361414446751200257550ustar00rootroot00000000000000'\" t .\" Title: function::uid .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UID" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uid \- Returns the user ID of a target process .SH "SYNOPSIS" .sp .nf uid:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP This function returns the user ID of the target process\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::uint_arg.3stap000066400000000000000000000031261414446751200267760ustar00rootroot00000000000000'\" t .\" Title: function::uint_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UINT_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::uint_arg \- Return function argument as unsigned int .SH "SYNOPSIS" .sp .nf uint_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as an unsigned int (i\&.e\&., a 32\-bit integer zero\-extended to 64 bits)\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ulong_arg.3stap000066400000000000000000000031701414446751200271420ustar00rootroot00000000000000'\" t .\" Title: function::ulong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONG_ARG" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ulong_arg \- Return function argument as unsigned long .SH "SYNOPSIS" .sp .nf ulong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as an unsigned long\&. On architectures where a long is 32 bits, the value is zero\-extended to 64 bits\&. .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ulonglong_arg.3stap000066400000000000000000000031121414446751200300160ustar00rootroot00000000000000'\" t .\" Title: function::ulonglong_arg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::ULONGLONG_" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ulonglong_arg \- Return function argument as 64\-bit value .SH "SYNOPSIS" .sp .nf ulonglong_arg:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 index of argument to return .RE .SH "DESCRIPTION" .PP Return the value of argument n as a 64\-bit value\&. (Same as longlong_arg\&.) .SH SEE ALSO\n .IR tapset::registers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::umodname.3stap000066400000000000000000000033231414446751200267720ustar00rootroot00000000000000'\" t .\" Title: function::umodname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::UMODNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::umodname \- Returns the (short) name of the user module\&. .SH "SYNOPSIS" .sp .nf umodname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 User\-space address .RE .SH "DESCRIPTION" .PP Returns the short name of the user space module for the current task that that the given address is part of\&. Reports an error when the address isn\*(Aqt in a (mapped in) module, or the module cannot be found for some reason\&. .SH SEE ALSO\n .IR tapset::ucontext (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usecs_to_string.3stap000066400000000000000000000033711414446751200304020ustar00rootroot00000000000000'\" t .\" Title: function::usecs_to_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Task Time Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USECS_TO_S" "3stap" "November 2021" "SystemTap Tapset Reference" "Task Time Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usecs_to_string \- Human readable string for given microseconds .SH "SYNOPSIS" .sp .nf usecs_to_string:string(usecs:long) .fi .SH "ARGUMENTS" .PP \fIusecs\fR .RS 4 Number of microseconds to translate\&. .RE .SH "DESCRIPTION" .PP Returns a string representing the number of microseconds as a human readable string consisting of \(lqXmY\&.ZZZZZZs\(rq, where X is the number of minutes, Y is the number of seconds and ZZZZZZ is the number of microseconds\&. .SH SEE ALSO\n .IR tapset::task_time (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted.3stap000066400000000000000000000042601414446751200310560ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_buffer_quoted \- Retrieves and quotes buffer from user space .SH "SYNOPSIS" .sp .nf user_buffer_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when user space data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_buffer_quoted_error.3stap000066400000000000000000000042231414446751200322660ustar00rootroot00000000000000'\" t .\" Title: function::user_buffer_quoted_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_BUFFE" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_buffer_quoted_error \- Retrieves and quotes buffer from user space .SH "SYNOPSIS" .sp .nf user_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the buffer from .RE .PP \fIinlen\fR .RS 4 the exact length of the buffer to read .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when user space data is not accessible at the given address, an error is thrown\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_char.3stap000066400000000000000000000032461414446751200271440ustar00rootroot00000000000000'\" t .\" Title: function::user_char .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_char_error.3stap000066400000000000000000000033031414446751200303470ustar00rootroot00000000000000'\" t .\" Title: function::user_char_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char_error \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_char_warn.3stap000066400000000000000000000033471414446751200301750ustar00rootroot00000000000000'\" t .\" Title: function::user_char_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_CHAR_" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_char_warn \- Retrieves a char value stored in user space .SH "SYNOPSIS" .sp .nf user_char_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the char from .RE .SH "DESCRIPTION" .PP Returns the char value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int.3stap000066400000000000000000000032401414446751200270130ustar00rootroot00000000000000'\" t .\" Title: function::user_int .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int16.3stap000066400000000000000000000033131414446751200271630ustar00rootroot00000000000000'\" t .\" Title: function::user_int16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int16 \- Retrieves a 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int16:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 16\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int16_error.3stap000066400000000000000000000033471414446751200304030ustar00rootroot00000000000000'\" t .\" Title: function::user_int16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT16" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int16_error \- Retrieves a 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int16_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 16\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int32.3stap000066400000000000000000000033131414446751200271610ustar00rootroot00000000000000'\" t .\" Title: function::user_int32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int32 \- Retrieves a 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int32:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 32\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int32_error.3stap000066400000000000000000000033471414446751200304010ustar00rootroot00000000000000'\" t .\" Title: function::user_int32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT32" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int32_error \- Retrieves a 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int32_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 32\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int64.3stap000066400000000000000000000033131414446751200271660ustar00rootroot00000000000000'\" t .\" Title: function::user_int64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int64 \- Retrieves a 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int64:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 64\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int64_error.3stap000066400000000000000000000033471414446751200304060ustar00rootroot00000000000000'\" t .\" Title: function::user_int64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT64" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int64_error \- Retrieves a 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int64_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 64\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int8.3stap000066400000000000000000000033041414446751200271040ustar00rootroot00000000000000'\" t .\" Title: function::user_int8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int8 \- Retrieves a 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int8:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 8\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int8_error.3stap000066400000000000000000000033411414446751200303160ustar00rootroot00000000000000'\" t .\" Title: function::user_int8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT8_" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int8_error \- Retrieves a 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_int8_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the 8\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int_error.3stap000066400000000000000000000032761414446751200302350ustar00rootroot00000000000000'\" t .\" Title: function::user_int_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_E" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int_error \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_int_warn.3stap000066400000000000000000000033421414446751200300450ustar00rootroot00000000000000'\" t .\" Title: function::user_int_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_INT_W" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_int_warn \- Retrieves an int value stored in user space .SH "SYNOPSIS" .sp .nf user_int_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the int from .RE .SH "DESCRIPTION" .PP Returns the int value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_long.3stap000066400000000000000000000035061414446751200271650ustar00rootroot00000000000000'\" t .\" Title: function::user_long .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. Returns zero when user space data is not accessible\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_long_error.3stap000066400000000000000000000035431414446751200303770ustar00rootroot00000000000000'\" t .\" Title: function::user_long_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long_error \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. If the user space data is not accessible, an error will occur\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_long_warn.3stap000066400000000000000000000036071414446751200302160ustar00rootroot00000000000000'\" t .\" Title: function::user_long_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_LONG_" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_long_warn \- Retrieves a long value stored in user space .SH "SYNOPSIS" .sp .nf user_long_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the long from .RE .SH "DESCRIPTION" .PP Returns the long value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_mode.3stap000066400000000000000000000027741414446751200271600ustar00rootroot00000000000000'\" t .\" Title: function::user_mode .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_MODE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_mode \- Determines if probe point occurs in user\-mode .SH "SYNOPSIS" .sp .nf user_mode:long() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP .PP Return 1 if the probe point occurred in user\-mode\&. .SH SEE ALSO\n .IR tapset::context (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_short.3stap000066400000000000000000000032551414446751200273660ustar00rootroot00000000000000'\" t .\" Title: function::user_short .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_short_error.3stap000066400000000000000000000033111414446751200305700ustar00rootroot00000000000000'\" t .\" Title: function::user_short_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short_error \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_short_warn.3stap000066400000000000000000000033551414446751200304160ustar00rootroot00000000000000'\" t .\" Title: function::user_short_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_SHORT" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_short_warn \- Retrieves a short value stored in user space .SH "SYNOPSIS" .sp .nf user_short_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the short from .RE .SH "DESCRIPTION" .PP Returns the short value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string.3stap000066400000000000000000000041061414446751200275310ustar00rootroot00000000000000'\" t .\" Title: function::user_string .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string:string(addr:long) .fi .sp .nf 2) user_string:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 the error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the null terminated C string from a given user space memory address\&. Reports an error on the rare cases when userspace data is not accessible\&. .PP 2) Returns the null terminated C string from a given user space memory address\&. Reports the given error message on the rare cases when userspace data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_n.3stap000066400000000000000000000043631414446751200300530ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n \- Retrieves string of given length from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n:string(addr:long,n:long) .fi .sp .nf 2) user_string_n:string(addr:long,n:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIerr_msg\fR .RS 4 the error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the C string of a maximum given length from a given user space address\&. Reports an error on the rare cases when userspace data is not accessible at the given address\&. .PP 2) Returns the C string of a maximum given length from a given user space address\&. Returns the given error message string on the rare cases when userspace data is not accessible at the given address\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_nofault.3stap000066400000000000000000000035341414446751200316020ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_nofault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n_nofault \- Retrieves string of given length from user space .SH "SYNOPSIS" .sp .nf user_string_n_nofault(addr:long,n:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .SH "DESCRIPTION" .PP Returns the C string of a maximum given length from a given user space address\&. Returns the empty string when userspace data is not accessible at the given address\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_quoted.3stap000066400000000000000000000054151414446751200314330ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n_quoted \- Retrieves and quotes string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n_quoted:string(addr:long,n:long) .fi .sp .nf 2) user_string_n_quoted:string(addr:long,inlen:long,outlen:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIinlen\fR .RS 4 the maximum length of the string to read (if not null terminated) .RE .PP \fIoutlen\fR .RS 4 the maximum length of the output string .RE .SH "DESCRIPTION" .PP 1) Returns up to n characters of a C string from the given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .PP 2) Reads up to inlen characters of a C string from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_n_warn.3stap000066400000000000000000000044071414446751200311010ustar00rootroot00000000000000'\" t .\" Title: function::user_string_n_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_n_warn \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_n_warn:string(addr:long,n:long) .fi .sp .nf 2) user_string_n_warn:string(addr:long,n:long,warn_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIn\fR .RS 4 the maximum length of the string (if not null terminated) .RE .PP \fIwarn_msg\fR .RS 4 the warning message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns up to n characters of a C string from a given user space memory address\&. Reports\(lq\(rq on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .PP 2) Returns up to n characters of a C string from a given user space memory address\&. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_nofault.3stap000066400000000000000000000033341414446751200312630ustar00rootroot00000000000000'\" t .\" Title: function::user_string_nofault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_nofault \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf user_string_nofault:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the null terminated C string from a given user space memory address\&. Returns the empty string if userspace data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted.3stap000066400000000000000000000037561414446751200311240ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted \- Retrieves and quotes string from user space .SH "SYNOPSIS" .sp .nf user_string_quoted:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .SH "DESCRIPTION" .PP Returns the null terminated C string from a given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string\&. Note that the string will be surrounded by double quotes\&. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf16.3stap000066400000000000000000000033111414446751200321340ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted_utf16 \- Quote given user UTF\-16 string\&. .SH "SYNOPSIS" .sp .nf user_string_quoted_utf16:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-16 decoding as per \fIuser_string_utf16\fR\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_quoted_utf32.3stap000066400000000000000000000033111414446751200321320ustar00rootroot00000000000000'\" t .\" Title: function::user_string_quoted_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_quoted_utf32 \- Quote given user UTF\-32 string\&. .SH "SYNOPSIS" .sp .nf user_string_quoted_utf32:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .SH "DESCRIPTION" .PP This function combines quoting as per \fIstring_quoted\fR and UTF\-32 decoding as per \fIuser_string_utf32\fR\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf16.3stap000066400000000000000000000041501414446751200305550ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_utf16 \- Retrieves UTF\-16 string from user memory .SH "SYNOPSIS" .sp .nf 1) user_string_utf16:string(addr:long) .fi .sp .nf 2) user_string_utf16:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given user memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-16 string at a given user memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_utf32.3stap000066400000000000000000000041501414446751200305530ustar00rootroot00000000000000'\" t .\" Title: function::user_string_utf32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_utf32 \- Retrieves UTF\-32 string from user memory .SH "SYNOPSIS" .sp .nf 1) user_string_utf32:string(addr:long) .fi .sp .nf 2) user_string_utf32:string(addr:long,err_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The user address to retrieve the string from .RE .PP \fIerr_msg\fR .RS 4 The error message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given user memory address\&. Reports an error on string copy fault or conversion error\&. .PP 2) This function returns a null terminated UTF\-8 string converted from the UTF\-32 string at a given user memory address\&. Reports the given error message on string copy fault or conversion error\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_string_warn.3stap000066400000000000000000000042131414446751200305570ustar00rootroot00000000000000'\" t .\" Title: function::user_string_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_STRIN" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_string_warn \- Retrieves string from user space .SH "SYNOPSIS" .sp .nf 1) user_string_warn:string(addr:long) .fi .sp .nf 2) user_string_warn:string(addr:long,warn_msg:string) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the string from .RE .PP \fIwarn_msg\fR .RS 4 the warning message to return when data isn\*(Aqt available .RE .SH "DESCRIPTION" .PP 1) Returns the null terminated C string from a given user space memory address\&. Reports "" on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .PP 2) Returns the null terminated C string from a given user space memory address\&. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint16.3stap000066400000000000000000000033521414446751200273530ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint16 \- Retrieves an unsigned 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint16:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 16\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint16_error.3stap000066400000000000000000000034061414446751200305640ustar00rootroot00000000000000'\" t .\" Title: function::user_uint16_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT1" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint16_error \- Retrieves an unsigned 16\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint16_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 16\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 16\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint32.3stap000066400000000000000000000033521414446751200273510ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint32 \- Retrieves an unsigned 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint32:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 32\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint32_error.3stap000066400000000000000000000034061414446751200305620ustar00rootroot00000000000000'\" t .\" Title: function::user_uint32_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT3" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint32_error \- Retrieves an unsigned 32\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint32_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 32\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 32\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint64.3stap000066400000000000000000000033521414446751200273560ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint64 \- Retrieves an unsigned 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint64:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 64\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint64_error.3stap000066400000000000000000000034061414446751200305670ustar00rootroot00000000000000'\" t .\" Title: function::user_uint64_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT6" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint64_error \- Retrieves an unsigned 64\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint64_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 64\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 64\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint8.3stap000066400000000000000000000033431414446751200272740ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint8 \- Retrieves a unsigned 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint8:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 8\-bit integer value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_uint8_error.3stap000066400000000000000000000033771414446751200305140ustar00rootroot00000000000000'\" t .\" Title: function::user_uint8_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_UINT8" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_uint8_error \- Retrieves a unsigned 8\-bit integer value stored in user space .SH "SYNOPSIS" .sp .nf user_uint8_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned 8\-bit integer from .RE .SH "DESCRIPTION" .PP Returns the unsigned 8\-bit integer value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ulong.3stap000066400000000000000000000035571414446751200273600ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong \- Retrieves an unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. Returns zero when user space data is not accessible\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_error.3stap000066400000000000000000000036121414446751200305610ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong_error \- Retrieves a unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. If the user space data is not accessible, an error will occur\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ulong_warn.3stap000066400000000000000000000036571414446751200304100ustar00rootroot00000000000000'\" t .\" Title: function::user_ulong_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_ULONG" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ulong_warn \- Retrieves an unsigned long value stored in user space .SH "SYNOPSIS" .sp .nf user_ulong_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned long from .RE .SH "DESCRIPTION" .PP Returns the unsigned long value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ushort.3stap000066400000000000000000000033141414446751200275470ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. Returns zero when user space data is not accessible\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_error.3stap000066400000000000000000000033501414446751200307600ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_error .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort_error \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort_error:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. If the user space data is not accessible, an error will occur\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::user_ushort_warn.3stap000066400000000000000000000034141414446751200305770ustar00rootroot00000000000000'\" t .\" Title: function::user_ushort_warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: String and data retrieving functions Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USER_USHOR" "3stap" "November 2021" "SystemTap Tapset Reference" "String and data retrieving fun" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::user_ushort_warn \- Retrieves an unsigned short value stored in user space .SH "SYNOPSIS" .sp .nf user_ushort_warn:long(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 the user space address to retrieve the unsigned short from .RE .SH "DESCRIPTION" .PP Returns the unsigned short value from a given user space address\&. Returns zero when user space data is not accessible and warns about the failure (but does not error)\&. .SH SEE ALSO\n .IR tapset::uconversions (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usrdev2kerndev.3stap000066400000000000000000000030071414446751200301350ustar00rootroot00000000000000'\" t .\" Title: function::usrdev2kerndev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Device Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USRDEV2KER" "3stap" "November 2021" "SystemTap Tapset Reference" "Device Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usrdev2kerndev \- Converts a user\-space device number into the format used in the kernel .SH "SYNOPSIS" .sp .nf usrdev2kerndev:long(dev:long) .fi .SH "ARGUMENTS" .PP \fIdev\fR .RS 4 Device number in user\-space format\&. .RE .SH SEE ALSO\n .IR tapset::dev (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::ustack.3stap000066400000000000000000000034251414446751200264620ustar00rootroot00000000000000'\" t .\" Title: function::ustack .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USTACK" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::ustack \- Return address at given depth of user stack backtrace .SH "SYNOPSIS" .sp .nf ustack:long(n:long) .fi .SH "ARGUMENTS" .PP \fIn\fR .RS 4 number of levels to descend in the stack\&. .RE .SH "DESCRIPTION" .PP Performs a simple (user space) backtrace, and returns the element at the specified position\&. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times \fBustack\fR is called, or in what order\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usymdata.3stap000066400000000000000000000037011414446751200270140ustar00rootroot00000000000000'\" t .\" Title: function::usymdata .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMDATA" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymdata \- Return the symbol and module offset of an address\&. .SH "SYNOPSIS" .sp .nf usymdata:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address in the current task if known, the offset from the start and the size of the symbol, plus the module name (between brackets)\&. If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added\&. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usymfile.3stap000066400000000000000000000033111414446751200270170ustar00rootroot00000000000000'\" t .\" Title: function::usymfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymfile \- Return the file name of a given address\&. .SH "SYNOPSIS" .sp .nf usymfile:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name of the given address, if known\&. If the file name cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usymfileline.3stap000066400000000000000000000033431414446751200276740ustar00rootroot00000000000000'\" t .\" Title: function::usymfileline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMFILELI" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymfileline \- Return the file name and line number of an address\&. .SH "SYNOPSIS" .sp .nf usymfileline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the file name and the (approximate) line number of the given address, if known\&. If the file name or the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usymline.3stap000066400000000000000000000033301414446751200270300ustar00rootroot00000000000000'\" t .\" Title: function::usymline .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMLINE" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymline \- Return the line number of an address\&. .SH "SYNOPSIS" .sp .nf usymline:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (approximate) line number of the given address, if known\&. If the line number cannot be found, the hex string representation of the address will be returned\&. .SH SEE ALSO\n .IR tapset::context-symbols (3stap) .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::usymname.3stap000066400000000000000000000032341414446751200270240ustar00rootroot00000000000000'\" t .\" Title: function::usymname .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Context Functions .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::USYMNAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Context Functions" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::usymname \- Return the symbol of an address in the current task\&. .SH "SYNOPSIS" .sp .nf usymname:string(addr:long) .fi .SH "ARGUMENTS" .PP \fIaddr\fR .RS 4 The address to translate\&. .RE .SH "DESCRIPTION" .PP Returns the (function) symbol name associated with the given address if known\&. If not known it will return the hex string representation of addr\&. .SH SEE ALSO\n .IR tapset::ucontext-symbols (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::vm_fault_contains.3stap000066400000000000000000000031371414446751200307030ustar00rootroot00000000000000'\" t .\" Title: function::vm_fault_contains .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::VM_FAULT_C" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::vm_fault_contains \- Test return value for page fault reason .SH "SYNOPSIS" .sp .nf vm_fault_contains:long(value:long,test:long) .fi .SH "ARGUMENTS" .PP \fIvalue\fR .RS 4 the fault_type returned by vm\&.page_fault\&.return .RE .PP \fItest\fR .RS 4 the type of fault to test for (VM_FAULT_OOM or similar) .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/function::warn.3stap000066400000000000000000000032221414446751200261320ustar00rootroot00000000000000'\" t .\" Title: function::warn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Logging Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "FUNCTION::WARN" "3stap" "November 2021" "SystemTap Tapset Reference" "Logging Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" function::warn \- Send a line to the warning stream .SH "SYNOPSIS" .sp .nf warn(msg:string) .fi .SH "ARGUMENTS" .PP \fImsg\fR .RS 4 The formatted message string .RE .SH "DESCRIPTION" .PP This function sends a warning message immediately to staprun\&. It is also sent over the bulk transport (relayfs) if it is being used\&. If the last characater is not a newline, the one is added\&. .SH SEE ALSO\n .IR tapset::logging (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_numeric_value.3stap000066400000000000000000000040711414446751200331470ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_array_numeric_value \- Output a numeric value for metric in an array\&. .SH "SYNOPSIS" .sp .nf @json_output_array_numeric_value(array_name,array_index,metric_name,value) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array\&. .RE .PP \fIarray_index\fR .RS 4 The array index (as a string) indicating where to store the numeric value\&. .RE .PP \fImetric_name\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIvalue\fR .RS 4 The numeric value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_array_numeric_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs numeric value that is in an array\&. This metric should have been added with \fBjson_add_array_numeric_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_array_string_value.3stap000066400000000000000000000040571414446751200330170ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_array_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_A" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_array_string_value \- Output a string value for metric in an array\&. .SH "SYNOPSIS" .sp .nf @json_output_array_string_value(array_name,array_index,metric_name,value) .fi .SH "ARGUMENTS" .PP \fIarray_name\fR .RS 4 The name of the array\&. .RE .PP \fIarray_index\fR .RS 4 The array index (as a string) indicating where to store the string value\&. .RE .PP \fImetric_name\fR .RS 4 The name of the string metric\&. .RE .PP \fIvalue\fR .RS 4 The string value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_array_string_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs string value that is in an array\&. This metric should have been added with \fBjson_add_array_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_end.3stap000066400000000000000000000031231414446751200306470ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_data_end \- End the json output\&. .SH "SYNOPSIS" .sp .nf @json_output_data_end() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The json_output_data_end macro is designed to be called from the \*(Aqjson_data\*(Aq probe from the user\*(Aqs script\&. It marks the end of the JSON output\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_data_start.3stap000066400000000000000000000031371414446751200312430ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_data_start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_D" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_data_start \- Start the json output\&. .SH "SYNOPSIS" .sp .nf @json_output_data_start() .fi .SH "ARGUMENTS" .PP None .SH "DESCRIPTION" .PP The json_output_data_start macro is designed to be called from the \*(Aqjson_data\*(Aq probe from the user\*(Aqs script\&. It marks the start of the JSON output\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_numeric_value.3stap000066400000000000000000000034461414446751200317560ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_numeric_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_N" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_numeric_value \- Output a numeric value\&. .SH "SYNOPSIS" .sp .nf @json_output_numeric_value(name,value) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the numeric metric\&. .RE .PP \fIvalue\fR .RS 4 The numeric value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_numeric_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs numeric value\&. This metric should have been added with \fBjson_add_numeric_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/macro::json_output_string_value.3stap000066400000000000000000000034351414446751200316200ustar00rootroot00000000000000'\" t .\" Title: macro::json_output_string_value .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "MACRO::JSON_OUTPUT_S" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" macro::json_output_string_value \- Output a string value\&. .SH "SYNOPSIS" .sp .nf @json_output_string_value(name,value) .fi .SH "ARGUMENTS" .PP \fIname\fR .RS 4 The name of the string metric\&. .RE .PP \fIvalue\fR .RS 4 The string value to output\&. .RE .SH "DESCRIPTION" .PP The json_output_string_value macro is designed to be called from the \*(Aqjson_data\*(Aq probe in the user\*(Aqs script to output a metric\*(Aqs string value\&. This metric should have been added with \fBjson_add_string_metric\fR\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.end.3stap000066400000000000000000000052761414446751200266470ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.END" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock.end \- Fires whenever a block I/O transfer is complete\&. .SH "SYNOPSIS" .sp .nf ioblock\&.end .fi .SH "VALUES" .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIidx\fR .RS 4 offset into the bio vector array .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIphys_segments\fR .RS 4 number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIerror\fR .RS 4 0 on success .RE .SH "CONTEXT" .PP The process signals the transfer is done\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioblock.request.3stap000066400000000000000000000055671414446751200275740ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK\&.REQ" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock.request \- Fires whenever making a generic block I/O request\&. .SH "SYNOPSIS" .sp .nf ioblock\&.request .fi .SH "VALUES" .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which make up this I/O request .RE .PP \fIphys_segments\fR .RS 4 number of segments in this bio after physical address coalescing is performed .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIidx\fR .RS 4 offset into the bio vector array .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIhw_segments\fR .RS 4 number of segments after physical and DMA remapping hardware coalescing is performed .RE .SH "CONTEXT" .PP The process makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.bounce.3stap000066400000000000000000000057201414446751200305240ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.bounce .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.bounce \- Fires whenever a buffer bounce is needed for at least one page of a block IO request\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.bounce .fi .SH "VALUES" .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIdevname\fR .RS 4 device for which a buffer bounce was needed\&. .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .SH "CONTEXT" .PP The process creating a block IO request\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.end.3stap000066400000000000000000000056061414446751200300220ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.end \- Fires whenever a block I/O transfer is complete\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.end .fi .SH "VALUES" .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which makes up this I/O request .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .SH "CONTEXT" .PP The process signals the transfer is done\&. .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioblock_trace.request.3stap000066400000000000000000000056301414446751200307410ustar00rootroot00000000000000'\" t .\" Title: probe::ioblock_trace.request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOBLOCK_TRACE" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioblock_trace.request \- Fires just as a generic block I/O request is created for a bio\&. .SH "SYNOPSIS" .sp .nf ioblock_trace\&.request .fi .SH "VALUES" .PP \fIsize\fR .RS 4 total size in bytes .RE .PP \fIp_start_sect\fR .RS 4 points to the start sector of the partition structure of the device .RE .PP \fIvcnt\fR .RS 4 bio vector count which represents number of array element (page, offset, length) which make up this I/O request .RE .PP \fIopf\fR .RS 4 operations and flags .RE .PP \fIbdev_contains\fR .RS 4 points to the device object which contains the partition (when bio structure represents a partition) .RE .PP \fIrw\fR .RS 4 binary trace for read/write request .RE .PP \fIino\fR .RS 4 i\-node number of the mapped file .RE .PP \fIsector\fR .RS 4 beginning sector for the entire bio .RE .PP \fIbdev\fR .RS 4 target block device .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIq\fR .RS 4 request queue on which this bio was queued\&. .RE .PP \fIbytes_done\fR .RS 4 number of bytes transferred .RE .PP \fIdevname\fR .RS 4 block device name .RE .PP \fIflags\fR .RS 4 see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out\-out\-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn\*(Aqt own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported .RE .PP \fIidx\fR .RS 4 offset into the bio vector array \fIphys_segments\fR \- number of segments in this bio after physical address coalescing is performed\&. .RE .SH "CONTEXT" .PP The process makes block I/O request .SH SEE ALSO\n .IR tapset::ioblock (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.3stap000066400000000000000000000035141414446751200321240ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request \- probe to indicate request is added to the request queue\&. .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request .fi .SH "VALUES" .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIq\fR .RS 4 Pointer to request queue\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.kp.3stap000066400000000000000000000036301414446751200325340ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.kp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request.kp \- kprobe based probe to indicate that a request was added to the request queue .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request\&.kp .fi .SH "VALUES" .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIq\fR .RS 4 pointer to request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .PP \fIrq\fR .RS 4 Address of the request .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_add_request.tp.3stap000066400000000000000000000036331414446751200325500ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_add_request.tp .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_add_request.tp \- tracepoint based probe to indicate a request is added to the request queue\&. .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_add_request\&.tp .fi .SH "VALUES" .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIq\fR .RS 4 Pointer to request queue\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_completed_request.3stap000066400000000000000000000035051414446751200333500ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_completed_request \- Fires when a request is completed .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_completed_request .fi .SH "VALUES" .PP \fIrq\fR .RS 4 Address of the request .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.3stap000066400000000000000000000031641414446751200323530ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_next_request \- Fires when a request is retrieved from the request queue .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_next_request .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler.elv_next_request.return.3stap000066400000000000000000000034241414446751200336700ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler.elv_next_request.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler.elv_next_request.return \- Fires when a request retrieval issues a return signal .SH "SYNOPSIS" .sp .nf ioscheduler\&.elv_next_request\&.return .fi .SH "VALUES" .PP \fIdisk_major\fR .RS 4 Disk major number of the request .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq\fR .RS 4 Address of the request .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of the request .RE .PP \fIrq_flags\fR .RS 4 Request flags .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_abort_request.3stap000066400000000000000000000035131414446751200336600ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_abort_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_abort_request \- Fires when a request is aborted\&. .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_abort_request .fi .SH "VALUES" .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) probe::ioscheduler_trace.elv_completed_request.3stap000066400000000000000000000035571414446751200344560ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/man3'\" t .\" Title: probe::ioscheduler_trace.elv_completed_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_completed_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_completed_request .fi .SH "VALUES" .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .SH "DESCRIPTION" .PP completed\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_issue_request.3stap000066400000000000000000000035431414446751200337040ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_issue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_issue_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_issue_request .fi .SH "VALUES" .PP \fIrq\fR .RS 4 Address of request\&. .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .SH "DESCRIPTION" .PP scheduled\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.elv_requeue_request.3stap000066400000000000000000000036431414446751200342300ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.elv_requeue_request .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.elv_requeue_request \- Fires when a request is .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.elv_requeue_request .fi .SH "VALUES" .PP \fIrq_flags\fR .RS 4 Request flags\&. .RE .PP \fIdisk_minor\fR .RS 4 Disk minor number of request\&. .RE .PP \fIelevator_name\fR .RS 4 The type of I/O elevator currently enabled\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIdisk_major\fR .RS 4 Disk major no of request\&. .RE .PP \fIrq\fR .RS 4 Address of request\&. .RE .SH "DESCRIPTION" .PP put back on the queue, when the hadware cannot accept more requests\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.plug.3stap000066400000000000000000000032041414446751200310770ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.plug .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.plug \- Fires when a request queue is plugged; .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.plug .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIrq_queue\fR .RS 4 request queue .RE .SH "DESCRIPTION" .PP ie, requests in the queue cannot be serviced by block driver\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_io.3stap000066400000000000000000000033461414446751200321400ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_io .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.unplug_io \- Fires when a request queue is unplugged; .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.unplug_io .fi .SH "VALUES" .PP \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP Either, when number of pending requests in the queue exceeds threshold or, upon expiration of timer that was activated when queue was plugged\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ioscheduler_trace.unplug_timer.3stap000066400000000000000000000031701414446751200326440ustar00rootroot00000000000000'\" t .\" Title: probe::ioscheduler_trace.unplug_timer .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: IO Scheduler and block IO Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IOSCHEDULER_T" "3stap" "November 2021" "SystemTap Tapset Reference" "IO Scheduler and block IO Taps" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ioscheduler_trace.unplug_timer \- Fires when unplug timer associated .SH "SYNOPSIS" .sp .nf ioscheduler_trace\&.unplug_timer .fi .SH "VALUES" .PP \fIrq_queue\fR .RS 4 request queue .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP with a request queue expires\&. .SH SEE ALSO\n .IR tapset::ioscheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ForwDatagrams.3stap000066400000000000000000000034601414446751200303110ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ForwDatagrams .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FORWD" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ForwDatagrams \- Count forwarded packet .SH "SYNOPSIS" .sp .nf ipmib\&.ForwDatagrams .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIForwDatagrams\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_OUTFORWDATAGRAMS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragFails.3stap000066400000000000000000000034531414446751200274100ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGF" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.FragFails \- Count datagram fragmented unsuccessfully .SH "SYNOPSIS" .sp .nf ipmib\&.FragFails .fi .SH "VALUES" .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIFragFails\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_FRAGFAILS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.FragOKs.3stap000066400000000000000000000034371414446751200270500ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.FragOKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.FRAGO" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.FragOKs \- Count datagram fragmented successfully .SH "SYNOPSIS" .sp .nf ipmib\&.FragOKs .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIFragOKs\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_FRAGOKS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InAddrErrors.3stap000066400000000000000000000035021414446751200301030ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InAddrErrors .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INADD" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InAddrErrors \- Count arriving packets with an incorrect address .SH "SYNOPSIS" .sp .nf ipmib\&.InAddrErrors .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInAddrErrors\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INADDRERRORS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InDiscards.3stap000066400000000000000000000034451414446751200275760ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InDiscards .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INDIS" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InDiscards \- Count discarded inbound packets .SH "SYNOPSIS" .sp .nf ipmib\&.InDiscards .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInDiscards\fR (equivalent to SNMP\*(Aqs MIB STATS_MIB_INDISCARDS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InNoRoutes.3stap000066400000000000000000000034701414446751200276160ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InNoRoutes .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INNOR" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InNoRoutes \- Count an arriving packet with no matching socket .SH "SYNOPSIS" .sp .nf ipmib\&.InNoRoutes .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInNoRoutes\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INNOROUTES) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InReceives.3stap000066400000000000000000000034401414446751200276020ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InReceives .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INREC" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InReceives \- Count an arriving packet .SH "SYNOPSIS" .sp .nf ipmib\&.InReceives .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInReceives\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INRECEIVES) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.InUnknownProtos.3stap000066400000000000000000000035151414446751200307060ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.InUnknownProtos .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.INUNK" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.InUnknownProtos \- Count arriving packets with an unbound proto .SH "SYNOPSIS" .sp .nf ipmib\&.InUnknownProtos .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIInUnknownProtos\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_INUNKNOWNPROTOS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.OutRequests.3stap000066400000000000000000000034551414446751200300570ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.OutRequests .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.OUTRE" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.OutRequests \- Count a request to send a packet .SH "SYNOPSIS" .sp .nf ipmib\&.OutRequests .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutRequests\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_OUTREQUESTS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmReqds.3stap000066400000000000000000000034741414446751200276230ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmReqds .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ReasmReqds \- Count number of packet fragments reassembly requests .SH "SYNOPSIS" .sp .nf ipmib\&.ReasmReqds .fi .SH "VALUES" .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIReasmReqds\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_REASMREQDS) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::ipmib.ReasmTimeout.3stap000066400000000000000000000034531414446751200301700ustar00rootroot00000000000000'\" t .\" Title: probe::ipmib.ReasmTimeout .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IPMIB\&.REASM" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::ipmib.ReasmTimeout \- Count Reassembly Timeouts .SH "SYNOPSIS" .sp .nf ipmib\&.ReasmTimeout .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIskb\fR .RS 4 pointer to the struct sk_buff being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBipmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIReasmTimeout\fR (equivalent to SNMP\*(Aqs MIB IPSTATS_MIB_REASMTIMEOUT) .SH SEE ALSO\n .IR tapset::ipmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.entry.3stap000066400000000000000000000042201414446751200300740ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::irq_handler.entry \- Execution of interrupt handler starting .SH "SYNOPSIS" .sp .nf irq_handler\&.entry .fi .SH "VALUES" .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIhandler\fR .RS 4 interrupt handler function .RE .PP \fIflags\fR .RS 4 Flags for IRQ handler .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .PP \fIirq\fR .RS 4 irq number .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIaction\fR .RS 4 struct irqaction* for this interrupt num .RE .PP \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .PP \fIdev_name\fR .RS 4 name of device .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::irq_handler.exit.3stap000066400000000000000000000043031414446751200277060ustar00rootroot00000000000000'\" t .\" Title: probe::irq_handler.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::IRQ_HANDLER\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::irq_handler.exit \- Execution of interrupt handler completed .SH "SYNOPSIS" .sp .nf irq_handler\&.exit .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 name of device .RE .PP \fIdev_id\fR .RS 4 Cookie to identify device .RE .PP \fIflags_str\fR .RS 4 symbolic string representation of IRQ flags .RE .PP \fIaction\fR .RS 4 struct irqaction* .RE .PP \fIret\fR .RS 4 return value of the handler .RE .PP \fIdir\fR .RS 4 pointer to the proc/irq/NN/name entry .RE .PP \fIthread_fn\fR .RS 4 interrupt handler function for threaded interrupts .RE .PP \fIthread\fR .RS 4 thread pointer for threaded interrupts .RE .PP \fIhandler\fR .RS 4 interrupt handler function that was executed .RE .PP \fInext_irqaction\fR .RS 4 pointer to next irqaction for shared interrupts .RE .PP \fIthread_flags\fR .RS 4 Flags related to thread .RE .PP \fIflags\fR .RS 4 flags for IRQ handler .RE .PP \fIirq\fR .RS 4 interrupt number .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::json_data.3stap000066400000000000000000000036361414446751200264200ustar00rootroot00000000000000'\" t .\" Title: probe::json_data .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: JSON Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::JSON_DATA" "3stap" "November 2021" "SystemTap Tapset Reference" "JSON Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::json_data \- Fires whenever JSON data is wanted by a reader\&. .SH "SYNOPSIS" .sp .nf json_data .fi .SH "VALUES" .PP None .SH "CONTEXT" .PP This probe fires when the JSON data is about to be read\&. This probe must gather up data and then call the following macros to output the data in JSON format\&. First, \fIjson_output_data_start\fR() must be called\&. That call is followed by one or more of the following (one call for each data item): \fIjson_output_string_value\fR(), \fIjson_output_numeric_value\fR(), \fIjson_output_array_string_value\fR(), and \fIjson_output_array_numeric_value\fR()\&. Finally \fIjson_output_data_end\fR() must be called\&. .SH SEE ALSO\n .IR tapset::json (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.create.3stap000066400000000000000000000034231414446751200275430ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.CR" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.create \- Fires whenever a new process or thread is successfully created .SH "SYNOPSIS" .sp .nf kprocess\&.create .fi .SH "VALUES" .PP \fInew_tid\fR .RS 4 The TID of the newly created task .RE .PP \fInew_pid\fR .RS 4 The PID of the newly created process .RE .SH "CONTEXT" .PP Parent of the created process\&. .SH "DESCRIPTION" .PP Fires whenever a new process is successfully created, either as a result of fork (or one of its syscall variants), or a new kernel thread\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec.3stap000066400000000000000000000037331414446751200272300ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exec \- Attempt to exec to a new program .SH "SYNOPSIS" .sp .nf kprocess\&.exec .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 The path to the new executable .RE .PP \fIargstr\fR .RS 4 A string containing the filename followed by the arguments to pass, excluding 0th arg (SystemTap v2\&.5+) .RE .PP \fIargs\fR .RS 4 The arguments to pass to the new executable, including the 0th arg (SystemTap v2\&.5+) .RE .PP \fIname\fR .RS 4 Name of the system call (\(lqexecve\(rq) (SystemTap v2\&.5+) .RE .SH "CONTEXT" .PP The caller of exec\&. .SH "DESCRIPTION" .PP Fires whenever a process attempts to exec to a new program\&. Aliased to the syscall\&.execve probe in SystemTap v2\&.5+\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exec_complete.3stap000066400000000000000000000037571414446751200311260ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exec_complete .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exec_complete \- Return from exec to a new program .SH "SYNOPSIS" .sp .nf kprocess\&.exec_complete .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 A string representation of errno (SystemTap v2\&.5+) .RE .PP \fIname\fR .RS 4 Name of the system call (\(lqexecve\(rq) (SystemTap v2\&.5+) .RE .PP \fIsuccess\fR .RS 4 A boolean indicating whether the exec was successful .RE .PP \fIerrno\fR .RS 4 The error number resulting from the exec .RE .SH "CONTEXT" .PP On success, the context of the new executable\&. On failure, remains in the context of the caller\&. .SH "DESCRIPTION" .PP Fires at the completion of an exec call\&. Aliased to the syscall\&.execve\&.return probe in SystemTap v2\&.5+\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.exit.3stap000066400000000000000000000032611414446751200272510ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.EX" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.exit \- Exit from process .SH "SYNOPSIS" .sp .nf kprocess\&.exit .fi .SH "VALUES" .PP \fIcode\fR .RS 4 The exit code of the process .RE .SH "CONTEXT" .PP The process which is terminating\&. .SH "DESCRIPTION" .PP Fires when a process terminates\&. This will always be followed by a kprocess\&.release, though the latter may be delayed if the process waits in a zombie state\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.release.3stap000066400000000000000000000037751414446751200277320ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.RE" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.release \- Process released .SH "SYNOPSIS" .sp .nf kprocess\&.release .fi .SH "VALUES" .PP \fItask\fR .RS 4 A task handle to the process being released .RE .PP \fIpid\fR .RS 4 Same as \fIreleased_pid\fR for compatibility (deprecated) .RE .PP \fIreleased_tid\fR .RS 4 TID of the task being released .RE .PP \fIreleased_pid\fR .RS 4 PID of the process being released .RE .SH "CONTEXT" .PP The context of the parent, if it wanted notification of this process\*(Aq termination, else the context of the process itself\&. .SH "DESCRIPTION" .PP Fires when a process is released from the kernel\&. This always follows a kprocess\&.exit, though it may be delayed somewhat if the process waits in a zombie state\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::kprocess.start.3stap000066400000000000000000000030261414446751200274340ustar00rootroot00000000000000'\" t .\" Title: probe::kprocess.start .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Kernel Process Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::KPROCESS\&.ST" "3stap" "November 2021" "SystemTap Tapset Reference" "Kernel Process Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::kprocess.start \- Starting new process .SH "SYNOPSIS" .sp .nf kprocess\&.start .fi .SH "VALUES" .PP None .SH "CONTEXT" .PP Newly created process\&. .SH "DESCRIPTION" .PP Fires immediately before a new process begins execution\&. .SH SEE ALSO\n .IR tapset::kprocess (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.DelayedACKs.3stap000066400000000000000000000034531414446751200303520ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.DelayedACKs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.DE" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.DelayedACKs \- Count of delayed acks .SH "SYNOPSIS" .sp .nf linuxmib\&.DelayedACKs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIDelayedACKs\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_DELAYEDACKS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenDrops.3stap000066400000000000000000000035031414446751200305430ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenDrops .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.ListenDrops \- Count of times conn request that were dropped .SH "SYNOPSIS" .sp .nf linuxmib\&.ListenDrops .fi .SH "VALUES" .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIListenDrops\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_LISTENDROPS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.ListenOverflows.3stap000066400000000000000000000035221414446751200314430ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.ListenOverflows .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.LI" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.ListenOverflows \- Count of times a listen queue overflowed .SH "SYNOPSIS" .sp .nf linuxmib\&.ListenOverflows .fi .SH "VALUES" .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIListenOverflows\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_LISTENOVERFLOWS) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::linuxmib.TCPMemoryPressures.3stap000066400000000000000000000035401414446751200320310ustar00rootroot00000000000000'\" t .\" Title: probe::linuxmib.TCPMemoryPressures .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::LINUXMIB\&.TC" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::linuxmib.TCPMemoryPressures \- Count of times memory pressure was used .SH "SYNOPSIS" .sp .nf linuxmib\&.TCPMemoryPressures .fi .SH "VALUES" .PP \fIop\fR .RS 4 Value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 Pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBlinuxmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fITCPMemoryPressures\fR (equivalent to SNMP\*(Aqs MIB LINUX_MIB_TCPMEMORYPRESSURES) .SH SEE ALSO\n .IR tapset::linuxmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mac.3stap000066400000000000000000000032051414446751200277770ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mac .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_mac \- Called when the netdev_name has the MAC changed .SH "SYNOPSIS" .sp .nf netdev\&.change_mac .fi .SH "VALUES" .PP \fIold_mac\fR .RS 4 The current MAC address .RE .PP \fImac_len\fR .RS 4 The MAC length .RE .PP \fInew_mac\fR .RS 4 The new MAC address .RE .PP \fIdev_name\fR .RS 4 The device that will have the MAC changed .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_mtu.3stap000066400000000000000000000031001414446751200300360ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_mtu .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_mtu \- Called when the netdev MTU is changed .SH "SYNOPSIS" .sp .nf netdev\&.change_mtu .fi .SH "VALUES" .PP \fInew_mtu\fR .RS 4 The new MTU .RE .PP \fIdev_name\fR .RS 4 The device that will have the MTU changed .RE .PP \fIold_mtu\fR .RS 4 The current MTU .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.change_rx_flag.3stap000066400000000000000000000030371414446751200306640ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.change_rx_flag .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CHAN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.change_rx_flag \- Called when the device RX flag will be changed .SH "SYNOPSIS" .sp .nf netdev\&.change_rx_flag .fi .SH "VALUES" .PP \fIflags\fR .RS 4 The new flags .RE .PP \fIdev_name\fR .RS 4 The device that will be changed .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.close.3stap000066400000000000000000000027241414446751200270440ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.CLOS" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.close \- Called when the device is closed .SH "SYNOPSIS" .sp .nf netdev\&.close .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be closed .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.get_stats.3stap000066400000000000000000000027731414446751200277400ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.get_stats .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.GET_" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.get_stats \- Called when someone asks the device statistics .SH "SYNOPSIS" .sp .nf netdev\&.get_stats .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to provide the statistics .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.hard_transmit.3stap000066400000000000000000000032761414446751200306010ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.hard_transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.HARD" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.hard_transmit \- Called when the devices is going to TX (hard) .SH "SYNOPSIS" .sp .nf netdev\&.hard_transmit .fi .SH "VALUES" .PP \fItruesize\fR .RS 4 The size of the data to be transmitted\&. .RE .PP \fIlength\fR .RS 4 The length of the transmit buffer\&. .RE .PP \fIdev_name\fR .RS 4 The device scheduled to transmit .RE .PP \fIprotocol\fR .RS 4 The protocol used in the transmission .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.ioctl.3stap000066400000000000000000000030141414446751200270420ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.IOCT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.ioctl \- Called when the device suffers an IOCTL .SH "SYNOPSIS" .sp .nf netdev\&.ioctl .fi .SH "VALUES" .PP \fIcmd\fR .RS 4 The IOCTL request .RE .PP \fIarg\fR .RS 4 The IOCTL argument (usually the netdev interface) .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.open.3stap000066400000000000000000000027211414446751200266750ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.OPEN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.open \- Called when the device is opened .SH "SYNOPSIS" .sp .nf netdev\&.open .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be opened .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.receive.3stap000066400000000000000000000031441414446751200273560ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RECE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.receive \- Data received from network device\&. .SH "SYNOPSIS" .sp .nf netdev\&.receive .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the receiving buffer\&. .RE .PP \fIprotocol\fR .RS 4 Protocol of received packet\&. .RE .PP \fIdev_name\fR .RS 4 The name of the device\&. e\&.g: eth0, ath1\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.register.3stap000066400000000000000000000027451414446751200275660ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.REGI" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.register \- Called when the device is registered .SH "SYNOPSIS" .sp .nf netdev\&.register .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be registered .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.rx.3stap000066400000000000000000000030061414446751200263620ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.rx .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.RX" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.rx \- Called when the device is going to receive a packet .SH "SYNOPSIS" .sp .nf netdev\&.rx .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device received the packet .RE .PP \fIprotocol\fR .RS 4 The packet protocol .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.set_promiscuity.3stap000066400000000000000000000033351414446751200312000ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.set_promiscuity .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.SET_" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.set_promiscuity \- Called when the device enters/leaves promiscuity .SH "SYNOPSIS" .sp .nf netdev\&.set_promiscuity .fi .SH "VALUES" .PP \fIinc\fR .RS 4 Count the number of promiscuity openers .RE .PP \fIenable\fR .RS 4 If the device is entering promiscuity mode .RE .PP \fIdev_name\fR .RS 4 The device that is entering/leaving promiscuity mode .RE .PP \fIdisable\fR .RS 4 If the device is leaving promiscuity mode .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.transmit.3stap000066400000000000000000000033221414446751200275730ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.transmit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.TRAN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.transmit \- Network device transmitting buffer .SH "SYNOPSIS" .sp .nf netdev\&.transmit .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the transmit buffer\&. .RE .PP \fItruesize\fR .RS 4 The size of the data to be transmitted\&. .RE .PP \fIprotocol\fR .RS 4 The protocol of this packet(defined in include/linux/if_ether\&.h)\&. .RE .PP \fIdev_name\fR .RS 4 The name of the device\&. e\&.g: eth0, ath1\&. .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netdev.unregister.3stap000066400000000000000000000027651414446751200301330ustar00rootroot00000000000000'\" t .\" Title: probe::netdev.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETDEV\&.UNRE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netdev.unregister \- Called when the device is being unregistered .SH "SYNOPSIS" .sp .nf netdev\&.unregister .fi .SH "VALUES" .PP \fIdev_name\fR .RS 4 The device that is going to be unregistered .RE .SH SEE ALSO\n .IR tapset::networking (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.forward.3stap000066400000000000000000000064241414446751200306740ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.forward \- \- Called for each ARP packet to be forwarded .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.forward .fi .SH "VALUES" .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.in.3stap000066400000000000000000000063761414446751200276440ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.in \- \- Called for each incoming ARP packet .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.in .fi .SH "VALUES" .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.arp.out.3stap000066400000000000000000000064011414446751200300320ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.arp.out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.A" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.arp.out \- \- Called for each outgoing ARP packet .SH "SYNOPSIS" .sp .nf netfilter\&.arp\&.out .fi .SH "VALUES" .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIar_pro\fR .RS 4 Format of protocol address .RE .PP \fIar_hrd\fR .RS 4 Format of hardware address .RE .PP \fIar_sip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqarp\(rq .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIar_hln\fR .RS 4 Length of hardware address .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIar_tip\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target IP address .RE .PP \fIar_pln\fR .RS 4 Length of protocol address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIar_sha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIar_op\fR .RS 4 ARP opcode (command) .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIarphdr\fR .RS 4 Address of ARP header .RE .PP \fIar_tha\fR .RS 4 Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address .RE .PP \fIar_data\fR .RS 4 Address of ARP packet data region (after the header) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.forward.3stap000066400000000000000000000070261414446751200313450ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.forward \- Called on an incoming bridging packet destined for some other computer .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.forward .fi .SH "VALUES" .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_in.3stap000066400000000000000000000070161414446751200314600ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.local_in \- Called on a bridging packet destined for the local computer .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.local_in .fi .SH "VALUES" .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.local_out.3stap000066400000000000000000000070151414446751200316600ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.local_out \- Called on a bridging packet coming from a local process .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.local_out .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.post_routing.3stap000066400000000000000000000070171414446751200324350ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.post_routing \- \- Called before a bridging packet hits the wire .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.post_routing .fi .SH "VALUES" .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.bridge.pre_routing.3stap000066400000000000000000000070101414446751200322270ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.bridge.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.bridge.pre_routing \- \- Called before a bridging packet is routed .SH "SYNOPSIS" .sp .nf netfilter\&.bridge\&.pre_routing .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIbr_mac\fR .RS 4 Bridge MAC address .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIbr_vid\fR .RS 4 Protocol version identifier .RE .PP \fIbr_bid\fR .RS 4 Identity of bridge .RE .PP \fIbr_msg\fR .RS 4 Message age in 1/256 secs .RE .PP \fIbr_flags\fR .RS 4 BPDU flags .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIbr_type\fR .RS 4 BPDU type .RE .PP \fIbr_fd\fR .RS 4 Forward delay in 1/256 secs .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIprotocol\fR .RS 4 Packet protocol .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIbr_rmac\fR .RS 4 Root bridge MAC address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIbrhdr\fR .RS 4 Address of bridge header .RE .PP \fIllcproto_stp\fR .RS 4 Constant used to signify Bridge Spanning Tree Protocol packet .RE .PP \fIbr_cost\fR .RS 4 Total cost from transmitting bridge to root .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIbr_prid\fR .RS 4 Protocol identifier .RE .PP \fIbr_rid\fR .RS 4 Identity of root bridge .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIbr_max\fR .RS 4 Max age in 1/256 secs .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIbr_poid\fR .RS 4 Port identifier .RE .PP \fIbr_htime\fR .RS 4 Hello time in 1/256 secs .RE .PP \fIpf\fR .RS 4 Protocol family \-\- always \(lqbridge\(rq .RE .PP \fIllcpdu\fR .RS 4 Address of LLC Protocol Data Unit .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.forward.3stap000066400000000000000000000071311414446751200305160ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.forward .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.forward \- Called on an incoming IP packet addressed to some other computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.forward .fi .SH "VALUES" .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_in.3stap000066400000000000000000000071331414446751200306340ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_in .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.local_in \- Called on an incoming IP packet addressed to the local computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.local_in .fi .SH "VALUES" .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.local_out.3stap000066400000000000000000000070761414446751200310430ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.local_out .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.local_out \- Called on an outgoing IP packet .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.local_out .fi .SH "VALUES" .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.post_routing.3stap000066400000000000000000000071531414446751200316120ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.post_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.post_routing \- Called immediately before an outgoing IP packet leaves the computer .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.post_routing .fi .SH "VALUES" .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \-\- either \(lqipv4\(rq or \(lqipv6\(rq .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::netfilter.ip.pre_routing.3stap000066400000000000000000000071131414446751200314070ustar00rootroot00000000000000'\" t .\" Title: probe::netfilter.ip.pre_routing .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NETFILTER\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::netfilter.ip.pre_routing \- Called before an IP packet is routed .SH "SYNOPSIS" .sp .nf netfilter\&.ip\&.pre_routing .fi .SH "VALUES" .PP \fIlength\fR .RS 4 The length of the packet buffer contents, in bytes .RE .PP \fIoutdev_name\fR .RS 4 Name of network device packet will be routed to (if known) .RE .PP \fIdata_str\fR .RS 4 A string representing the packet buffer contents .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fInf_repeat\fR .RS 4 Constant used to signify a \*(Aqrepeat\*(Aq verdict .RE .PP \fInf_queue\fR .RS 4 Constant used to signify a \*(Aqqueue\*(Aq verdict .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver (ipv4 only) .RE .PP \fIindev_name\fR .RS 4 Name of network device packet was received on (if known) .RE .PP \fIsport\fR .RS 4 TCP or UDP source port (ipv4 only) .RE .PP \fInf_accept\fR .RS 4 Constant used to signify an \*(Aqaccept\*(Aq verdict .RE .PP \fIoutdev\fR .RS 4 Address of net_device representing output device, 0 if unknown .RE .PP \fIurg\fR .RS 4 TCP URG flag (if protocol is TCP; ipv4 only) .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fInf_drop\fR .RS 4 Constant used to signify a \*(Aqdrop\*(Aq verdict .RE .PP \fIrst\fR .RS 4 TCP RST flag (if protocol is TCP; ipv4 only) .RE .PP \fInf_stop\fR .RS 4 Constant used to signify a \*(Aqstop\*(Aq verdict .RE .PP \fIiphdr\fR .RS 4 Address of IP header .RE .PP \fIipproto_udp\fR .RS 4 Constant used to signify that the packet protocol is UDP .RE .PP \fIipproto_tcp\fR .RS 4 Constant used to signify that the packet protocol is TCP .RE .PP \fIdata_hex\fR .RS 4 A hexadecimal string representing the packet buffer contents .RE .PP \fIsyn\fR .RS 4 TCP SYN flag (if protocol is TCP; ipv4 only) .RE .PP \fIack\fR .RS 4 TCP ACK flag (if protocol is TCP; ipv4 only) .RE .PP \fIindev\fR .RS 4 Address of net_device representing input device, 0 if unknown .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIpf\fR .RS 4 Protocol family \- either \*(Aqipv4\*(Aq or \*(Aqipv6\*(Aq .RE .PP \fIfin\fR .RS 4 TCP FIN flag (if protocol is TCP; ipv4 only) .RE .PP \fIpsh\fR .RS 4 TCP PSH flag (if protocol is TCP; ipv4 only) .RE .PP \fIdport\fR .RS 4 TCP or UDP destination port (ipv4 only) .RE .PP \fInf_stolen\fR .RS 4 Constant used to signify a \*(Aqstolen\*(Aq verdict .RE .SH SEE ALSO\n .IR tapset::netfilter (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpage.3stap000066400000000000000000000040571414446751200275670ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.readpage \- NFS client synchronously reading a page .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.readpage .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfile\fR .RS 4 file argument .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsize\fR .RS 4 number of pages to be read in this execution .RE .SH "DESCRIPTION" .PP Read the page over, only fires when a previous async read operation failed .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.readpages.3stap000066400000000000000000000035601414446751200277500ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.readpages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.readpages \- NFS client reading multiple pages .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.readpages .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fInr_pages\fR .RS 4 number of pages attempted to read in this execution .RE .PP \fIrsize\fR .RS 4 read size (in bytes) .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfile\fR .RS 4 filp argument .RE .PP \fIrpages\fR .RS 4 read size (in pages) .RE .PP \fIsize\fR .RS 4 number of pages attempted to read in this execution .RE .SH "DESCRIPTION" .PP Fires when in readahead way, read several pages once .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.release_page.3stap000066400000000000000000000034251414446751200304310ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.release_page .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.release_page \- NFS client releasing page .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.release_page .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsize\fR .RS 4 release pages .RE .SH "DESCRIPTION" .PP Fires when do a release operation on NFS\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.set_page_dirty.3stap000066400000000000000000000033261414446751200310170ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.set_page_dirty .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.S" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.set_page_dirty \- NFS client marking page as dirty .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.set_page_dirty .fi .SH "VALUES" .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIpage_flag\fR .RS 4 page flags .RE .SH "DESCRIPTION" .PP This probe attaches to the generic __set_page_dirty_nobuffers function\&. Thus, this probe is going to fire on many other file systems in addition to the NFS client\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_begin.3stap000066400000000000000000000042311414446751200303070ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_begin .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.write_begin \- NFS client begin to write data .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.write_begin .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIto\fR .RS 4 end address of this write operation .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIoffset\fR .RS 4 start address of this write operation .RE .PP \fIsize\fR .RS 4 write bytes .RE .SH "DESCRIPTION" .PP Occurs when write operation occurs on nfs\&. It prepare a page for writing, look for a request corresponding to the page\&. If there is one, and it belongs to another file, it flush it out before it tries to copy anything into the page\&. Also do the same if it finds a request from an existing dropped page .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.write_end.3stap000066400000000000000000000041451414446751200277750ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.write_end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.write_end \- NFS client complete writing data .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.write_end .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIto\fR .RS 4 end address of this write operation .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIsize\fR .RS 4 write bytes .RE .PP \fIoffset\fR .RS 4 start address of this write operation .RE .SH "DESCRIPTION" .PP Fires when do a write operation on nfs, often after prepare_write .PP Update and possibly write a cached page of an NFS file\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepage.3stap000066400000000000000000000044421414446751200300040ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepage .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.writepage \- NFS client writing a mapped page to the NFS server .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.writepage .fi .SH "VALUES" .PP \fIi_state\fR .RS 4 inode state flags .RE .PP \fIsize\fR .RS 4 number of pages to be written in this execution .RE .PP \fIwsize\fR .RS 4 write size .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIfor_kupdate\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs a kupdate writeback .RE .PP \fI__page\fR .RS 4 the address of page .RE .PP \fIsb_flag\fR .RS 4 super block flags .RE .PP \fIi_flag\fR .RS 4 file flags .RE .PP \fIpage_index\fR .RS 4 offset within mapping, can used a page identifier and position identifier in the page frame .RE .PP \fIfor_reclaim\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs invoked from the page allocator .RE .SH "DESCRIPTION" .PP The priority of wb is decided by the flags \fIfor_reclaim\fR and \fIfor_kupdate\fR\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.aop.writepages.3stap000066400000000000000000000041441414446751200301660ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.aop.writepages .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.AOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.aop.writepages \- NFS client writing several dirty pages to the NFS server .SH "SYNOPSIS" .sp .nf nfs\&.aop\&.writepages .fi .SH "VALUES" .PP \fIwsize\fR .RS 4 write size .RE .PP \fInr_to_write\fR .RS 4 number of pages attempted to be written in this execution .RE .PP \fIsize\fR .RS 4 number of pages attempted to be written in this execution .RE .PP \fIwpages\fR .RS 4 write size (in pages) .RE .PP \fIfor_reclaim\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs invoked from the page allocator .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfor_kupdate\fR .RS 4 a flag of writeback_control, indicates if it\*(Aqs a kupdate writeback .RE .SH "DESCRIPTION" .PP The priority of wb is decided by the flags \fIfor_reclaim\fR and \fIfor_kupdate\fR\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_read.3stap000066400000000000000000000040501414446751200275600ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.aio_read \- NFS client aio_read file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.aio_read .fi .SH "VALUES" .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIpos\fR .RS 4 current position of file .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.aio_write.3stap000066400000000000000000000033441414446751200300040ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.A" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.aio_write \- NFS client aio_write file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.aio_write .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIpos\fR .RS 4 offset of the file .RE .PP \fIfile_name\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.check_flags.3stap000066400000000000000000000027341414446751200302550ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.check_flags .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.C" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.check_flags \- NFS client checking flag operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.check_flags .fi .SH "VALUES" .PP \fIflag\fR .RS 4 file flag .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.flush.3stap000066400000000000000000000031061414446751200271370ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.flush \- NFS client flush file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.flush .fi .SH "VALUES" .PP \fImode\fR .RS 4 file mode .RE .PP \fIndirty\fR .RS 4 number of dirty page .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.fsync.3stap000066400000000000000000000030371414446751200271430ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.fsync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.F" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.fsync \- NFS client fsync operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.fsync .fi .SH "VALUES" .PP \fIndirty\fR .RS 4 number of dirty pages .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.llseek.3stap000066400000000000000000000033111414446751200272730ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.llseek .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.llseek \- NFS client llseek operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.llseek .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIwhence_str\fR .RS 4 symbolic string representation of the position to seek from .RE .PP \fIwhence\fR .RS 4 the position to seek from .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIoffset\fR .RS 4 the offset of the file will be repositioned .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.lock.3stap000066400000000000000000000034211414446751200267460ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.lock .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.L" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.lock \- NFS client file lock operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.lock .fi .SH "VALUES" .PP \fIino\fR .RS 4 inode number .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfl_flag\fR .RS 4 lock flags .RE .PP \fIi_mode\fR .RS 4 file type and access rights .RE .PP \fIcmd\fR .RS 4 cmd arguments .RE .PP \fIfl_start\fR .RS 4 starting offset of locked region .RE .PP \fIfl_end\fR .RS 4 ending offset of locked region .RE .PP \fIfl_type\fR .RS 4 lock type .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.mmap.3stap000066400000000000000000000041431414446751200267520ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.M" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.mmap \- NFS client mmap operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.mmap .fi .SH "VALUES" .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIvm_flag\fR .RS 4 vm flags .RE .PP \fIvm_start\fR .RS 4 start address within vm_mm .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIvm_end\fR .RS 4 the first byte after end address within vm_mm .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIbuf\fR .RS 4 the address of buf in user space .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.open.3stap000066400000000000000000000031521414446751200267600ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.O" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.open \- NFS client file open operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.open .fi .SH "VALUES" .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIi_size\fR .RS 4 file length in bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIflag\fR .RS 4 file flag .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read.3stap000066400000000000000000000031641414446751200267350ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.read \- NFS client read operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.read .fi .SH "VALUES" .PP \fIdevname\fR .RS 4 block device name .RE .SH "DESCRIPTION" .PP SystemTap uses the vfs\&.do_sync_read probe to implement this probe and as a result will get operations other than the NFS client read operations\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.read_iter.3stap000066400000000000000000000037631414446751200277650ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.read_iter \- NFS client read_iter file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.read_iter .fi .SH "VALUES" .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIpos\fR .RS 4 current position of file .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIparent_name\fR .RS 4 parent dir name .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.release.3stap000066400000000000000000000030361414446751200274400ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.R" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.release \- NFS client release page operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.release .fi .SH "VALUES" .PP \fImode\fR .RS 4 file mode .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.sendfile.3stap000066400000000000000000000036241414446751200276140ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.sendfile .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.S" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.sendfile \- NFS client send file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.sendfile .fi .SH "VALUES" .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIppos\fR .RS 4 current position of file .RE .PP \fIattrtimeo\fR .RS 4 how long the cached information is assumed to be valid\&. We need to revalidate the cached attrs for this inode if jiffies \- read_cache_jiffies > attrtimeo\&. .RE .PP \fIcache_valid\fR .RS 4 cache related bit mask flag .RE .PP \fIcache_time\fR .RS 4 when we started read\-caching this inode .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write.3stap000066400000000000000000000031721414446751200271530ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.write \- NFS client write operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.write .fi .SH "VALUES" .PP \fIdevname\fR .RS 4 block device name .RE .SH "DESCRIPTION" .PP SystemTap uses the vfs\&.do_sync_write probe to implement this probe and as a result will get operations other than the NFS client write operations\&. .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.fop.write_iter.3stap000066400000000000000000000032571414446751200302020ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.fop.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.FOP\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.fop.write_iter \- NFS client write_iter file operation .SH "SYNOPSIS" .sp .nf nfs\&.fop\&.write_iter .fi .SH "VALUES" .PP \fIparent_name\fR .RS 4 parent dir name .RE .PP \fIpos\fR .RS 4 offset of the file .RE .PP \fIfile_name\fR .RS 4 file name .RE .PP \fIdev\fR .RS 4 device identifier .RE .PP \fIino\fR .RS 4 inode number .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfs (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit.3stap000066400000000000000000000043731414446751200274740ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit \- NFS client committing data on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit .fi .SH "VALUES" .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIoffset\fR .RS 4 the file offset .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.commit kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .PP Fires when client writes the buffered data to disk\&. The buffered data is asynchronously written by client earlier\&. The commit function works in sync way\&. This probe point does not exist in NFSv2\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_done.3stap000066400000000000000000000037321414446751200304770ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit_done \- NFS client response to a commit RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit_done .fi .SH "VALUES" .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 number of bytes committed .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIstatus\fR .RS 4 result of last operation .RE .SH "DESCRIPTION" .PP Fires when a reply to a commit RPC task is received or some commit operation error occur (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.commit_setup.3stap000066400000000000000000000041121414446751200307030ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.commit_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.commit_setup \- NFS client setting up a commit RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.commit_setup .fi .SH "VALUES" .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIsize\fR .RS 4 bytes in this commit .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIcount\fR .RS 4 bytes in this commit .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .SH "DESCRIPTION" .PP The commit_setup function is used to setup a commit RPC task\&. Is is not doing the actual commit operation\&. It does not exist in NFSv2\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.create.3stap000066400000000000000000000034651414446751200274500ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.create \- NFS client creating file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.create .fi .SH "VALUES" .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIflag\fR .RS 4 indicates create mode (only for NFSv3 and NFSv4) .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.handle_exception.3stap000066400000000000000000000031421414446751200315060ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.handle_exception .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.handle_exception \- NFS client handling an NFSv4 exception .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.handle_exception .fi .SH "VALUES" .PP \fIerrorcode\fR .RS 4 indicates the type of error .RE .SH "DESCRIPTION" .PP This is the error handling routine for processes for NFSv4\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.lookup.3stap000066400000000000000000000036311414446751200275110ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.lookup \- NFS client opens/searches a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.lookup .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 the name of file which client opens/searches on server .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIname_len\fR .RS 4 the length of file name .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.open.3stap000066400000000000000000000034431414446751200271420ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.open \- NFS client allocates file read/write context information .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.open .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fImode\fR .RS 4 file mode .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIflag\fR .RS 4 file flag .RE .SH "DESCRIPTION" .PP Allocate file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read.3stap000066400000000000000000000036571414446751200271230ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read \- NFS client synchronously reads file from server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read .fi .SH "VALUES" .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIflags\fR .RS 4 used to set task\->tk_flags in rpc_init_task function .RE .PP \fIcount\fR .RS 4 read bytes in this execution .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.read kernel functions were removed in kernel commit 8e0969 in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_done.3stap000066400000000000000000000035661414446751200301270ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read_done \- NFS client response to a read RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read_done .fi .SH "VALUES" .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIcount\fR .RS 4 number of bytes read .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .SH "DESCRIPTION" .PP Fires when a reply to a read RPC task is received or some read error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.read_setup.3stap000066400000000000000000000035361414446751200303370ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.read_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.read_setup \- NFS client setting up a read RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.read_setup .fi .SH "VALUES" .PP \fIcount\fR .RS 4 read bytes in this execution .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIoffset\fR .RS 4 the file offset .RE .SH "DESCRIPTION" .PP The read_setup function is used to setup a read RPC task\&. It is not doing the actual read operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.release.3stap000066400000000000000000000034521414446751200276210ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.release \- NFS client releases file read/write context information .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.release .fi .SH "VALUES" .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIflag\fR .RS 4 file flag .RE .PP \fImode\fR .RS 4 file mode .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .SH "DESCRIPTION" .PP Release file read/write context information .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.remove.3stap000066400000000000000000000033541414446751200274770ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.remove \- NFS client removes a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.remove .fi .SH "VALUES" .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename.3stap000066400000000000000000000036341414446751200274520ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename \- NFS client renames a file on server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename .fi .SH "VALUES" .PP \fInew_fh\fR .RS 4 file handle of new parent dir .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fInew_name\fR .RS 4 new file name .RE .PP \fIold_name\fR .RS 4 old file name .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version (the function is used for all NFS version) .RE .PP \fInew_filelen\fR .RS 4 length of new file name .RE .PP \fIold_filelen\fR .RS 4 length of old file name .RE .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_done.3stap000066400000000000000000000037051414446751200304560ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename_done \- NFS client response to a rename RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename_done .fi .SH "VALUES" .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fInew_fh\fR .RS 4 file handle of new parent dir .RE .PP \fIold_fh\fR .RS 4 file handle of old parent dir .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .SH "DESCRIPTION" .PP Fires when a reply to a rename RPC task is received or some rename error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.rename_setup.3stap000066400000000000000000000034051414446751200306660ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.rename_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.rename_setup \- NFS client setting up a rename RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.rename_setup .fi .SH "VALUES" .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIfh\fR .RS 4 file handle of parent dir .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIversion\fR .RS 4 NFS version .RE .SH "DESCRIPTION" .PP The rename_setup function is used to setup a rename RPC task\&. Is is not doing the actual rename operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write.3stap000066400000000000000000000042011414446751200273240ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write \- NFS client synchronously writes file to server .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write .fi .SH "VALUES" .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .PP \fIsize\fR .RS 4 read bytes in this execution .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIflags\fR .RS 4 used to set task\->tk_flags in rpc_init_task function .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .SH "DESCRIPTION" .PP All the nfs\&.proc\&.write kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2\&.6\&.21 and newer kernels\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_done.3stap000066400000000000000000000037111414446751200303360ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_done .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write_done \- NFS client response to a write RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write_done .fi .SH "VALUES" .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIcount\fR .RS 4 number of bytes written .RE .PP \fIstatus\fR .RS 4 result of last operation .RE .PP \fIvalid\fR .RS 4 fattr\->valid, indicates which fields are valid .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fItimestamp\fR .RS 4 V4 timestamp, which is used for lease renewal .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .SH "DESCRIPTION" .PP Fires when a reply to a write RPC task is received or some write error occurs (timeout or socket shutdown)\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfs.proc.write_setup.3stap000066400000000000000000000043611414446751200305530ustar00rootroot00000000000000'\" t .\" Title: probe::nfs.proc.write_setup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFS\&.PROC\&." "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfs.proc.write_setup \- NFS client setting up a write RPC task .SH "SYNOPSIS" .sp .nf nfs\&.proc\&.write_setup .fi .SH "VALUES" .PP \fIcount\fR .RS 4 bytes written in this execution .RE .PP \fIserver_ip\fR .RS 4 IP address of server .RE .PP \fIbitmask0\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIoffset\fR .RS 4 the file offset .RE .PP \fIbitmask1\fR .RS 4 V4 bitmask representing the set of attributes supported on this filesystem .RE .PP \fIsize\fR .RS 4 bytes written in this execution .RE .PP \fIhow\fR .RS 4 used to set args\&.stable\&. The stable value could be: NFS_UNSTABLE,NFS_DATA_SYNC,NFS_FILE_SYNC (in nfs\&.proc3\&.write_setup and nfs\&.proc4\&.write_setup) .RE .PP \fIversion\fR .RS 4 NFS version .RE .PP \fIprot\fR .RS 4 transfer protocol .RE .SH "DESCRIPTION" .PP The write_setup function is used to setup a write RPC task\&. It is not doing the actual write operation\&. .SH SEE ALSO\n .IR tapset::nfs_proc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.close.3stap000066400000000000000000000030351414446751200265050ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CLOSE" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.close \- NFS server closing a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.close .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .SH "DESCRIPTION" .PP This probe point does not exist in kernels starting with 4\&.2\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.commit.3stap000066400000000000000000000034111414446751200266660ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.COMMIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.commit \- NFS server committing all pending writes to stable storage .SH "SYNOPSIS" .sp .nf nfsd\&.commit .fi .SH "VALUES" .PP \fIflag\fR .RS 4 indicates whether this execution is a sync operation .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.create.3stap000066400000000000000000000036471414446751200266540ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.create \- NFS server creating a file(regular,dir,device,fifo) for client .SH "SYNOPSIS" .sp .nf nfsd\&.create .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fItype\fR .RS 4 file type(regular,dir,device,fifo \&.\&.\&.) .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .PP \fIiap_valid\fR .RS 4 Attribute flags .RE .SH "DESCRIPTION" .PP Sometimes nfsd will call nfsd_create_v3 instead of this this probe point\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.createv3.3stap000066400000000000000000000043671414446751200271250ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.createv3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.CREATE" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.createv3 \- NFS server creating a regular file or set file attributes for client .SH "SYNOPSIS" .sp .nf nfsd\&.createv3 .fi .SH "VALUES" .PP \fIiap_valid\fR .RS 4 Attribute flags .RE .PP \fItruncp\fR .RS 4 trunp arguments, indicates if the file shouldbe truncate .RE .PP \fIiap_mode\fR .RS 4 file access mode .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIverifier\fR .RS 4 file attributes (atime,mtime,mode)\&. It\*(Aqs used to reset file attributes for CREATE_EXCLUSIVE .RE .PP \fIcreatemode\fR .RS 4 create mode \&.The possible values could be: NFS3_CREATE_EXCLUSIVE, NFS3_CREATE_UNCHECKED, or NFS3_CREATE_GUARDED .RE .PP \fIfilename\fR .RS 4 file name .RE .SH "DESCRIPTION" .PP This probepoints is only called by nfsd3_proc_create and nfsd4_open when op_claim_type is NFS4_OPEN_CLAIM_NULL\&. .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.dispatch.3stap000066400000000000000000000032651414446751200272040ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.dispatch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.DISPAT" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.dispatch \- NFS server receives an operation from client .SH "SYNOPSIS" .sp .nf nfsd\&.dispatch .fi .SH "VALUES" .PP \fIxid\fR .RS 4 transmission id .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIprog\fR .RS 4 program number .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIproc\fR .RS 4 procedure number .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.lookup.3stap000066400000000000000000000032541414446751200267140ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.LOOKUP" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.lookup \- NFS server opening or searching file for a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.lookup .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle of parent dir(the first part is the length of the file handle) .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.open.3stap000066400000000000000000000032751414446751200263470ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.OPEN" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.open \- NFS server opening a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.open .fi .SH "VALUES" .PP \fItype\fR .RS 4 type of file (regular file or dir) .RE .PP \fIaccess\fR .RS 4 indicates the type of open (read/write/commit/readdir\&.\&.\&.) .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.commit.3stap000066400000000000000000000035721414446751200276400ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.commit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.commit \- NFS server performing a commit operation for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.commit .fi .SH "VALUES" .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.create.3stap000066400000000000000000000035141414446751200276070ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.create \- NFS server creating a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.create .fi .SH "VALUES" .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.lookup.3stap000066400000000000000000000035561414446751200276630ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.lookup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.lookup \- NFS server opening or searching for a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.lookup .fi .SH "VALUES" .PP \fIfh\fR .RS 4 file handle of parent dir (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.read.3stap000066400000000000000000000037561414446751200272670ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.read \- NFS server reading file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.read .fi .SH "VALUES" .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.remove.3stap000066400000000000000000000035141414446751200276410ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.remove .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.remove \- NFS server removing a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.remove .fi .SH "VALUES" .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIfilelen\fR .RS 4 length of file name .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIfilename\fR .RS 4 file name .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.rename.3stap000066400000000000000000000035421414446751200276140ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.rename \- NFS Server renaming a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.rename .fi .SH "VALUES" .PP \fIfilename\fR .RS 4 old file name .RE .PP \fItlen\fR .RS 4 length of new file name .RE .PP \fItname\fR .RS 4 new file name .RE .PP \fItfh\fR .RS 4 file handler of new path .RE .PP \fIfh\fR .RS 4 file handler of old path .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIflen\fR .RS 4 length of old file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.proc.write.3stap000066400000000000000000000040421414446751200274730ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.proc.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.PROC\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.proc.write \- NFS server writing data to file for client .SH "SYNOPSIS" .sp .nf nfsd\&.proc\&.write .fi .SH "VALUES" .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIuid\fR .RS 4 requester\*(Aqs user id .RE .PP \fIversion\fR .RS 4 nfs version .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIgid\fR .RS 4 requester\*(Aqs group id .RE .PP \fIcount\fR .RS 4 read bytes .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIproto\fR .RS 4 transfer protocol .RE .PP \fIstable\fR .RS 4 argp\->stable .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.read.3stap000066400000000000000000000036031414446751200263140ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.read \- NFS server reading data from a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.read .fi .SH "VALUES" .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.rename.3stap000066400000000000000000000033601414446751200266500ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.rename .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.RENAME" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.rename \- NFS server renaming a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.rename .fi .SH "VALUES" .PP \fItlen\fR .RS 4 length of new file name .RE .PP \fIfilename\fR .RS 4 old file name .RE .PP \fIfh\fR .RS 4 file handler of old path .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fItfh\fR .RS 4 file handler of new path .RE .PP \fItname\fR .RS 4 new file name .RE .PP \fIflen\fR .RS 4 length of old file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.unlink.3stap000066400000000000000000000033121414446751200266760ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.unlink .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.UNLINK" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.unlink \- NFS server removing a file or a directory for client .SH "SYNOPSIS" .sp .nf nfsd\&.unlink .fi .SH "VALUES" .PP \fIfilelen\fR .RS 4 the length of file name .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fItype\fR .RS 4 file type (file or dir) .RE .PP \fIfilename\fR .RS 4 file name .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::nfsd.write.3stap000066400000000000000000000036051414446751200265350ustar00rootroot00000000000000'\" t .\" Title: probe::nfsd.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Network File Storage Tapsets .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::NFSD\&.WRITE" "3stap" "November 2021" "SystemTap Tapset Reference" "Network File Storage Tapsets" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::nfsd.write \- NFS server writing data to a file for client .SH "SYNOPSIS" .sp .nf nfsd\&.write .fi .SH "VALUES" .PP \fIfile\fR .RS 4 argument file, indicates if the file has been opened\&. .RE .PP \fIoffset\fR .RS 4 the offset of file .RE .PP \fIvlen\fR .RS 4 read blocks .RE .PP \fIfh\fR .RS 4 file handle (the first part is the length of the file handle) .RE .PP \fIsize\fR .RS 4 read bytes .RE .PP \fIclient_ip\fR .RS 4 the ip address of client .RE .PP \fIvec\fR .RS 4 struct kvec, includes buf address in kernel address and length of each buffer .RE .PP \fIcount\fR .RS 4 read bytes .RE .SH SEE ALSO\n .IR tapset::nfsd (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.balance.3stap000066400000000000000000000030061414446751200300070ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.balance .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.B" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.balance \- A cpu attempting to find more work\&. .SH "SYNOPSIS" .sp .nf scheduler\&.balance .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The cpu looking for more work\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_off.3stap000066400000000000000000000033401414446751200300440ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_off .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.cpu_off \- Process is about to stop running on a cpu .SH "SYNOPSIS" .sp .nf scheduler\&.cpu_off .fi .SH "VALUES" .PP \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .PP \fItask_prev\fR .RS 4 the process leaving the cpu (same as current) .RE .PP \fItask_next\fR .RS 4 the process replacing current .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process leaving the cpu\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.cpu_on.3stap000066400000000000000000000032411414446751200277060ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.cpu_on .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.cpu_on \- Process is beginning execution on a cpu .SH "SYNOPSIS" .sp .nf scheduler\&.cpu_on .fi .SH "VALUES" .PP \fIidle\fR .RS 4 \- boolean indicating whether current is the idle process .RE .PP \fItask_prev\fR .RS 4 the process that was previously running on this cpu .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The resuming process\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.ctxswitch.3stap000066400000000000000000000043041414446751200304440ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.ctxswitch .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.C" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.ctxswitch \- A context switch is occuring\&. .SH "SYNOPSIS" .sp .nf scheduler\&.ctxswitch .fi .SH "VALUES" .PP \fIprev_tid\fR .RS 4 The TID of the process to be switched out .RE .PP \fIprev_pid\fR .RS 4 The PID of the process to be switched out .RE .PP \fInexttsk_state\fR .RS 4 the state of the process to be switched in .RE .PP \fInext_priority\fR .RS 4 The priority of the process to be switched in .RE .PP \fInext_task_name\fR .RS 4 The name of the process to be switched in .RE .PP \fInext_tid\fR .RS 4 The TID of the process to be switched in .RE .PP \fInext_pid\fR .RS 4 The PID of the process to be switched in .RE .PP \fIprev_priority\fR .RS 4 The priority of the process to be switched out .RE .PP \fIprev_task_name\fR .RS 4 The name of the process to be switched out .RE .PP \fIprevtsk_state\fR .RS 4 the state of the process to be switched out .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.3stap000066400000000000000000000030711414446751200311130ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.kthread_stop \- A thread created by kthread_create is being stopped .SH "SYNOPSIS" .sp .nf scheduler\&.kthread_stop .fi .SH "VALUES" .PP \fIthread_priority\fR .RS 4 priority of the thread .RE .PP \fIthread_pid\fR .RS 4 PID of the thread being stopped .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.kthread_stop.return.3stap000066400000000000000000000031121414446751200324250ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.kthread_stop.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.K" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.kthread_stop.return \- A kthread is stopped and gets the return value .SH "SYNOPSIS" .sp .nf scheduler\&.kthread_stop\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIreturn_value\fR .RS 4 return value after stopping the thread .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.migrate.3stap000066400000000000000000000033311414446751200300530ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.migrate .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.M" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.migrate \- Task migrating across cpus .SH "SYNOPSIS" .sp .nf scheduler\&.migrate .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask\fR .RS 4 the process that is being migrated .RE .PP \fIcpu_from\fR .RS 4 the original cpu .RE .PP \fIpriority\fR .RS 4 priority of the task being migrated .RE .PP \fIpid\fR .RS 4 PID of the task being migrated .RE .PP \fIcpu_to\fR .RS 4 the destination cpu .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_exit.3stap000066400000000000000000000030741414446751200311360ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_exit \- Process exiting .SH "SYNOPSIS" .sp .nf scheduler\&.process_exit .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIpriority\fR .RS 4 priority of the process exiting .RE .PP \fIpid\fR .RS 4 PID of the process exiting .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_fork.3stap000066400000000000000000000030731414446751200311250ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_fork .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_fork \- Process forked .SH "SYNOPSIS" .sp .nf scheduler\&.process_fork .fi .SH "VALUES" .PP \fIparent_pid\fR .RS 4 PID of the parent process .RE .PP \fIchild_pid\fR .RS 4 PID of the child process .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_free.3stap000066400000000000000000000031511414446751200311020ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_free \- Scheduler freeing a data structure for a process .SH "SYNOPSIS" .sp .nf scheduler\&.process_free .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIpid\fR .RS 4 PID of the process getting freed .RE .PP \fIpriority\fR .RS 4 priority of the process getting freed .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.process_wait.3stap000066400000000000000000000030471414446751200311310ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.process_wait .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.P" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.process_wait \- Scheduler starting to wait on a process .SH "SYNOPSIS" .sp .nf scheduler\&.process_wait .fi .SH "VALUES" .PP \fIpid\fR .RS 4 PID of the process scheduler is waiting on .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.signal_send.3stap000066400000000000000000000030641414446751200307140ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.signal_send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.S" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.signal_send \- Sending a signal .SH "SYNOPSIS" .sp .nf scheduler\&.signal_send .fi .SH "VALUES" .PP \fIpid\fR .RS 4 pid of the process sending signal .RE .PP \fIsignal_number\fR .RS 4 signal number .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.tick.3stap000066400000000000000000000031741414446751200273620ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.tick .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.T" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.tick \- Schedulers internal tick, a processes timeslice accounting is updated .SH "SYNOPSIS" .sp .nf scheduler\&.tick .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIidle\fR .RS 4 boolean indicating whether current is the idle process .RE .SH "CONTEXT" .PP The process whose accounting will be updated\&. .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wait_task.3stap000066400000000000000000000031451414446751200304140ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wait_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wait_task \- Waiting on a task to unschedule (become inactive) .SH "SYNOPSIS" .sp .nf scheduler\&.wait_task .fi .SH "VALUES" .PP \fItask_pid\fR .RS 4 PID of the task the scheduler is waiting on .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_priority\fR .RS 4 priority of the task .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup.3stap000066400000000000000000000033651414446751200277260ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wakeup \- Task is woken up .SH "SYNOPSIS" .sp .nf scheduler\&.wakeup .fi .SH "VALUES" .PP \fItask_priority\fR .RS 4 priority of the task being woken up .RE .PP \fItask_state\fR .RS 4 state of the task being woken up .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_cpu\fR .RS 4 cpu of the task being woken up .RE .PP \fItask_tid\fR .RS 4 tid of the task being woken up .RE .PP \fItask_pid\fR .RS 4 PID of the task being woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scheduler.wakeup_new.3stap000066400000000000000000000034071414446751200305740ustar00rootroot00000000000000'\" t .\" Title: probe::scheduler.wakeup_new .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Scheduler Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCHEDULER\&.W" "3stap" "November 2021" "SystemTap Tapset Reference" "Scheduler Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scheduler.wakeup_new \- Newly created task is woken up for the first time .SH "SYNOPSIS" .sp .nf scheduler\&.wakeup_new .fi .SH "VALUES" .PP \fItask_pid\fR .RS 4 PID of the new task woken up .RE .PP \fItask_tid\fR .RS 4 TID of the new task woken up .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fItask_priority\fR .RS 4 priority of the new task .RE .PP \fItask_state\fR .RS 4 state of the task woken up .RE .PP \fItask_cpu\fR .RS 4 cpu of the task woken up .RE .SH SEE ALSO\n .IR tapset::scheduler (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iocompleted.3stap000066400000000000000000000040521414446751200277130ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iocompleted .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOCOMP" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iocompleted \- SCSI mid\-layer running the completion processing for block device I/O requests .SH "SYNOPSIS" .sp .nf scsi\&.iocompleted .fi .SH "VALUES" .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device .RE .PP \fIgoodbytes\fR .RS 4 The bytes completed .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodispatching.3stap000066400000000000000000000042511414446751200302350ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodispatching .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODISP" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iodispatching \- SCSI mid\-layer dispatched low\-level SCSI command .SH "SYNOPSIS" .sp .nf scsi\&.iodispatching .fi .SH "VALUES" .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device 0 (DMA_BIDIRECTIONAL), 1 (DMA_TO_DEVICE), 2 (DMA_FROM_DEVICE), 3 (DMA_NONE) .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIrequest_bufflen\fR .RS 4 The request buffer length .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIrequest_buffer\fR .RS 4 The request buffer address .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.iodone.3stap000066400000000000000000000040721414446751200266660ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.iodone .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IODONE" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.iodone \- SCSI command completed by low level driver and enqueued into the done queue\&. .SH "SYNOPSIS" .sp .nf scsi\&.iodone .fi .SH "VALUES" .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIscsi_timer_pending\fR .RS 4 1 if a timer is pending on this request .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .RE .PP \fIhost_no\fR .RS 4 The host number .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioentry.3stap000066400000000000000000000034111414446751200270760ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioentry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOENTR" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.ioentry \- Prepares a SCSI mid\-layer request .SH "SYNOPSIS" .sp .nf scsi\&.ioentry .fi .SH "VALUES" .PP \fIdisk_major\fR .RS 4 The major number of the disk (\-1 if no information) .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIdisk_minor\fR .RS 4 The minor number of the disk (\-1 if no information) .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIreq_addr\fR .RS 4 The current struct request pointer, as a number .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.ioexecute.3stap000066400000000000000000000042001414446751200273740ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.ioexecute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.IOEXEC" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.ioexecute \- Create mid\-layer SCSI request and wait for the result .SH "SYNOPSIS" .sp .nf scsi\&.ioexecute .fi .SH "VALUES" .PP \fIdata_direction\fR .RS 4 The data_direction specifies whether this command is from/to the device\&. .RE .PP \fItimeout\fR .RS 4 Request timeout in seconds .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIdevice_state\fR .RS 4 The current state of the device .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIdata_direction_str\fR .RS 4 Data direction, as a string .RE .PP \fIrequest_buffer\fR .RS 4 The data buffer address .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIdevice_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIrequest_bufflen\fR .RS 4 The data buffer buffer length .RE .PP \fIretries\fR .RS 4 Number of times to retry request .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::scsi.set_state.3stap000066400000000000000000000034751414446751200274120ustar00rootroot00000000000000'\" t .\" Title: probe::scsi.set_state .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SCSI Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SCSI\&.SET_ST" "3stap" "November 2021" "SystemTap Tapset Reference" "SCSI Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::scsi.set_state \- Order SCSI device state change .SH "SYNOPSIS" .sp .nf scsi\&.set_state .fi .SH "VALUES" .PP \fIold_state_str\fR .RS 4 The current state of the device, as a string .RE .PP \fIchannel\fR .RS 4 The channel number .RE .PP \fIold_state\fR .RS 4 The current state of the device .RE .PP \fIdev_id\fR .RS 4 The scsi device id .RE .PP \fIhost_no\fR .RS 4 The host number .RE .PP \fIstate_str\fR .RS 4 The new state of the device, as a string .RE .PP \fIlun\fR .RS 4 The lun number .RE .PP \fIstate\fR .RS 4 The new state of the device .RE .SH SEE ALSO\n .IR tapset::scsi (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.3stap000066400000000000000000000032401414446751200305050ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.check_ignored \- Checking to see signal is ignored .SH "SYNOPSIS" .sp .nf signal\&.check_ignored .fi .SH "VALUES" .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.check_ignored.return.3stap000066400000000000000000000030411414446751200320220ustar00rootroot00000000000000'\" t .\" Title: probe::signal.check_ignored.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.check_ignored.return \- Check to see signal is ignored completed .SH "SYNOPSIS" .sp .nf signal\&.check_ignored\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.3stap000066400000000000000000000035761414446751200276760ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.checkperm \- Check being performed on a sent signal .SH "SYNOPSIS" .sp .nf signal\&.checkperm .fi .SH "VALUES" .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIsi_code\fR .RS 4 Indicates the signal type .RE .PP \fIsinfo\fR .RS 4 The address of the siginfo structure .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.checkperm.return.3stap000066400000000000000000000030271414446751200312030ustar00rootroot00000000000000'\" t .\" Title: probe::signal.checkperm.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.CHEC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.checkperm.return \- Check performed on a sent signal completed .SH "SYNOPSIS" .sp .nf signal\&.checkperm\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.3stap000066400000000000000000000036011414446751200276610ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.do_action \- Examining or changing a signal action .SH "SYNOPSIS" .sp .nf signal\&.do_action .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsigact_addr\fR .RS 4 The address of the new sigaction struct associated with the signal .RE .PP \fIsa_mask\fR .RS 4 The new mask of the signal .RE .PP \fIoldsigact_addr\fR .RS 4 The address of the old sigaction struct associated with the signal .RE .PP \fIsig\fR .RS 4 The signal to be examined/changed .RE .PP \fIsa_handler\fR .RS 4 The new handler of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.do_action.return.3stap000066400000000000000000000030341414446751200311770ustar00rootroot00000000000000'\" t .\" Title: probe::signal.do_action.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.DO_A" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.do_action.return \- Examining or changing a signal action completed .SH "SYNOPSIS" .sp .nf signal\&.do_action\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.flush.3stap000066400000000000000000000033171414446751200270470ustar00rootroot00000000000000'\" t .\" Title: probe::signal.flush .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FLUS" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.flush \- Flushing all pending signals for a task .SH "SYNOPSIS" .sp .nf signal\&.flush .fi .SH "VALUES" .PP \fIpid_name\fR .RS 4 The name of the process associated with the task performing the flush .RE .PP \fItask\fR .RS 4 The task handler of the process performing the flush .RE .PP \fIsig_pid\fR .RS 4 The PID of the process associated with the task performing the flush .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.3stap000066400000000000000000000032761414446751200300540ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.force_segv \- Forcing send of SIGSEGV .SH "SYNOPSIS" .sp .nf signal\&.force_segv .fi .SH "VALUES" .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIpid_name\fR .RS 4 Name of the process receiving the signal .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.force_segv.return.3stap000066400000000000000000000030201414446751200313550ustar00rootroot00000000000000'\" t .\" Title: probe::signal.force_segv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.FORC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.force_segv.return \- Forcing send of SIGSEGV complete .SH "SYNOPSIS" .sp .nf signal\&.force_segv\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 Return value as a string .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.3stap000066400000000000000000000041301414446751200271530ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.handle \- Signal handler being invoked .SH "SYNOPSIS" .sp .nf signal\&.handle .fi .SH "VALUES" .PP \fIka_addr\fR .RS 4 The address of the k_sigaction table associated with the signal .RE .PP \fIsinfo\fR .RS 4 The address of the siginfo table .RE .PP \fIregs\fR .RS 4 The address of the kernel\-mode stack area (deprecated in SystemTap 2\&.1) .RE .PP \fIsig\fR .RS 4 The signal number that invoked the signal handler .RE .PP \fIsig_code\fR .RS 4 The si_code value of the siginfo signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_mode\fR .RS 4 Indicates whether the signal was a user\-mode or kernel\-mode signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIoldset_addr\fR .RS 4 The address of the bitmask array of blocked signals (deprecated in SystemTap 2\&.1) .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.handle.return.3stap000066400000000000000000000030751414446751200305000ustar00rootroot00000000000000'\" t .\" Title: probe::signal.handle.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.HAND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.handle.return \- Signal handler invocation completed .SH "SYNOPSIS" .sp .nf signal\&.handle\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH "DESCRIPTION" .PP (deprecated in SystemTap 2\&.1) .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.3stap000066400000000000000000000034141414446751200273500ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.pending \- Examining pending signal .SH "SYNOPSIS" .sp .nf signal\&.pending .fi .SH "VALUES" .PP \fIsigset_add\fR .RS 4 The address of the user\-space signal set (sigset_t) .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsigset_size\fR .RS 4 The size of the user\-space signal set .RE .SH "DESCRIPTION" .PP This probe is used to examine a set of signals pending for delivery to a specific thread\&. This normally occurs when the do_sigpending kernel function is executed\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.pending.return.3stap000066400000000000000000000030161414446751200306640ustar00rootroot00000000000000'\" t .\" Title: probe::signal.pending.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.pending.return \- Examination of pending signal completed .SH "SYNOPSIS" .sp .nf signal\&.pending\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.3stap000066400000000000000000000036231414446751200275450ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.procmask \- Examining or changing blocked signals .SH "SYNOPSIS" .sp .nf signal\&.procmask .fi .SH "VALUES" .PP \fIsigset\fR .RS 4 The actual value to be set for sigset_t (correct?) .RE .PP \fIsigset_addr\fR .RS 4 The address of the signal set (sigset_t) to be implemented .RE .PP \fIoldsigset_addr\fR .RS 4 The old address of the signal set (sigset_t) .RE .PP \fIhow\fR .RS 4 Indicates how to change the blocked signals; possible values are SIG_BLOCK=0 (for blocking signals), SIG_UNBLOCK=1 (for unblocking signals), and SIG_SETMASK=2 for setting the signal mask\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.procmask.return.3stap000066400000000000000000000030311414446751200310540ustar00rootroot00000000000000'\" t .\" Title: probe::signal.procmask.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.PROC" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.procmask.return \- Examining or changing blocked signals completed .SH "SYNOPSIS" .sp .nf signal\&.procmask\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.3stap000066400000000000000000000041641414446751200266600ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send \- Signal being sent to a process .SH "SYNOPSIS" .sp .nf signal\&.send .fi .SH "VALUES" .PP \fIshared\fR .RS 4 Indicates whether the signal is shared by the thread group .RE .PP \fIsi_code\fR .RS 4 Indicates the signal type .RE .PP \fIsend2queue\fR .RS 4 Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2\&.1) .RE .PP \fIsig\fR .RS 4 The number of the signal .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fIsinfo\fR .RS 4 The address of siginfo struct .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIname\fR .RS 4 The name of the function used to send out the signal .RE .SH "CONTEXT" .PP The signal\*(Aqs sender\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.send.return.3stap000066400000000000000000000056031414446751200301750ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send.return \- Signal being sent to a process completed (deprecated in SystemTap 2\&.1) .SH "SYNOPSIS" .sp .nf signal\&.send\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, specific_send_sig_info, or send_sigqueue .RE .PP \fIname\fR .RS 4 The name of the function used to send out the signal .RE .PP \fIsend2queue\fR .RS 4 Indicates whether the sent signal was sent to an existing sigqueue .RE .PP \fIshared\fR .RS 4 Indicates whether the sent signal is shared by the thread group\&. .RE .SH "CONTEXT" .PP The signal\*(Aqs sender\&. (correct?) .SH "DESCRIPTION" .PP Possible __group_send_sig_info and specific_send_sig_info return values are as follows; .PP 0 \-\- The signal is successfully sent to a process, which means that, (1) the signal was ignored by the receiving process, (2) this is a non\-RT signal and the system already has one queued, and (3) the signal was successfully added to the sigqueue of the receiving process\&. .PP \-EAGAIN \-\- The sigqueue of the receiving process is overflowing, the signal was RT, and the signal was sent by a user using something other than \fBkill\fR\&. .PP Possible send_group_sigqueue and send_sigqueue return values are as follows; .PP 0 \-\- The signal was either successfully added into the sigqueue of the receiving process, or a SI_TIMER entry is already queued (in which case, the overrun count will be simply incremented)\&. .PP 1 \-\- The signal was ignored by the receiving process\&. .PP \-1 \-\- (send_sigqueue only) The task was marked exiting, allowing * posix_timer_event to redirect it to the group leader\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.3stap000066400000000000000000000034351414446751200307260ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send_sig_queue \- Queuing a signal to a process .SH "SYNOPSIS" .sp .nf signal\&.send_sig_queue .fi .SH "VALUES" .PP \fIpid_name\fR .RS 4 Name of the process to which the signal is queued .RE .PP \fIsig\fR .RS 4 The queued signal .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsigqueue_addr\fR .RS 4 The address of the signal queue .RE .PP \fIsig_pid\fR .RS 4 The PID of the process to which the signal is queued .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.send_sig_queue.return.3stap000066400000000000000000000030431414446751200322370ustar00rootroot00000000000000'\" t .\" Title: probe::signal.send_sig_queue.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.send_sig_queue.return \- Queuing a signal to a process completed .SH "SYNOPSIS" .sp .nf signal\&.send_sig_queue\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIretstr\fR .RS 4 Return value as a string .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.3stap000066400000000000000000000040641414446751200301120ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tgkill \- Sending kill signal to a thread group .SH "SYNOPSIS" .sp .nf signal\&.sys_tgkill .fi .SH "VALUES" .PP \fIsig\fR .RS 4 The specific kill signal sent to the process .RE .PP \fItgid\fR .RS 4 The thread group ID of the thread receiving the kill signal .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fIsig_pid\fR .RS 4 The PID of the thread receiving the kill signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .SH "DESCRIPTION" .PP The tgkill call is similar to tkill, except that it also allows the caller to specify the thread group ID of the thread to be signalled\&. This protects against TID reuse\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tgkill.return.3stap000066400000000000000000000030701414446751200314240ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tgkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tgkill.return \- Sending kill signal to a thread group completed .SH "SYNOPSIS" .sp .nf signal\&.sys_tgkill\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.sys_tkill.3stap000066400000000000000000000037511414446751200277450ustar00rootroot00000000000000'\" t .\" Title: probe::signal.sys_tkill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYS_" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.sys_tkill \- Sending a kill signal to a thread .SH "SYNOPSIS" .sp .nf signal\&.sys_tkill .fi .SH "VALUES" .PP \fIsig\fR .RS 4 The specific signal sent to the process .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the kill signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH "DESCRIPTION" .PP The tkill call is analogous to kill(2), except that it also allows a process within a specific thread group to be targeted\&. Such processes are targeted through their unique thread IDs (TID)\&. .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.3stap000066400000000000000000000034041414446751200274150ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.syskill \- Sending kill signal to a process .SH "SYNOPSIS" .sp .nf signal\&.syskill .fi .SH "VALUES" .PP \fItask\fR .RS 4 A task handle to the signal recipient .RE .PP \fIsig_name\fR .RS 4 A string representation of the signal .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsig_pid\fR .RS 4 The PID of the process receiving the signal .RE .PP \fIsig\fR .RS 4 The specific signal sent to the process .RE .PP \fIpid_name\fR .RS 4 The name of the signal recipient .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.syskill.return.3stap000066400000000000000000000026501414446751200307350ustar00rootroot00000000000000'\" t .\" Title: probe::signal.syskill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYSK" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.syskill.return \- Sending kill signal completed .SH "SYNOPSIS" .sp .nf signal\&.syskill\&.return .fi .SH "VALUES" .PP None .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.systkill.return.3stap000066400000000000000000000030541414446751200311200ustar00rootroot00000000000000'\" t .\" Title: probe::signal.systkill.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.SYST" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.systkill.return \- Sending kill signal to a thread completed .SH "SYNOPSIS" .sp .nf signal\&.systkill\&.return .fi .SH "VALUES" .PP \fIretstr\fR .RS 4 The return value to either __group_send_sig_info, .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::signal.wakeup.3stap000066400000000000000000000034621414446751200272230ustar00rootroot00000000000000'\" t .\" Title: probe::signal.wakeup .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Signal Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SIGNAL\&.WAKE" "3stap" "November 2021" "SystemTap Tapset Reference" "Signal Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::signal.wakeup \- Sleeping process being wakened for signal .SH "SYNOPSIS" .sp .nf signal\&.wakeup .fi .SH "VALUES" .PP \fIsig_pid\fR .RS 4 The PID of the process to wake .RE .PP \fIresume\fR .RS 4 Indicates whether to wake up a task in a STOPPED or TRACED state .RE .PP \fIstate_mask\fR .RS 4 A string representation indicating the mask of task states to wake\&. Possible values are TASK_INTERRUPTIBLE, TASK_STOPPED, TASK_TRACED, TASK_WAKEKILL, and TASK_INTERRUPTIBLE\&. .RE .PP \fIpid_name\fR .RS 4 Name of the process to wake .RE .SH SEE ALSO\n .IR tapset::signal (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.3stap000066400000000000000000000035561414446751200275110ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_read \- Receiving message via \fBsock_aio_read\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_read .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_aio_read\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_read.return.3stap000066400000000000000000000040111414446751200310120ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_read.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_read.return \- Conclusion of message received via \fBsock_aio_read\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_read\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_aio_read\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.3stap000066400000000000000000000035541414446751200277260ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_write \- Message send via \fBsock_aio_write\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_write .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fItype\fR .RS 4 Socket type value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_aio_write\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.aio_write.return.3stap000066400000000000000000000040101414446751200312300ustar00rootroot00000000000000'\" t .\" Title: probe::socket.aio_write.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.AIO_" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.aio_write.return \- Conclusion of message send via \fBsock_aio_write\fR .SH "SYNOPSIS" .sp .nf socket\&.aio_write\&.return .fi .SH "VALUES" .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_aio_write\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.3stap000066400000000000000000000033761414446751200270530ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.close \- Close a socket .SH "SYNOPSIS" .sp .nf socket\&.close .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the beginning of closing a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.close.return.3stap000066400000000000000000000031021414446751200303540ustar00rootroot00000000000000'\" t .\" Title: probe::socket.close.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CLOS" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.close.return \- Return from closing a socket .SH "SYNOPSIS" .sp .nf socket\&.close\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the conclusion of closing a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.3stap000066400000000000000000000034131414446751200272010ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.create \- Creation of a socket .SH "SYNOPSIS" .sp .nf socket\&.create .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The requester (see requester variable) .SH "DESCRIPTION" .PP Fires at the beginning of creating a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.create.return.3stap000066400000000000000000000036601414446751200305230ustar00rootroot00000000000000'\" t .\" Title: probe::socket.create.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.CREA" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.create.return \- Return from Creation of a socket .SH "SYNOPSIS" .sp .nf socket\&.create\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was socket creation successful? (1 = yes, 0 = no) .RE .PP \fIerr\fR .RS 4 Error code if success == 0 .RE .PP \fIrequester\fR .RS 4 Requested by user process or the kernel (1 = kernel, 0 = user) .RE .SH "CONTEXT" .PP The requester (user process or kernel) .SH "DESCRIPTION" .PP Fires at the conclusion of creating a socket\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.3stap000066400000000000000000000035631414446751200277020ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.read_iter \- Receiving message via \fBsock_read_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.read_iter .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_read_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.read_iter.return.3stap000066400000000000000000000040161414446751200312120ustar00rootroot00000000000000'\" t .\" Title: probe::socket.read_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.read_iter.return \- Conclusion of message received via \fBsock_read_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.read_iter\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_read_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.3stap000066400000000000000000000035411414446751200270410ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.readv \- Receiving a message via \fBsock_readv\fR .SH "SYNOPSIS" .sp .nf socket\&.readv .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.readv.return.3stap000066400000000000000000000037751414446751200303700ustar00rootroot00000000000000'\" t .\" Title: probe::socket.readv.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.readv.return \- Conclusion of receiving a message via \fBsock_readv\fR .SH "SYNOPSIS" .sp .nf socket\&.readv\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_readv\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.receive.3stap000066400000000000000000000035341414446751200273640ustar00rootroot00000000000000'\" t .\" Title: probe::socket.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECE" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.receive \- Message received on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.receive .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message receiver .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.3stap000066400000000000000000000035461414446751200274130ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.recvmsg \- Message being received on socket .SH "SYNOPSIS" .sp .nf socket\&.recvmsg .fi .SH "VALUES" .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the beginning of receiving a message on a socket via the \fBsock_recvmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.recvmsg.return.3stap000066400000000000000000000037761414446751200307360ustar00rootroot00000000000000'\" t .\" Title: probe::socket.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.RECV" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.recvmsg.return \- Return from Message being received on socket .SH "SYNOPSIS" .sp .nf socket\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of receiving a message on a socket via the \fBsock_recvmsg\fR function\&. .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.send.3stap000066400000000000000000000035111414446751200266660ustar00rootroot00000000000000'\" t .\" Title: probe::socket.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.send \- Message sent on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.send .fi .SH "VALUES" .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.3stap000066400000000000000000000035551414446751200274050ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.sendmsg \- Message is currently being sent on a socket\&. .SH "SYNOPSIS" .sp .nf socket\&.sendmsg .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_sendmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.sendmsg.return.3stap000066400000000000000000000037431414446751200307220ustar00rootroot00000000000000'\" t .\" Title: probe::socket.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.SEND" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.sendmsg.return \- Return from socket\&.sendmsg\&. .SH "SYNOPSIS" .sp .nf socket\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .SH "CONTEXT" .PP The message sender\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_sendmsg\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.3stap000066400000000000000000000035611414446751200301170ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.write_iter \- Message send via \fBsock_write_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.write_iter .fi .SH "VALUES" .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_write_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.write_iter.return.3stap000066400000000000000000000040151414446751200314300ustar00rootroot00000000000000'\" t .\" Title: probe::socket.write_iter.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.write_iter.return \- Conclusion of message send via \fBsock_write_iter\fR .SH "SYNOPSIS" .sp .nf socket\&.write_iter\&.return .fi .SH "VALUES" .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIsize\fR .RS 4 Size of message received (in bytes) or error code if success = 0 .RE .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIsuccess\fR .RS 4 Was receive successful? (1 = yes, 0 = no) .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_write_iter\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.3stap000066400000000000000000000035371414446751200272650ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.writev \- Message sent via \fBsocket_writev\fR .SH "SYNOPSIS" .sp .nf socket\&.writev .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Message size in bytes .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .SH "CONTEXT" .PP The message sender .SH "DESCRIPTION" .PP Fires at the beginning of sending a message on a socket via the \fBsock_writev\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::socket.writev.return.3stap000066400000000000000000000037641414446751200306050ustar00rootroot00000000000000'\" t .\" Title: probe::socket.writev.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Socket Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOCKET\&.WRIT" "3stap" "November 2021" "SystemTap Tapset Reference" "Socket Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::socket.writev.return \- Conclusion of message sent via \fBsocket_writev\fR .SH "SYNOPSIS" .sp .nf socket\&.writev\&.return .fi .SH "VALUES" .PP \fIprotocol\fR .RS 4 Protocol value .RE .PP \fIsize\fR .RS 4 Size of message sent (in bytes) or error code if success = 0 .RE .PP \fItype\fR .RS 4 Socket type value .RE .PP \fIflags\fR .RS 4 Socket flags value .RE .PP \fIstate\fR .RS 4 Socket state value .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 Protocol family value .RE .PP \fIsuccess\fR .RS 4 Was send successful? (1 = yes, 0 = no) .RE .SH "CONTEXT" .PP The message receiver\&. .SH "DESCRIPTION" .PP Fires at the conclusion of sending a message on a socket via the \fBsock_writev\fR function .SH SEE ALSO\n .IR tapset::socket (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::softirq.entry.3stap000066400000000000000000000032561414446751200273030ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.entry .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.ENT" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::softirq.entry \- Execution of handler for a pending softirq starting .SH "SYNOPSIS" .sp .nf softirq\&.entry .fi .SH "VALUES" .PP \fIvec\fR .RS 4 softirq_action vector .RE .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .PP \fIh\fR .RS 4 struct softirq_action* for current pending softirq .RE .PP \fIaction\fR .RS 4 pointer to softirq handler just about to execute .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::softirq.exit.3stap000066400000000000000000000032611414446751200271070ustar00rootroot00000000000000'\" t .\" Title: probe::softirq.exit .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SOFTIRQ\&.EXI" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::softirq.exit \- Execution of handler for a pending softirq completed .SH "SYNOPSIS" .sp .nf softirq\&.exit .fi .SH "VALUES" .PP \fIaction\fR .RS 4 pointer to softirq handler that just finished execution .RE .PP \fIh\fR .RS 4 struct softirq_action* for just executed softirq .RE .PP \fIvec_nr\fR .RS 4 softirq vector number .RE .PP \fIvec\fR .RS 4 softirq_action vector .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_mod.3stap000066400000000000000000000034031414446751200301260ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_mod .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_mod \- Adding kernel instrumentation module to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_mod .fi .SH "VALUES" .PP \fIsource_path\fR .RS 4 the path the \&.ko file is coming from (incl filename) .RE .PP \fIdest_path\fR .RS 4 the path the \&.ko file is going to (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: if moving fails, cache_add_src and cache_add_nss will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_nss.3stap000066400000000000000000000034651414446751200301620ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_nss .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_nss \- Add NSS (Network Security Services) information to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_nss .fi .SH "VALUES" .PP \fIsource_path\fR .RS 4 the path the \&.sgn file is coming from (incl filename) .RE .PP \fIdest_path\fR .RS 4 the path the \&.sgn file is coming from (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: stap must compiled with NSS support; if moving the kernel module fails, this probe will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_add_src.3stap000066400000000000000000000033631414446751200301430ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_add_src .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_add_src \- Adding C code translation to cache .SH "SYNOPSIS" .sp .nf stap\&.cache_add_src .fi .SH "VALUES" .PP \fIdest_path\fR .RS 4 the path the \&.c file is going to (incl filename) .RE .PP \fIsource_path\fR .RS 4 the path the \&.c file is coming from (incl filename) .RE .SH "DESCRIPTION" .PP Fires just before the file is actually moved\&. Note: if moving the kernel module fails, this probe will not fire\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_clean.3stap000066400000000000000000000031221414446751200276170ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_clean .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_clean \- Removing file from stap cache .SH "SYNOPSIS" .sp .nf stap\&.cache_clean .fi .SH "VALUES" .PP \fIpath\fR .RS 4 the path to the \&.ko/\&.c file being removed .RE .SH "DESCRIPTION" .PP Fires just before the call to unlink the module/source file\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.cache_get.3stap000066400000000000000000000032401414446751200273150ustar00rootroot00000000000000'\" t .\" Title: probe::stap.cache_get .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.CACHE_" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.cache_get \- Found item in stap cache .SH "SYNOPSIS" .sp .nf stap\&.cache_get .fi .SH "VALUES" .PP \fImodule_path\fR .RS 4 the path of the \&.ko kernel module file .RE .PP \fIsource_path\fR .RS 4 the path of the \&.c source file .RE .SH "DESCRIPTION" .PP Fires just before the return of get_from_cache, when the cache grab is successful\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.3stap000066400000000000000000000031121414446751200264370ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass0 \- Starting stap pass0 (parsing command line arguments) .SH "SYNOPSIS" .sp .nf stap\&.pass0 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass0 fires after command line arguments have been parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass0.end.3stap000066400000000000000000000031431414446751200272100ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass0.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS0\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass0.end \- Finished stap pass0 (parsing command line arguments) .SH "SYNOPSIS" .sp .nf stap\&.pass0\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass0\&.end fires just before the \fBgettimeofday\fR call for pass1\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1.end.3stap000066400000000000000000000031271414446751200272130ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1.end \- Finished stap pass1 (parsing scripts) .SH "SYNOPSIS" .sp .nf stap\&.pass1\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1\&.end fires just before the jump to cleanup if s\&.last_pass = 1\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1a.3stap000066400000000000000000000031421414446751200266040ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1a .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1A" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1a \- Starting stap pass1 (parsing user script) .SH "SYNOPSIS" .sp .nf stap\&.pass1a .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1a fires just after the call to \fBgettimeofday\fR, before the user script is parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass1b.3stap000066400000000000000000000031051414446751200266040ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass1b .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS1B" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass1b \- Starting stap pass1 (parsing library scripts) .SH "SYNOPSIS" .sp .nf stap\&.pass1b .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass1b fires just before the library scripts are parsed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.3stap000066400000000000000000000031321414446751200264430ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass2 \- Starting stap pass2 (elaboration) .SH "SYNOPSIS" .sp .nf stap\&.pass2 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass2 fires just after the call to \fBgettimeofday\fR, just before the call to semantic_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass2.end.3stap000066400000000000000000000031201414446751200272050ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass2.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS2\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass2.end \- Finished stap pass2 (elaboration) .SH "SYNOPSIS" .sp .nf stap\&.pass2\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass2\&.end fires just before the jump to cleanup if s\&.last_pass = 2 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.3stap000066400000000000000000000031401414446751200264430ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass3 \- Starting stap pass3 (translation to C) .SH "SYNOPSIS" .sp .nf stap\&.pass3 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass3 fires just after the call to \fBgettimeofday\fR, just before the call to translate_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass3.end.3stap000066400000000000000000000031251414446751200272130ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass3.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS3\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass3.end \- Finished stap pass3 (translation to C) .SH "SYNOPSIS" .sp .nf stap\&.pass3\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass3\&.end fires just before the jump to cleanup if s\&.last_pass = 3 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.3stap000066400000000000000000000031571414446751200264540ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass4 \- Starting stap pass4 (compile C code into kernel module) .SH "SYNOPSIS" .sp .nf stap\&.pass4 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass4 fires just after the call to \fBgettimeofday\fR, just before the call to compile_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass4.end.3stap000066400000000000000000000031461414446751200272170ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass4.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS4\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass4.end \- Finished stap pass4 (compile C code into kernel module) .SH "SYNOPSIS" .sp .nf stap\&.pass4\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass4\&.end fires just before the jump to cleanup if s\&.last_pass = 4 .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.3stap000066400000000000000000000031451414446751200264520ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass5 \- Starting stap pass5 (running the instrumentation) .SH "SYNOPSIS" .sp .nf stap\&.pass5 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass5 fires just after the call to \fBgettimeofday\fR, just before the call to run_pass\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass5.end.3stap000066400000000000000000000031111414446751200272100ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass5.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS5\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass5.end \- Finished stap pass5 (running the instrumentation) .SH "SYNOPSIS" .sp .nf stap\&.pass5\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass5\&.end fires just before the cleanup label .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.3stap000066400000000000000000000031111414446751200264440ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6 .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass6 \- Starting stap pass6 (cleanup) .SH "SYNOPSIS" .sp .nf stap\&.pass6 .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass6 fires just after the cleanup label, essentially the same spot as pass5\&.end .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.pass6.end.3stap000066400000000000000000000030701414446751200272150ustar00rootroot00000000000000'\" t .\" Title: probe::stap.pass6.end .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.PASS6\" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.pass6.end \- Finished stap pass6 (cleanup) .SH "SYNOPSIS" .sp .nf stap\&.pass6\&.end .fi .SH "VALUES" .PP \fIsession\fR .RS 4 the systemtap_session variable s .RE .SH "DESCRIPTION" .PP pass6\&.end fires just before main\*(Aqs return\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.3stap000066400000000000000000000031071414446751200267410ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system \- Starting a command from stap .SH "SYNOPSIS" .sp .nf stap\&.system .fi .SH "VALUES" .PP \fIcommand\fR .RS 4 the command string to be run by posix_spawn (as sh \-c ) .RE .SH "DESCRIPTION" .PP Fires at the entry of the stap_system command\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.return.3stap000066400000000000000000000032361414446751200302620ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system.return \- Finished a command from stap .SH "SYNOPSIS" .sp .nf stap\&.system\&.return .fi .SH "VALUES" .PP \fIret\fR .RS 4 a return code associated with running waitpid on the spawned process; a non\-zero value indicates error .RE .SH "DESCRIPTION" .PP Fires just before the return of the stap_system function, after waitpid\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stap.system.spawn.3stap000066400000000000000000000031511414446751200300670ustar00rootroot00000000000000'\" t .\" Title: probe::stap.system.spawn .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAP\&.SYSTEM" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stap.system.spawn \- stap spawned new process .SH "SYNOPSIS" .sp .nf stap\&.system\&.spawn .fi .SH "VALUES" .PP \fIpid\fR .RS 4 the pid of the spawned process .RE .PP \fIret\fR .RS 4 the return value from posix_spawn .RE .SH "DESCRIPTION" .PP Fires just after the call to posix_spawn\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::stapio.receive_control_message.3stap000066400000000000000000000034651414446751200326420ustar00rootroot00000000000000'\" t .\" Title: probe::stapio.receive_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPIO\&.RECE" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::stapio.receive_control_message \- Received a control message .SH "SYNOPSIS" .sp .nf stapio\&.receive_control_message .fi .SH "VALUES" .PP \fIdata\fR .RS 4 a ptr to a binary blob of data sent as the control message .RE .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .RE .PP \fIlen\fR .RS 4 the length (in bytes) of the data blob .RE .SH "DESCRIPTION" .PP Fires just after a message was receieved and before it\*(Aqs processed\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::staprun.insert_module.3stap000066400000000000000000000031621414446751200310140ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.insert_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.INS" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.insert_module \- Inserting SystemTap instrumentation module .SH "SYNOPSIS" .sp .nf staprun\&.insert_module .fi .SH "VALUES" .PP \fIpath\fR .RS 4 the full path to the \&.ko kernel module about to be inserted .RE .SH "DESCRIPTION" .PP Fires just before the call to insert the module\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::staprun.remove_module.3stap000066400000000000000000000031641414446751200310070ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.remove_module .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.REM" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.remove_module \- Removing SystemTap instrumentation module .SH "SYNOPSIS" .sp .nf staprun\&.remove_module .fi .SH "VALUES" .PP \fIname\fR .RS 4 the stap module name to be removed (without the \&.ko extension) .RE .SH "DESCRIPTION" .PP Fires just before the call to remove the module\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::staprun.send_control_message.3stap000066400000000000000000000034331414446751200323410ustar00rootroot00000000000000'\" t .\" Title: probe::staprun.send_control_message .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SystemTap Translator Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::STAPRUN\&.SEN" "3stap" "November 2021" "SystemTap Tapset Reference" "SystemTap Translator Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::staprun.send_control_message \- Sending a control message .SH "SYNOPSIS" .sp .nf staprun\&.send_control_message .fi .SH "VALUES" .PP \fItype\fR .RS 4 type of message being send; defined in runtime/transport/transport_msgs\&.h .RE .PP \fIlen\fR .RS 4 the length (in bytes) of the data blob .RE .PP \fIdata\fR .RS 4 a ptr to a binary blob of data sent as the control message .RE .SH "DESCRIPTION" .PP Fires at the beginning of the send_request function\&. .SH SEE ALSO\n .IR tapset::stap_staticmarkers (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.bind_new_program.3stap000066400000000000000000000035331414446751200322360ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.bind_new_program .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.bind_new_program \- Bind a new RPC program to an existing client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.bind_new_program .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the number of new RPC program .RE .PP \fIold_progname\fR .RS 4 the name of old RPC program .RE .PP \fIprogname\fR .RS 4 the name of new RPC program .RE .PP \fIold_vers\fR .RS 4 the version of old RPC program .RE .PP \fIvers\fR .RS 4 the version of new RPC program .RE .PP \fIold_prog\fR .RS 4 the number of old RPC program .RE .PP \fIservername\fR .RS 4 the server machine name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_async.3stap000066400000000000000000000037331414446751200310340ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_async .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.call_async \- Make an asynchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.call_async .fi .SH "VALUES" .PP \fIport\fR .RS 4 the port number .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIflags\fR .RS 4 flags .RE .PP \fIproc\fR .RS 4 the procedure number in this RPC call .RE .PP \fIdead\fR .RS 4 whether this client is abandoned .RE .PP \fIxid\fR .RS 4 current transmission id .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.call_sync.3stap000066400000000000000000000037261414446751200306750ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.call_sync .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.call_sync \- Make a synchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.call_sync .fi .SH "VALUES" .PP \fIdead\fR .RS 4 whether this client is abandoned .RE .PP \fIproc\fR .RS 4 the procedure number in this RPC call .RE .PP \fIxid\fR .RS 4 current transmission id .RE .PP \fIflags\fR .RS 4 flags .RE .PP \fIprocname\fR .RS 4 the procedure name in this RPC call .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.clone_client.3stap000066400000000000000000000034201414446751200313530ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.clone_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.clone_client \- Clone an RPC client structure .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.clone_client .fi .SH "VALUES" .PP \fIport\fR .RS 4 the port number .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.create_client.3stap000066400000000000000000000034121414446751200315170ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.create_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.create_client \- Create an RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.create_client .fi .SH "VALUES" .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIport\fR .RS 4 the port number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.restart_call.3stap000066400000000000000000000034121414446751200313750ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.restart_call .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.restart_call \- Restart an asynchronous RPC call .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.restart_call .fi .SH "VALUES" .PP \fIxid\fR .RS 4 the transmission id .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fItk_runstate\fR .RS 4 the task run status .RE .PP \fItk_priority\fR .RS 4 the task priority .RE .PP \fItk_pid\fR .RS 4 the debugging aid of task .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fItk_flags\fR .RS 4 the task flags .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.clnt.shutdown_client.3stap000066400000000000000000000045421414446751200321340ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.clnt.shutdown_client .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.CLNT" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.clnt.shutdown_client \- Shutdown an RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.clnt\&.shutdown_client .fi .SH "VALUES" .PP \fIom_ntrans\fR .RS 4 the count of RPC transmissions .RE .PP \fIvers\fR .RS 4 the RPC program version number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .PP \fIservername\fR .RS 4 the server machine name .RE .PP \fIom_bytes_recv\fR .RS 4 the count of bytes in .RE .PP \fIrpccnt\fR .RS 4 the count of RPC calls .RE .PP \fItasks\fR .RS 4 the number of references .RE .PP \fIprog\fR .RS 4 the RPC program number .RE .PP \fIom_queue\fR .RS 4 the jiffies queued for xmit .RE .PP \fInetreconn\fR .RS 4 the count of reconnections .RE .PP \fIclones\fR .RS 4 the number of clones .RE .PP \fIauthflavor\fR .RS 4 the authentication flavor .RE .PP \fIprogname\fR .RS 4 the RPC program name .RE .PP \fIom_ops\fR .RS 4 the count of operations .RE .PP \fIom_execute\fR .RS 4 the RPC execution jiffies .RE .PP \fIom_bytes_sent\fR .RS 4 the count of bytes out .RE .PP \fIom_rtt\fR .RS 4 the RPC RTT jiffies .RE .PP \fIport\fR .RS 4 the port number .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.delay.3stap000066400000000000000000000034231414446751200301440ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.delay .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.delay \- Delay an RPC task .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.delay .fi .SH "VALUES" .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fItk_pid\fR .RS 4 the debugging id of the task .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIdelay\fR .RS 4 the time delayed .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.execute.3stap000066400000000000000000000033741414446751200305150ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.execute \- Execute the RPC `scheduler\*(Aq .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.execute .fi .SH "VALUES" .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fItk_pid\fR .RS 4 the debugging id of the task .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.new_task.3stap000066400000000000000000000033201414446751200306550ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.new_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.new_task \- Create new task for the specified client .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.new_task .fi .SH "VALUES" .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.sched.release_task.3stap000066400000000000000000000036151414446751200315130ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.sched.release_task .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SCHE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.sched.release_task \- Release all resources associated with a task .SH "SYNOPSIS" .sp .nf sunrpc\&.sched\&.release_task .fi .SH "VALUES" .PP \fIprot\fR .RS 4 the IP protocol in the RPC call .RE .PP \fIvers\fR .RS 4 the program version in the RPC call .RE .PP \fIxid\fR .RS 4 the transmission id in the RPC call .RE .PP \fIprog\fR .RS 4 the program number in the RPC call .RE .PP \fItk_flags\fR .RS 4 the flags of the task .RE .SH "DESCRIPTION" .PP \fBrpc_release_task\fR function might not be found for a particular kernel\&. So, if we can\*(Aqt find it, just return \*(Aq\-1\*(Aq for everything\&. .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.authorise.3stap000066400000000000000000000000501414446751200305470ustar00rootroot00000000000000.SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.create.3stap000066400000000000000000000031421414446751200300140ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.create \- Create an RPC service .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.create .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the number of the program .RE .PP \fIbufsize\fR .RS 4 the buffer size .RE .PP \fIprogname\fR .RS 4 the name of the program .RE .PP \fIpg_nvers\fR .RS 4 the number of supported versions .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.destroy.3stap000066400000000000000000000037231414446751200302470ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.destroy \- Destroy an RPC service .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.destroy .fi .SH "VALUES" .PP \fIsv_prog\fR .RS 4 the number of the program .RE .PP \fInetcnt\fR .RS 4 the count of received RPC requests .RE .PP \fIrpcbadfmt\fR .RS 4 the count of requests dropped for bad formats .RE .PP \fIrpcbadauth\fR .RS 4 the count of requests drooped for authentication failure .RE .PP \fInettcpconn\fR .RS 4 the count of accepted TCP connections .RE .PP \fIrpccnt\fR .RS 4 the count of valid RPC requests .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIsv_progname\fR .RS 4 the name of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.drop.3stap000066400000000000000000000034571414446751200275260ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.drop .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.drop \- Drop RPC request .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.drop .fi .SH "VALUES" .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIsv_name\fR .RS 4 the service name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.process.3stap000066400000000000000000000036661414446751200302420ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.process .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.process \- Process an RPC request .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.process .fi .SH "VALUES" .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.recv.3stap000066400000000000000000000032031414446751200275060ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.recv .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.recv \- Listen for the next RPC request on any socket .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.recv .fi .SH "VALUES" .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIsv_nrthreads\fR .RS 4 the number of concurrent threads .RE .PP \fIsv_prog\fR .RS 4 the number of the program .RE .PP \fItimeout\fR .RS 4 the timeout of waiting for data .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.register.3stap000066400000000000000000000033751414446751200304050ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.register \- Register an RPC service with the local portmapper .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.register .fi .SH "VALUES" .PP \fIprog\fR .RS 4 the number of the program .RE .PP \fIprogname\fR .RS 4 the name of the program .RE .PP \fIsv_name\fR .RS 4 the service name .RE .PP \fIport\fR .RS 4 the port number .RE .PP \fIprot\fR .RS 4 the IP protocol number .RE .SH "DESCRIPTION" .PP If \fIproto\fR and \fIport\fR are both 0, then unregister a service\&. .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::sunrpc.svc.send.3stap000066400000000000000000000034711414446751200275070ustar00rootroot00000000000000'\" t .\" Title: probe::sunrpc.svc.send .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SUNRPC\&.SVC\" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::sunrpc.svc.send \- Return reply to RPC client .SH "SYNOPSIS" .sp .nf sunrpc\&.svc\&.send .fi .SH "VALUES" .PP \fIrq_prot\fR .RS 4 the IP protocol of the reqeust .RE .PP \fIrq_prog\fR .RS 4 the program number in the request .RE .PP \fIpeer_ip\fR .RS 4 the peer address where the request is from .RE .PP \fIrq_vers\fR .RS 4 the program version in the request .RE .PP \fIrq_xid\fR .RS 4 the transmission id in the request .RE .PP \fIrq_proc\fR .RS 4 the procedure number in the request .RE .PP \fIsv_name\fR .RS 4 the service name .RE .SH SEE ALSO\n .IR tapset::rpc (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.3stap000066400000000000000000000036721414446751200267770ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY" "3stap" "November 2021" "SystemTap Tapset Reference" "Syscall Any Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::syscall_any \- Record entry into a syscall .SH "SYNOPSIS" .sp .nf syscall_any .fi .SH "VALUES" .PP \fIsyscall_nr\fR .RS 4 number of the syscall .RE .PP \fIname\fR .RS 4 name of the syscall .RE .SH "CONTEXT" .PP The process performing the syscall .SH "DESCRIPTION" .PP The syscall_any probe point is designed to be a low overhead that monitors all the syscalls entered via a kernel tracepoint\&. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments or argstr string representation of those arguments\&. .PP This requires kernel 3\&.5+ and newer which have the kernel\&.trace(\(lqsys_enter\(rq) probe point\&. .SH SEE ALSO\n .IR tapset::syscall_any (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::syscall_any.return.3stap000066400000000000000000000041101414446751200303010ustar00rootroot00000000000000'\" t .\" Title: probe::syscall_any.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Syscall Any Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::SYSCALL_ANY\&" "3stap" "November 2021" "SystemTap Tapset Reference" "Syscall Any Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::syscall_any.return \- Record exit from a syscall .SH "SYNOPSIS" .sp .nf syscall_any\&.return .fi .SH "VALUES" .PP \fIsyscall_nr\fR .RS 4 number of the syscall .RE .PP \fIname\fR .RS 4 name of the syscall .RE .PP \fIretval\fR .RS 4 return value of the syscall .RE .SH "CONTEXT" .PP The process performing the syscall .SH "DESCRIPTION" .PP The syscall_any\&.return probe point is designed to be a low overhead that monitors all the syscalls returns via a kernel tracepoint\&. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments, argstr string representation of those arguments, or a string interpretation of the return value (retval)\&. .PP This requires kernel 3\&.5+ and newer which have the kernel\&.trace(\(lqsys_exit\(rq) probe point\&. .SH SEE ALSO\n .IR tapset::syscall_any (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.3stap000066400000000000000000000035371414446751200273740ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.disconnect \- TCP socket disconnection .SH "SYNOPSIS" .sp .nf tcp\&.disconnect .fi .SH "VALUES" .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIflags\fR .RS 4 TCP flags (e\&.g\&. FIN, etc) .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsport\fR .RS 4 TCP source port .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.disconnect.return.3stap000066400000000000000000000030711414446751200307030ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.DISCONN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.disconnect.return \- TCP socket disconnection complete .SH "SYNOPSIS" .sp .nf tcp\&.disconnect\&.return .fi .SH "VALUES" .PP \fIret\fR .RS 4 Error code (0: no error) .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The process which disconnects tcp .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.receive.3stap000066400000000000000000000040261414446751200266570ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECEIVE" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.receive \- Called when a TCP packet is received .SH "SYNOPSIS" .sp .nf tcp\&.receive .fi .SH "VALUES" .PP \fIpsh\fR .RS 4 TCP PSH flag .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIurg\fR .RS 4 TCP URG flag .RE .PP \fIfin\fR .RS 4 TCP FIN flag .RE .PP \fIprotocol\fR .RS 4 Packet protocol from driver .RE .PP \fIiphdr\fR .RS 4 IP header address .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIack\fR .RS 4 TCP ACK flag .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIrst\fR .RS 4 TCP RST flag .RE .PP \fIsyn\fR .RS 4 TCP SYN flag .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.3stap000066400000000000000000000035321414446751200267040ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.recvmsg \- Receiving TCP message .SH "SYNOPSIS" .sp .nf tcp\&.recvmsg .fi .SH "VALUES" .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .PP \fIsize\fR .RS 4 Number of bytes to be received .RE .SH "CONTEXT" .PP The process which receives a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.recvmsg.return.3stap000066400000000000000000000035621414446751200302250ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.RECVMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.recvmsg.return \- Receiving TCP message complete .SH "SYNOPSIS" .sp .nf tcp\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsport\fR .RS 4 TCP source port .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsize\fR .RS 4 Number of bytes received or error code if an error occurred\&. .RE .PP \fIdport\fR .RS 4 TCP destination port .RE .SH "CONTEXT" .PP The process which receives a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.3stap000066400000000000000000000031461414446751200266770ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.sendmsg \- Sending a tcp message .SH "SYNOPSIS" .sp .nf tcp\&.sendmsg .fi .SH "VALUES" .PP \fIsize\fR .RS 4 Number of bytes to send .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsock\fR .RS 4 Network socket .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.sendmsg.return.3stap000066400000000000000000000031211414446751200302060ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SENDMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.sendmsg.return \- Sending TCP message is done .SH "SYNOPSIS" .sp .nf tcp\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes sent or error code if an error occurred\&. .RE .SH "CONTEXT" .PP The process which sends a tcp message .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.3stap000066400000000000000000000035671414446751200274440ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.setsockopt \- Call to \fBsetsockopt\fR .SH "SYNOPSIS" .sp .nf tcp\&.setsockopt .fi .SH "VALUES" .PP \fIlevel\fR .RS 4 The level at which the socket options will be manipulated .RE .PP \fIoptstr\fR .RS 4 Resolves optname to a human\-readable format .RE .PP \fIsock\fR .RS 4 Network socket .RE .PP \fIname\fR .RS 4 Name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIoptname\fR .RS 4 TCP socket options (e\&.g\&. TCP_NODELAY, TCP_MAXSEG, etc) .RE .PP \fIoptlen\fR .RS 4 Used to access values for \fBsetsockopt\fR .RE .SH "CONTEXT" .PP The process which calls setsockopt .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcp.setsockopt.return.3stap000066400000000000000000000030651414446751200307530ustar00rootroot00000000000000'\" t .\" Title: probe::tcp.setsockopt.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCP\&.SETSOCK" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcp.setsockopt.return \- Return from \fBsetsockopt\fR .SH "SYNOPSIS" .sp .nf tcp\&.setsockopt\&.return .fi .SH "VALUES" .PP \fIret\fR .RS 4 Error code (0: no error) .RE .PP \fIname\fR .RS 4 Name of this probe .RE .SH "CONTEXT" .PP The process which calls setsockopt .SH SEE ALSO\n .IR tapset::tcp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.ActiveOpens.3stap000066400000000000000000000034551414446751200301520ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.ActiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ACTI" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.ActiveOpens \- Count an active opening of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.ActiveOpens .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIActiveOpens\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ACTIVEOPENS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.AttemptFails.3stap000066400000000000000000000034661414446751200303310ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.AttemptFails .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ATTE" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.AttemptFails \- Count a failed attempt to open a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.AttemptFails .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIAttemptFails\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ATTEMPTFAILS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.CurrEstab.3stap000066400000000000000000000034401414446751200276160ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.CurrEstab .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.CURR" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.CurrEstab \- Update the count of open sockets .SH "SYNOPSIS" .sp .nf tcpmib\&.CurrEstab .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fICurrEstab\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_CURRESTAB) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.EstabResets.3stap000066400000000000000000000034451414446751200301550ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.EstabResets .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.ESTA" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.EstabResets \- Count the reset of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.EstabResets .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIEstabResets\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_ESTABRESETS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.InSegs.3stap000066400000000000000000000034651414446751200271230ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.InSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.INSE" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.InSegs \- Count an incoming tcp segment .SH "SYNOPSIS" .sp .nf tcpmib\&.InSegs .fi .SH "VALUES" .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR (or \fBipmib_filter_key\fR for tcp v4)\&. If the packet passes the filter is is counted in the global \fIInSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_INSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutRsts.3stap000066400000000000000000000034311414446751200273470ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutRsts .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTR" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.OutRsts \- Count the sending of a reset packet .SH "SYNOPSIS" .sp .nf tcpmib\&.OutRsts .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutRsts\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_OUTRSTS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.OutSegs.3stap000066400000000000000000000034301414446751200273140ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.OutSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.OUTS" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.OutSegs \- Count the sending of a TCP segment .SH "SYNOPSIS" .sp .nf tcpmib\&.OutSegs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIOutSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_OUTSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.PassiveOpens.3stap000066400000000000000000000034651414446751200303520ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.PassiveOpens .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.PASS" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.PassiveOpens \- Count the passive creation of a socket .SH "SYNOPSIS" .sp .nf tcpmib\&.PassiveOpens .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIPassiveOpens\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_PASSIVEOPENS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tcpmib.RetransSegs.3stap000066400000000000000000000034631414446751200301710ustar00rootroot00000000000000'\" t .\" Title: probe::tcpmib.RetransSegs .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: SNMP Information Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TCPMIB\&.RETR" "3stap" "November 2021" "SystemTap Tapset Reference" "SNMP Information Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tcpmib.RetransSegs \- Count the retransmission of a TCP segment .SH "SYNOPSIS" .sp .nf tcpmib\&.RetransSegs .fi .SH "VALUES" .PP \fIsk\fR .RS 4 pointer to the struct sock being acted on .RE .PP \fIop\fR .RS 4 value to be added to the counter (default value of 1) .RE .SH "DESCRIPTION" .PP The packet pointed to by \fIskb\fR is filtered by the function \fBtcpmib_filter_key\fR\&. If the packet passes the filter is is counted in the global \fIRetransSegs\fR (equivalent to SNMP\*(Aqs MIB TCP_MIB_RETRANSSEGS) .SH SEE ALSO\n .IR tapset::tcpmib (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.init.3stap000066400000000000000000000030021414446751200262230ustar00rootroot00000000000000'\" t .\" Title: probe::tty.init .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.INIT" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.init \- Called when a tty is being initalized .SH "SYNOPSIS" .sp .nf tty\&.init .fi .SH "VALUES" .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fImodule\fR .RS 4 the module name .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.ioctl.3stap000066400000000000000000000027661414446751200264120ustar00rootroot00000000000000'\" t .\" Title: probe::tty.ioctl .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.IOCTL" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.ioctl \- called when a ioctl is request to the tty .SH "SYNOPSIS" .sp .nf tty\&.ioctl .fi .SH "VALUES" .PP \fIcmd\fR .RS 4 the ioctl command .RE .PP \fIarg\fR .RS 4 the ioctl argument .RE .PP \fIname\fR .RS 4 the file name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.open.3stap000066400000000000000000000032001414446751200262210ustar00rootroot00000000000000'\" t .\" Title: probe::tty.open .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.OPEN" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.open \- Called when a tty is opened .SH "SYNOPSIS" .sp .nf tty\&.open .fi .SH "VALUES" .PP \fIfile_flags\fR .RS 4 the file flags .RE .PP \fIinode_state\fR .RS 4 the inode state .RE .PP \fIfile_mode\fR .RS 4 the file mode .RE .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIfile_name\fR .RS 4 the file name .RE .PP \fIinode_number\fR .RS 4 the inode number .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.poll.3stap000066400000000000000000000027251414446751200262410ustar00rootroot00000000000000'\" t .\" Title: probe::tty.poll .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.POLL" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.poll \- Called when a tty device is being polled .SH "SYNOPSIS" .sp .nf tty\&.poll .fi .SH "VALUES" .PP \fIwait_key\fR .RS 4 the wait queue key .RE .PP \fIfile_name\fR .RS 4 the tty file name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.read.3stap000066400000000000000000000031411414446751200261770ustar00rootroot00000000000000'\" t .\" Title: probe::tty.read .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.READ" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.read \- called when a tty line will be read .SH "SYNOPSIS" .sp .nf tty\&.read .fi .SH "VALUES" .PP \fIfile_name\fR .RS 4 the file name lreated to the tty .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fInr\fR .RS 4 The amount of characters to be read .RE .PP \fIbuffer\fR .RS 4 the buffer that will receive the characters .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.receive.3stap000066400000000000000000000033031414446751200267060ustar00rootroot00000000000000'\" t .\" Title: probe::tty.receive .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RECEIVE" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.receive \- called when a tty receives a message .SH "SYNOPSIS" .sp .nf tty\&.receive .fi .SH "VALUES" .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIcount\fR .RS 4 The amount of characters received .RE .PP \fIname\fR .RS 4 the name of the module file .RE .PP \fIid\fR .RS 4 the tty id .RE .PP \fIfp\fR .RS 4 The flag buffer .RE .PP \fIcp\fR .RS 4 the buffer that was received .RE .PP \fIindex\fR .RS 4 The tty Index .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.register.3stap000066400000000000000000000031031414446751200271060ustar00rootroot00000000000000'\" t .\" Title: probe::tty.register .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.REGISTE" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.register \- Called when a tty device is registred .SH "SYNOPSIS" .sp .nf tty\&.register .fi .SH "VALUES" .PP \fIindex\fR .RS 4 the tty index requested .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fImodule\fR .RS 4 the module name .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.release.3stap000066400000000000000000000032161414446751200267070ustar00rootroot00000000000000'\" t .\" Title: probe::tty.release .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RELEASE" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.release \- Called when the tty is closed .SH "SYNOPSIS" .sp .nf tty\&.release .fi .SH "VALUES" .PP \fIinode_number\fR .RS 4 the inode number .RE .PP \fIfile_name\fR .RS 4 the file name .RE .PP \fIinode_flags\fR .RS 4 the inode flags .RE .PP \fIfile_mode\fR .RS 4 the file mode .RE .PP \fIinode_state\fR .RS 4 the inode state .RE .PP \fIfile_flags\fR .RS 4 the file flags .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.resize.3stap000066400000000000000000000034341414446751200265720ustar00rootroot00000000000000'\" t .\" Title: probe::tty.resize .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.RESIZE" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.resize \- Called when a terminal resize happens .SH "SYNOPSIS" .sp .nf tty\&.resize .fi .SH "VALUES" .PP \fIold_ypixel\fR .RS 4 the old ypixel .RE .PP \fInew_xpixel\fR .RS 4 the new xpixel value .RE .PP \fIold_row\fR .RS 4 the old row value .RE .PP \fIold_col\fR .RS 4 the old col value .RE .PP \fIname\fR .RS 4 the tty name .RE .PP \fInew_col\fR .RS 4 the new col value .RE .PP \fInew_row\fR .RS 4 the new row value .RE .PP \fIold_xpixel\fR .RS 4 the old xpixel .RE .PP \fInew_ypixel\fR .RS 4 the new ypixel value .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.unregister.3stap000066400000000000000000000031221414446751200274520ustar00rootroot00000000000000'\" t .\" Title: probe::tty.unregister .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.UNREGIS" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.unregister \- Called when a tty device is being unregistered .SH "SYNOPSIS" .sp .nf tty\&.unregister .fi .SH "VALUES" .PP \fImodule\fR .RS 4 the module name .RE .PP \fIname\fR .RS 4 the driver \&.dev_name name .RE .PP \fIindex\fR .RS 4 the tty index requested .RE .PP \fIdriver_name\fR .RS 4 the driver name .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::tty.write.3stap000066400000000000000000000031001414446751200264110ustar00rootroot00000000000000'\" t .\" Title: probe::tty.write .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: TTY Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::TTY\&.WRITE" "3stap" "November 2021" "SystemTap Tapset Reference" "TTY Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::tty.write \- write to the tty line .SH "SYNOPSIS" .sp .nf tty\&.write .fi .SH "VALUES" .PP \fIdriver_name\fR .RS 4 the driver name .RE .PP \fIfile_name\fR .RS 4 the file name lreated to the tty .RE .PP \fIbuffer\fR .RS 4 the buffer that will be written .RE .PP \fInr\fR .RS 4 The amount of characters .RE .SH SEE ALSO\n .IR tapset::tty (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.3stap000066400000000000000000000036351414446751200273750ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.disconnect \- Fires when a process requests for a UDP disconnection .SH "SYNOPSIS" .sp .nf udp\&.disconnect .fi .SH "VALUES" .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIflags\fR .RS 4 Flags (e\&.g\&. FIN, etc) .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .RE .SH "CONTEXT" .PP The process which requests a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.disconnect.return.3stap000066400000000000000000000035471414446751200307150ustar00rootroot00000000000000'\" t .\" Title: probe::udp.disconnect.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.DISCONN" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.disconnect.return \- UDP has been disconnected successfully .SH "SYNOPSIS" .sp .nf udp\&.disconnect\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIret\fR .RS 4 Error code (0: no error) .RE .SH "CONTEXT" .PP The process which requested a UDP disconnection .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.3stap000066400000000000000000000036161414446751200267110ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.recvmsg \- Fires whenever a UDP message is received .SH "SYNOPSIS" .sp .nf udp\&.recvmsg .fi .SH "VALUES" .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIsize\fR .RS 4 Number of bytes received by the process .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.recvmsg.return.3stap000066400000000000000000000036111414446751200302220ustar00rootroot00000000000000'\" t .\" Title: probe::udp.recvmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.RECVMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.recvmsg.return \- Fires whenever an attempt to receive a UDP message received is completed .SH "SYNOPSIS" .sp .nf udp\&.recvmsg\&.return .fi .SH "VALUES" .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIsize\fR .RS 4 Number of bytes received by the process .RE .PP \fIname\fR .RS 4 The name of this probe .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .SH "CONTEXT" .PP The process which received a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.3stap000066400000000000000000000036121414446751200266770ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.sendmsg \- Fires whenever a process sends a UDP message .SH "SYNOPSIS" .sp .nf udp\&.sendmsg .fi .SH "VALUES" .PP \fIsport\fR .RS 4 UDP source port .RE .PP \fIdport\fR .RS 4 UDP destination port .RE .PP \fIsock\fR .RS 4 Network socket used by the process .RE .PP \fIsaddr\fR .RS 4 A string representing the source IP address .RE .PP \fIdaddr\fR .RS 4 A string representing the destination IP address .RE .PP \fIfamily\fR .RS 4 IP address family .RE .PP \fIsize\fR .RS 4 Number of bytes sent by the process .RE .PP \fIname\fR .RS 4 The name of this probe .RE .SH "CONTEXT" .PP The process which sent a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::udp.sendmsg.return.3stap000066400000000000000000000031361414446751200302160ustar00rootroot00000000000000'\" t .\" Title: probe::udp.sendmsg.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Networking Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::UDP\&.SENDMSG" "3stap" "November 2021" "SystemTap Tapset Reference" "Networking Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::udp.sendmsg.return \- Fires whenever an attempt to send a UDP message is completed .SH "SYNOPSIS" .sp .nf udp\&.sendmsg\&.return .fi .SH "VALUES" .PP \fIsize\fR .RS 4 Number of bytes sent by the process .RE .PP \fIname\fR .RS 4 The name of this probe .RE .SH "CONTEXT" .PP The process which sent a UDP message .SH SEE ALSO\n .IR tapset::udp (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.brk.3stap000066400000000000000000000031331414446751200256450ustar00rootroot00000000000000'\" t .\" Title: probe::vm.brk .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.BRK" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.brk \- Fires when a brk is requested (i\&.e\&. the heap will be resized) .SH "SYNOPSIS" .sp .nf vm\&.brk .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIlength\fR .RS 4 the length of the memory segment .RE .SH "CONTEXT" .PP The process calling brk\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kfree.3stap000066400000000000000000000032211414446751200261610ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kfree .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KFREE" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kfree \- Fires when kfree is requested .SH "SYNOPSIS" .sp .nf vm\&.kfree .fi .SH "VALUES" .PP \fIptr\fR .RS 4 pointer to the kmemory allocated which is returned by kmalloc .RE .PP \fIcaller_function\fR .RS 4 name of the caller function\&. .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc.3stap000066400000000000000000000035161414446751200265160ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmalloc \- Fires when kmalloc is requested .SH "SYNOPSIS" .sp .nf vm\&.kmalloc .fi .SH "VALUES" .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate (in String format) .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIcall_site\fR .RS 4 address of the kmemory function .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmalloc_node.3stap000066400000000000000000000035671414446751200275310ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmalloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMALLOC_" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmalloc_node \- Fires when kmalloc_node is requested .SH "SYNOPSIS" .sp .nf vm\&.kmalloc_node .fi .SH "VALUES" .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIcall_site\fR .RS 4 address of the function caling this kmemory function .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc.3stap000066400000000000000000000036161414446751200303230ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_alloc \- Fires when kmem_cache_alloc is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_alloc .fi .SH "VALUES" .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIcaller_function\fR .RS 4 name of the caller function\&. .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function\&. .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_alloc_node.3stap000066400000000000000000000036341414446751200313300ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_alloc_node .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_alloc_node \- Fires when kmem_cache_alloc_node is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_alloc_node .fi .SH "VALUES" .PP \fIgfp_flag_name\fR .RS 4 type of kmemory to allocate(in string format) .RE .PP \fIbytes_alloc\fR .RS 4 allocated Bytes .RE .PP \fIptr\fR .RS 4 pointer to the kmemory allocated .RE .PP \fIcall_site\fR .RS 4 address of the function calling this kmemory function .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIcaller_function\fR .RS 4 name of the caller function .RE .PP \fIbytes_req\fR .RS 4 requested Bytes .RE .PP \fIgfp_flags\fR .RS 4 type of kmemory to allocate .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.kmem_cache_free.3stap000066400000000000000000000032771414446751200301550ustar00rootroot00000000000000'\" t .\" Title: probe::vm.kmem_cache_free .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.KMEM_CAC" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.kmem_cache_free \- Fires when kmem_cache_free is requested .SH "SYNOPSIS" .sp .nf vm\&.kmem_cache_free .fi .SH "VALUES" .PP \fIcaller_function\fR .RS 4 Name of the caller function\&. .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIcall_site\fR .RS 4 Address of the function calling this kmemory function .RE .PP \fIptr\fR .RS 4 Pointer to the kmemory allocated which is returned by kmem_cache .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.mmap.3stap000066400000000000000000000030761414446751200260270ustar00rootroot00000000000000'\" t .\" Title: probe::vm.mmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MMAP" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.mmap \- Fires when an mmap is requested .SH "SYNOPSIS" .sp .nf vm\&.mmap .fi .SH "VALUES" .PP \fIlength\fR .RS 4 the length of the memory segment .RE .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process calling mmap\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.munmap.3stap000066400000000000000000000031121414446751200263610ustar00rootroot00000000000000'\" t .\" Title: probe::vm.munmap .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.MUNMAP" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.munmap \- Fires when an munmap is requested .SH "SYNOPSIS" .sp .nf vm\&.munmap .fi .SH "VALUES" .PP \fIaddress\fR .RS 4 the requested address .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIlength\fR .RS 4 the length of the memory segment .RE .SH "CONTEXT" .PP The process calling munmap\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.oom_kill.3stap000066400000000000000000000031471414446751200267010ustar00rootroot00000000000000'\" t .\" Title: probe::vm.oom_kill .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.OOM_KILL" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.oom_kill \- Fires when a thread is selected for termination by the OOM killer .SH "SYNOPSIS" .sp .nf vm\&.oom_kill .fi .SH "VALUES" .PP \fItask\fR .RS 4 the task being killed .RE .PP \fIname\fR .RS 4 name of the probe point .RE .SH "CONTEXT" .PP The process that tried to consume excessive memory, and thus triggered the OOM\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.3stap000066400000000000000000000033511414446751200270410ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.pagefault \- Records that a page fault occurred .SH "SYNOPSIS" .sp .nf vm\&.pagefault .fi .SH "VALUES" .PP \fIaddress\fR .RS 4 the address of the faulting memory access; i\&.e\&. the address that caused the page fault .RE .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIwrite_access\fR .RS 4 indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read .RE .SH "CONTEXT" .PP The process which triggered the fault .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.pagefault.return.3stap000066400000000000000000000033121414446751200303540ustar00rootroot00000000000000'\" t .\" Title: probe::vm.pagefault.return .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.PAGEFAUL" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.pagefault.return \- Indicates what type of fault occurred .SH "SYNOPSIS" .sp .nf vm\&.pagefault\&.return .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIfault_type\fR .RS 4 returns either 0 (VM_FAULT_OOM) for out of memory faults, 2 (VM_FAULT_MINOR) for minor faults, 3 (VM_FAULT_MAJOR) for major faults, or 1 (VM_FAULT_SIGBUS) if the fault was neither OOM, minor fault, nor major fault\&. .RE .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared.3stap000066400000000000000000000033421414446751200275510ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.write_shared \- Attempts at writing to a shared page .SH "SYNOPSIS" .sp .nf vm\&.write_shared .fi .SH "VALUES" .PP \fIname\fR .RS 4 name of the probe point .RE .PP \fIaddress\fR .RS 4 the address of the shared write .RE .SH "CONTEXT" .PP The context is the process attempting the write\&. .SH "DESCRIPTION" .PP Fires when a process attempts to write to a shared page\&. If a copy is necessary, this will be followed by a vm\&.write_shared_copy\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::vm.write_shared_copy.3stap000066400000000000000000000034541414446751200306070ustar00rootroot00000000000000'\" t .\" Title: probe::vm.write_shared_copy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Memory Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::VM\&.WRITE_SH" "3stap" "November 2021" "SystemTap Tapset Reference" "Memory Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::vm.write_shared_copy \- Page copy for shared page write .SH "SYNOPSIS" .sp .nf vm\&.write_shared_copy .fi .SH "VALUES" .PP \fIzero\fR .RS 4 boolean indicating whether it is a zero page (can do a clear instead of a copy) .RE .PP \fIname\fR .RS 4 Name of the probe point .RE .PP \fIaddress\fR .RS 4 The address of the shared write .RE .SH "CONTEXT" .PP The process attempting the write\&. .SH "DESCRIPTION" .PP Fires when a write to a shared page requires a page copy\&. This is always preceded by a vm\&.write_shared\&. .SH SEE ALSO\n .IR tapset::memory (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.create.3stap000066400000000000000000000030551414446751200277420ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.create .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.C" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.create \- Creating a new workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.create .fi .SH "VALUES" .PP \fIcpu\fR .RS 4 cpu for which the worker thread is created .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.destroy.3stap000066400000000000000000000027511414446751200301720ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.destroy .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.D" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.destroy \- Destroying workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.destroy .fi .SH "VALUES" .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.execute.3stap000066400000000000000000000031331414446751200301360ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.execute .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.E" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.execute \- Executing deferred work .SH "SYNOPSIS" .sp .nf workqueue\&.execute .fi .SH "VALUES" .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .PP \fIwork\fR .RS 4 work_struct* being executed .RE .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man3/probe::workqueue.insert.3stap000066400000000000000000000031321414446751200277770ustar00rootroot00000000000000'\" t .\" Title: probe::workqueue.insert .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: November 2021 .\" Manual: Interrupt Request (IRQ) Tapset .\" Source: SystemTap Tapset Reference .\" Language: English .\" .TH "PROBE::WORKQUEUE\&.I" "3stap" "November 2021" "SystemTap Tapset Reference" "Interrupt Request (IRQ) Tapset" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" probe::workqueue.insert \- Queuing work on a workqueue .SH "SYNOPSIS" .sp .nf workqueue\&.insert .fi .SH "VALUES" .PP \fIwq_thread\fR .RS 4 task_struct of the workqueue thread .RE .PP \fIwork_func\fR .RS 4 pointer to handler function .RE .PP \fIwork\fR .RS 4 work_struct* being queued .RE .SH SEE ALSO\n .IR tapset::irq (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/000077500000000000000000000000001414446751200233525ustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ansi.3stap000066400000000000000000000037001414446751200266650ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ANSI 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ansi \- systemtap ansi tapset .SH DESCRIPTION .TP .P .TP .B ansi_clear_screen Move cursor to top left and clear screen. .IP See .IR function::ansi_clear_screen (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_set_color Set the ansi Select Graphic Rendition mode. .IP See .IR function::ansi_set_color (3stap) for details. .P .TP .B ansi_reset_color Resets Select Graphic Rendition mode. .IP See .IR function::ansi_reset_color (3stap) for details. .P .TP .B ansi_new_line Move cursor to new line. .IP See .IR function::ansi_new_line (3stap) for details. .P .TP .B ansi_cursor_move Move cursor to new coordinates. .IP See .IR function::ansi_cursor_move (3stap) for details. .P .TP .B ansi_cursor_hide Hides the cursor. .IP See .IR function::ansi_cursor_hide (3stap) for details. .P .TP .B ansi_cursor_save Saves the cursor position. .IP See .IR function::ansi_cursor_save (3stap) for details. .P .TP .B ansi_cursor_restore Restores a previously saved cursor position. .IP See .IR function::ansi_cursor_restore (3stap) for details. .P .TP .B ansi_cursor_show Shows the cursor. .IP See .IR function::ansi_cursor_show (3stap) for details. .SH SEE ALSO .BR .IR \%function::ansi_clear_screen (3stap), .BR .IR \%function::ansi_set_color (3stap), .BR .IR \%function::ansi_reset_color (3stap), .BR .IR \%function::ansi_new_line (3stap), .BR .IR \%function::ansi_cursor_move (3stap), .BR .IR \%function::ansi_cursor_hide (3stap), .BR .IR \%function::ansi_cursor_save (3stap), .BR .IR \%function::ansi_cursor_restore (3stap), .BR .IR \%function::ansi_cursor_show (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::atomic.3stap000066400000000000000000000011021414446751200272010ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ATOMIC 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::atomic \- systemtap atomic tapset .SH DESCRIPTION .TP .P .TP .B atomic_read Retrieves an atomic variable from kernel memory .IP See .IR function::atomic_read (3stap) for details. .P .TP .B atomic_long_read Retrieves an atomic long variable from kernel memory .IP See .IR function::atomic_long_read (3stap) for details. .SH SEE ALSO .BR .IR \%function::atomic_read (3stap), .BR .IR \%function::atomic_long_read (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-caller.3stap000066400000000000000000000014141414446751200306570ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-CALLER 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::context-caller \- systemtap context-caller tapset .SH DESCRIPTION Provides caller and caller_addr function for context for kernel and user space. .TP .P .TP .B callers Return first n elements of kernel stack backtrace .IP See .IR function::callers (3stap) for details. .P .TP .B caller Return name and address of calling function .IP See .IR function::caller (3stap) for details. .P .TP .B caller_addr Return caller address .IP See .IR function::caller_addr (3stap) for details. .SH SEE ALSO .BR .IR \%function::callers (3stap), .BR .IR \%function::caller (3stap), .BR .IR \%function::caller_addr (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-envvar.3stap000066400000000000000000000011571414446751200307220ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-ENVVAR 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::context-envvar \- systemtap context-envvar tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B env_var Fetch environment variable from current process .IP See .IR function::env_var (3stap) for details. .SH SEE ALSO .BR .IR \%function::env_var (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-symbols.3stap000066400000000000000000000050111414446751200311020ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-SYMBOLS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::context-symbols \- systemtap context-symbols tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B stack Return address at given depth of kernel stack backtrace .IP See .IR function::stack (3stap) for details. .P .TP .B print_stack Print out kernel stack from string .IP See .IR function::print_stack (3stap) for details. .P .TP .B sprint_stack Return stack for kernel addresses from string .IP See .IR function::sprint_stack (3stap) for details. .P .TP .B probefunc Return the probe point's function name, if known .IP See .IR function::probefunc (3stap) for details. .P .TP .B probemod Return the probe point's kernel module name .IP See .IR function::probemod (3stap) for details. .P .TP .B modname Return the kernel module name loaded at the address .IP See .IR function::modname (3stap) for details. .P .TP .B symname Return the kernel symbol associated with the given address .IP See .IR function::symname (3stap) for details. .P .TP .B symdata Return the kernel symbol and module offset for the address .IP See .IR function::symdata (3stap) for details. .P .TP .B print_syms Print out kernel stack from string .IP See .IR function::print_syms (3stap) for details. .P .TP .B sprint_syms Return stack for kernel addresses from string .IP See .IR function::sprint_syms (3stap) for details. .P .TP .B symfileline Return the file name and line number of an address. .IP See .IR function::symfileline (3stap) for details. .P .TP .B usymfile Return the file name of a given address. .IP See .IR function::usymfile (3stap) for details. .P .TP .B usymline Return the line number of an address. .IP See .IR function::usymline (3stap) for details. .SH SEE ALSO .BR .IR \%function::stack (3stap), .BR .IR \%function::print_stack (3stap), .BR .IR \%function::sprint_stack (3stap), .BR .IR \%function::probefunc (3stap), .BR .IR \%function::probemod (3stap), .BR .IR \%function::modname (3stap), .BR .IR \%function::symname (3stap), .BR .IR \%function::symdata (3stap), .BR .IR \%function::print_syms (3stap), .BR .IR \%function::sprint_syms (3stap), .BR .IR \%function::symfileline (3stap), .BR .IR \%function::usymfile (3stap), .BR .IR \%function::usymline (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::context-unwind.3stap000066400000000000000000000024351414446751200307250ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT-UNWIND 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::context-unwind \- systemtap context-unwind tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B print_backtrace Print kernel stack back trace .IP See .IR function::print_backtrace (3stap) for details. .P .TP .B print_backtrace_fileline Print kernel stack back trace .IP See .IR function::print_backtrace_fileline (3stap) for details. .P .TP .B sprint_backtrace Return stack back trace as string .IP See .IR function::sprint_backtrace (3stap) for details. .P .TP .B backtrace Hex backtrace of current kernel stack .IP See .IR function::backtrace (3stap) for details. .P .TP .B task_backtrace Hex backtrace of an arbitrary task .IP See .IR function::task_backtrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_backtrace (3stap), .BR .IR \%function::print_backtrace_fileline (3stap), .BR .IR \%function::sprint_backtrace (3stap), .BR .IR \%function::backtrace (3stap), .BR .IR \%function::task_backtrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::context.3stap000066400000000000000000000165171414446751200274310ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONTEXT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::context \- systemtap context tapset .SH DESCRIPTION Context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. .TP .P .TP .B print_regs Print a register dump .IP See .IR function::print_regs (3stap) for details. .P .TP .B pp Returns the active probe point .IP See .IR function::pp (3stap) for details. .P .TP .B ppfunc Returns the function name parsed from pp() .IP See .IR function::ppfunc (3stap) for details. .P .TP .B probe_type The low level probe handler type of the current probe. .IP See .IR function::probe_type (3stap) for details. .P .TP .B execname Returns the execname of a target process (or group of processes) .IP See .IR function::execname (3stap) for details. .P .TP .B pexecname Returns the execname of a target process's parent process .IP See .IR function::pexecname (3stap) for details. .P .TP .B pid Returns the ID of a target process .IP See .IR function::pid (3stap) for details. .P .TP .B ns_pid Returns the ID of a target process as seen in a pid namespace .IP See .IR function::ns_pid (3stap) for details. .P .TP .B tid Returns the thread ID of a target process .IP See .IR function::tid (3stap) for details. .P .TP .B ns_tid Returns the thread ID of a target process as seen in a pid namespace .IP See .IR function::ns_tid (3stap) for details. .P .TP .B ppid Returns the process ID of a target process's parent process .IP See .IR function::ppid (3stap) for details. .P .TP .B ns_ppid Returns the process ID of a target process's parent process as seen in a pid namespace .IP See .IR function::ns_ppid (3stap) for details. .P .TP .B pgrp Returns the process group ID of the current process .IP See .IR function::pgrp (3stap) for details. .P .TP .B ns_pgrp Returns the process group ID of the current process as seen in a pid namespace .IP See .IR function::ns_pgrp (3stap) for details. .P .TP .B sid Returns the session ID of the current process .IP See .IR function::sid (3stap) for details. .P .TP .B ns_sid Returns the session ID of the current process as seen in a pid namespace .IP See .IR function::ns_sid (3stap) for details. .P .TP .B gid Returns the group ID of a target process .IP See .IR function::gid (3stap) for details. .P .TP .B ns_gid Returns the group ID of a target process as seen in a user namespace .IP See .IR function::ns_gid (3stap) for details. .P .TP .B egid Returns the effective gid of a target process .IP See .IR function::egid (3stap) for details. .P .TP .B ns_egid Returns the effective gid of a target process as seen in a user namespace .IP See .IR function::ns_egid (3stap) for details. .P .TP .B uid Returns the user ID of a target process .IP See .IR function::uid (3stap) for details. .P .TP .B ns_uid Returns the user ID of a target process as seen in a user namespace .IP See .IR function::ns_uid (3stap) for details. .P .TP .B euid Return the effective uid of a target process .IP See .IR function::euid (3stap) for details. .P .TP .B ns_euid Returns the effective user ID of a target process as seen in a user namespace .IP See .IR function::ns_euid (3stap) for details. .P .TP .B is_myproc Determines if the current probe point has occurred in the user's own process .IP See .IR function::is_myproc (3stap) for details. .P .TP .B cpuid Returns the current cpu number .IP See .IR function::cpuid (3stap) for details. .P .TP .B cpu Returns the current cpu number .IP See .IR function::cpu (3stap) for details. .P .TP .B registers_valid Determines validity of register() and u_register() in current context .IP See .IR function::registers_valid (3stap) for details. .P .TP .B user_mode Determines if probe point occurs in user-mode .IP See .IR function::user_mode (3stap) for details. .P .TP .B is_return Whether the current probe context is a return probe .IP See .IR function::is_return (3stap) for details. .P .TP .B target Return the process ID of the target process .IP See .IR function::target (3stap) for details. .P .TP .B module_name The module name of the current script .IP See .IR function::module_name (3stap) for details. .P .TP .B module_size The module size of the current script .IP See .IR function::module_size (3stap) for details. .P .TP .B stp_pid The process id of the stapio process .IP See .IR function::stp_pid (3stap) for details. .P .TP .B remote_id The index of this instance in a remote execution. .IP See .IR function::remote_id (3stap) for details. .P .TP .B remote_uri The name of this instance in a remote execution. .IP See .IR function::remote_uri (3stap) for details. .P .TP .B stack_size Return the size of the kernel stack .IP See .IR function::stack_size (3stap) for details. .P .TP .B stack_used Returns the amount of kernel stack used .IP See .IR function::stack_used (3stap) for details. .P .TP .B stack_unused Returns the amount of kernel stack currently available .IP See .IR function::stack_unused (3stap) for details. .P .TP .B addr Address of the current probe point. .IP See .IR function::addr (3stap) for details. .P .TP .B uaddr User space address of current running task .IP See .IR function::uaddr (3stap) for details. .P .TP .B cmdline_args Fetch command line arguments from current process .IP See .IR function::cmdline_args (3stap) for details. .P .TP .B cmdline_arg Fetch a command line argument .IP See .IR function::cmdline_arg (3stap) for details. .P .TP .B cmdline_str Fetch all command line arguments from current process .IP See .IR function::cmdline_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_regs (3stap), .BR .IR \%function::pp (3stap), .BR .IR \%function::ppfunc (3stap), .BR .IR \%function::probe_type (3stap), .BR .IR \%function::execname (3stap), .BR .IR \%function::pexecname (3stap), .BR .IR \%function::pid (3stap), .BR .IR \%function::ns_pid (3stap), .BR .IR \%function::tid (3stap), .BR .IR \%function::ns_tid (3stap), .BR .IR \%function::ppid (3stap), .BR .IR \%function::ns_ppid (3stap), .BR .IR \%function::pgrp (3stap), .BR .IR \%function::ns_pgrp (3stap), .BR .IR \%function::sid (3stap), .BR .IR \%function::ns_sid (3stap), .BR .IR \%function::gid (3stap), .BR .IR \%function::ns_gid (3stap), .BR .IR \%function::egid (3stap), .BR .IR \%function::ns_egid (3stap), .BR .IR \%function::uid (3stap), .BR .IR \%function::ns_uid (3stap), .BR .IR \%function::euid (3stap), .BR .IR \%function::ns_euid (3stap), .BR .IR \%function::is_myproc (3stap), .BR .IR \%function::cpuid (3stap), .BR .IR \%function::cpu (3stap), .BR .IR \%function::registers_valid (3stap), .BR .IR \%function::user_mode (3stap), .BR .IR \%function::is_return (3stap), .BR .IR \%function::target (3stap), .BR .IR \%function::module_name (3stap), .BR .IR \%function::module_size (3stap), .BR .IR \%function::stp_pid (3stap), .BR .IR \%function::remote_id (3stap), .BR .IR \%function::remote_uri (3stap), .BR .IR \%function::stack_size (3stap), .BR .IR \%function::stack_used (3stap), .BR .IR \%function::stack_unused (3stap), .BR .IR \%function::addr (3stap), .BR .IR \%function::uaddr (3stap), .BR .IR \%function::cmdline_args (3stap), .BR .IR \%function::cmdline_arg (3stap), .BR .IR \%function::cmdline_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions-guru.3stap000066400000000000000000000027101414446751200312630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS-GURU 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::conversions-guru \- systemtap conversions-guru tapset .SH DESCRIPTION .TP .P .TP .B set_kernel_string Writes a string to kernel memory .IP See .IR function::set_kernel_string (3stap) for details. .P .TP .B set_kernel_string_n Writes a string of given length to kernel memory .IP See .IR function::set_kernel_string_n (3stap) for details. .P .TP .B set_kernel_long Writes a long value to kernel memory .IP See .IR function::set_kernel_long (3stap) for details. .P .TP .B set_kernel_int Writes an int value to kernel memory .IP See .IR function::set_kernel_int (3stap) for details. .P .TP .B set_kernel_short Writes a short value to kernel memory .IP See .IR function::set_kernel_short (3stap) for details. .P .TP .B set_kernel_char Writes a char value to kernel memory .IP See .IR function::set_kernel_char (3stap) for details. .P .TP .B set_kernel_pointer Writes a pointer value to kernel memory. .IP See .IR function::set_kernel_pointer (3stap) for details. .SH SEE ALSO .BR .IR \%function::set_kernel_string (3stap), .BR .IR \%function::set_kernel_string_n (3stap), .BR .IR \%function::set_kernel_long (3stap), .BR .IR \%function::set_kernel_int (3stap), .BR .IR \%function::set_kernel_short (3stap), .BR .IR \%function::set_kernel_char (3stap), .BR .IR \%function::set_kernel_pointer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::conversions.3stap000066400000000000000000000065651414446751200303170ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CONVERSIONS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::conversions \- systemtap conversions tapset .SH DESCRIPTION .TP .P .TP .B kernel_string Retrieves string from kernel memory .IP See .IR function::kernel_string (3stap) for details. .P .TP .B kernel_string Retrieves string from kernel memory with alternative error string .IP See .IR function::kernel_string (3stap) for details. .P .TP .B kernel_string_quoted Retrieves and quotes string from kernel memory .IP See .IR function::kernel_string_quoted (3stap) for details. .P .TP .B kernel_string_n Retrieves string of given length from kernel memory .IP See .IR function::kernel_string_n (3stap) for details. .P .TP .B kernel_string_utf32 Retrieves UTF-32 string from kernel memory .IP See .IR function::kernel_string_utf32 (3stap) for details. .P .TP .B kernel_string_utf32 Retrieves UTF-32 string from kernel memory with alternative error string .IP See .IR function::kernel_string_utf32 (3stap) for details. .P .TP .B kernel_string_quoted_utf32 Quote given UTF-32 kernel string. .IP See .IR function::kernel_string_quoted_utf32 (3stap) for details. .P .TP .B kernel_string_utf16 Retrieves UTF-16 string from kernel memory .IP See .IR function::kernel_string_utf16 (3stap) for details. .P .TP .B kernel_string_utf16 Retrieves UTF-16 string from kernel memory with alternative error string .IP See .IR function::kernel_string_utf16 (3stap) for details. .P .TP .B kernel_string_quoted_utf16 Quote given kernel UTF-16 string. .IP See .IR function::kernel_string_quoted_utf16 (3stap) for details. .P .TP .B kernel_long Retrieves a long value stored in kernel memory .IP See .IR function::kernel_long (3stap) for details. .P .TP .B kernel_int Retrieves an int value stored in kernel memory .IP See .IR function::kernel_int (3stap) for details. .P .TP .B kernel_short Retrieves a short value stored in kernel memory .IP See .IR function::kernel_short (3stap) for details. .P .TP .B kernel_char Retrieves a char value stored in kernel memory .IP See .IR function::kernel_char (3stap) for details. .P .TP .B kernel_pointer Retrieves a pointer value stored in kernel memory .IP See .IR function::kernel_pointer (3stap) for details. .P .TP .B kernel_buffer_quoted Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted (3stap) for details. .P .TP .B kernel_buffer_quoted Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted (3stap) for details. .P .TP .B kernel_buffer_quoted_error Retrieves and quotes buffer from kernel space .IP See .IR function::kernel_buffer_quoted_error (3stap) for details. .SH SEE ALSO .BR .IR \%function::kernel_string (3stap), .BR .IR \%function::kernel_string_quoted (3stap), .BR .IR \%function::kernel_string_n (3stap), .BR .IR \%function::kernel_string_utf32 (3stap), .BR .IR \%function::kernel_string_quoted_utf32 (3stap), .BR .IR \%function::kernel_string_utf16 (3stap), .BR .IR \%function::kernel_string_quoted_utf16 (3stap), .BR .IR \%function::kernel_long (3stap), .BR .IR \%function::kernel_int (3stap), .BR .IR \%function::kernel_short (3stap), .BR .IR \%function::kernel_char (3stap), .BR .IR \%function::kernel_pointer (3stap), .BR .IR \%function::kernel_buffer_quoted (3stap), .BR .IR \%function::kernel_buffer_quoted_error (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ctime.3stap000066400000000000000000000010061414446751200270310ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::CTIME 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ctime \- systemtap ctime tapset .SH DESCRIPTION .TP .P .TP .B ctime Convert seconds since epoch into human readable date/time string .IP See .IR function::ctime (3stap) for details. .P .TP .B ctime Convert seconds since epoch into human readable date/time string .IP See .IR function::ctime (3stap) for details. .SH SEE ALSO .BR .IR \%function::ctime (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::dentry.3stap000066400000000000000000000003341414446751200272400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DENTRY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::dentry \- systemtap dentry tapset .SH DESCRIPTION .TP .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::dev.3stap000066400000000000000000000016331414446751200265140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::DEV 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::dev \- systemtap dev tapset .SH DESCRIPTION .TP .P .TP .B MAJOR Extract major device number from a kernel device number (kdev_t) .IP See .IR function::MAJOR (3stap) for details. .P .TP .B MINOR Extract minor device number from a kernel device number (kdev_t) .IP See .IR function::MINOR (3stap) for details. .P .TP .B MKDEF Creates a value that can be compared to a kernel device number (kdev_t) .IP See .IR function::MKDEF (3stap) for details. .P .TP .B usrdev2kerndev Converts a user-space device number into the format used in the kernel .IP See .IR function::usrdev2kerndev (3stap) for details. .SH SEE ALSO .BR .IR \%function::MAJOR (3stap), .BR .IR \%function::MINOR (3stap), .BR .IR \%function::MKDEF (3stap), .BR .IR \%function::usrdev2kerndev (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::errno.3stap000066400000000000000000000015061414446751200270620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::ERRNO 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::errno \- systemtap errno tapset .SH DESCRIPTION .TP .P .TP .B errno_str Symbolic string associated with error code .IP See .IR function::errno_str (3stap) for details. .P .TP .B returnval Possible return value of probed function .IP See .IR function::returnval (3stap) for details. .P .TP .B returnstr Formats the return value as a string .IP See .IR function::returnstr (3stap) for details. .P .TP .B return_str Formats the return value as a string .IP See .IR function::return_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::errno_str (3stap), .BR .IR \%function::returnval (3stap), .BR .IR \%function::returnstr (3stap), .BR .IR \%function::return_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::floatingpoint.3stap000066400000000000000000000043201414446751200306070ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::FLOATINGPOINT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::floatingpoint \- systemtap floatingpoint tapset .SH DESCRIPTION .TP .P .TP .B fp_to_string Convert 64 bit floating point to string .IP See .IR function::fp_to_string (3stap) for details. .P .TP .B string_to_fp Convert the given string into floating point .IP See .IR function::string_to_fp (3stap) for details. .P .TP .B long_to_fp Convert long int to 64 bit floating point .IP See .IR function::long_to_fp (3stap) for details. .P .TP .B fp_to_long Convert fp to int64 .IP See .IR function::fp_to_long (3stap) for details. .P .TP .B fp_add Addition between floating points .IP See .IR function::fp_add (3stap) for details. .P .TP .B fp_sub Subtraction between floating points .IP See .IR function::fp_sub (3stap) for details. .P .TP .B fp_mul Multiplication between floating points .IP See .IR function::fp_mul (3stap) for details. .P .TP .B fp_div fp divide .IP See .IR function::fp_div (3stap) for details. .P .TP .B fp_rem Floating point division .IP See .IR function::fp_rem (3stap) for details. .P .TP .B fp_sqrt Floating point square root .IP See .IR function::fp_sqrt (3stap) for details. .P .TP .B fp_eq fp comparison function equal .IP See .IR function::fp_eq (3stap) for details. .P .TP .B fp_le Check if first fp is less than or equal to .IP See .IR function::fp_le (3stap) for details. .P .TP .B fp_lt fp comparison function less than .IP See .IR function::fp_lt (3stap) for details. .P .TP .B fp32_to_fp64 Convert fp32 to 64 bit floating point .IP See .IR function::fp32_to_fp64 (3stap) for details. .SH SEE ALSO .BR .IR \%function::fp_to_string (3stap), .BR .IR \%function::string_to_fp (3stap), .BR .IR \%function::long_to_fp (3stap), .BR .IR \%function::fp_to_long (3stap), .BR .IR \%function::fp_add (3stap), .BR .IR \%function::fp_sub (3stap), .BR .IR \%function::fp_mul (3stap), .BR .IR \%function::fp_div (3stap), .BR .IR \%function::fp_rem (3stap), .BR .IR \%function::fp_sqrt (3stap), .BR .IR \%function::fp_eq (3stap), .BR .IR \%function::fp_le (3stap), .BR .IR \%function::fp_lt (3stap), .BR .IR \%function::fp32_to_fp64 (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-delay.3stap000066400000000000000000000013461414446751200300150ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-DELAY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::guru-delay \- systemtap guru-delay tapset .SH DESCRIPTION Functions in the guru-delay tapset allow a probe handler to insert deliberate delays. This is sometimes useful as a fault-injection aid. Due to its likelihood of interference with the kernel, guru mode is required, and overload-prevention is suppressed. .TP .P .TP .B mdelay millisecond delay .IP See .IR function::mdelay (3stap) for details. .P .TP .B udelay microsecond delay .IP See .IR function::udelay (3stap) for details. .SH SEE ALSO .BR .IR \%function::mdelay (3stap), .BR .IR \%function::udelay (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::guru-signal.3stap000066400000000000000000000010671414446751200301740ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::GURU-SIGNAL 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::guru-signal \- systemtap guru-signal tapset .SH DESCRIPTION Functions in the guru-signal tapset allow a probe handler to queue a user-space signals. Such operations may only be safe from some kinds of probe points, therefore are guru-mode only. .TP .P .TP .B raise raise a signal in the current thread .IP See .IR function::raise (3stap) for details. .SH SEE ALSO .BR .IR \%function::raise (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::indent.3stap000066400000000000000000000016011414446751200272120ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INDENT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::indent \- systemtap indent tapset .SH DESCRIPTION .TP .P .TP .B thread_indent returns an amount of space with the current task information .IP See .IR function::thread_indent (3stap) for details. .P .TP .B thread_indent_depth returns the nested-depth of the current task .IP See .IR function::thread_indent_depth (3stap) for details. .P .TP .B indent returns an amount of space to indent .IP See .IR function::indent (3stap) for details. .P .TP .B indent_depth returns the global nested-depth .IP See .IR function::indent_depth (3stap) for details. .SH SEE ALSO .BR .IR \%function::thread_indent (3stap), .BR .IR \%function::thread_indent_depth (3stap), .BR .IR \%function::indent (3stap), .BR .IR \%function::indent_depth (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet.3stap000066400000000000000000000021541414446751200266740ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::inet \- systemtap inet tapset .SH DESCRIPTION .TP .P .TP .B htonll Convert 64-bit long long from host to network order .IP See .IR function::htonll (3stap) for details. .P .TP .B htonl Convert 32-bit long from host to network order .IP See .IR function::htonl (3stap) for details. .P .TP .B htons Convert 16-bit short from host to network order .IP See .IR function::htons (3stap) for details. .P .TP .B ntohll Convert 64-bit long long from network to host order .IP See .IR function::ntohll (3stap) for details. .P .TP .B ntohl Convert 32-bit long from network to host order .IP See .IR function::ntohl (3stap) for details. .P .TP .B ntohs Convert 16-bit short from network to host order .IP See .IR function::ntohs (3stap) for details. .SH SEE ALSO .BR .IR \%function::htonll (3stap), .BR .IR \%function::htonl (3stap), .BR .IR \%function::htons (3stap), .BR .IR \%function::ntohll (3stap), .BR .IR \%function::ntohl (3stap), .BR .IR \%function::ntohs (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::inet_sock.3stap000066400000000000000000000011471414446751200277140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::INET_SOCK 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::inet_sock \- systemtap inet_sock tapset .SH DESCRIPTION .TP .P .TP .B inet_get_local_port Provide local port number for a kernel socket .IP See .IR function::inet_get_local_port (3stap) for details. .P .TP .B inet_get_ip_source Provide IP source address string for a kernel socket .IP See .IR function::inet_get_ip_source (3stap) for details. .SH SEE ALSO .BR .IR \%function::inet_get_local_port (3stap), .BR .IR \%function::inet_get_ip_source (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioblock.3stap000066400000000000000000000022451414446751200273600ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOBLOCK 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ioblock \- systemtap ioblock tapset .SH DESCRIPTION .TP .P .TP .B ioblock.request Fires whenever making a generic block I/O request. .IP See .IR probe::ioblock.request (3stap) for details. .P .TP .B ioblock.end Fires whenever a block I/O transfer is complete. .IP See .IR probe::ioblock.end (3stap) for details. .P .TP .B ioblock_trace.bounce Fires whenever a buffer bounce is needed for at least one page of a block IO request. .IP See .IR probe::ioblock_trace.bounce (3stap) for details. .P .TP .B ioblock_trace.request Fires just as a generic block I/O request is created for a bio. .IP See .IR probe::ioblock_trace.request (3stap) for details. .P .TP .B ioblock_trace.end Fires whenever a block I/O transfer is complete. .IP See .IR probe::ioblock_trace.end (3stap) for details. .SH SEE ALSO .BR .IR \%probe::ioblock.request (3stap), .BR .IR \%probe::ioblock.end (3stap), .BR .IR \%probe::ioblock_trace.bounce (3stap), .BR .IR \%probe::ioblock_trace.request (3stap), .BR .IR \%probe::ioblock_trace.end (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ioscheduler.3stap000066400000000000000000000061631414446751200302470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IOSCHEDULER 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ioscheduler \- systemtap ioscheduler tapset .SH DESCRIPTION This family of probe points is used to probe IO scheduler activities. .TP .P .TP .B ioscheduler.elv_next_request Fires when a request is retrieved from the request queue .IP See .IR probe::ioscheduler.elv_next_request (3stap) for details. .P .TP .B ioscheduler.elv_next_request.return Fires when a request retrieval issues a return signal .IP See .IR probe::ioscheduler.elv_next_request.return (3stap) for details. .P .TP .B ioscheduler.elv_completed_request Fires when a request is completed .IP See .IR probe::ioscheduler.elv_completed_request (3stap) for details. .P .TP .B ioscheduler.elv_add_request.kp kprobe based probe to indicate that a request was added to the request queue .IP See .IR probe::ioscheduler.elv_add_request.kp (3stap) for details. .P .TP .B ioscheduler.elv_add_request.tp tracepoint based probe to indicate a request is added to the request queue. .IP See .IR probe::ioscheduler.elv_add_request.tp (3stap) for details. .P .TP .B ioscheduler.elv_add_request probe to indicate request is added to the request queue. .IP See .IR probe::ioscheduler.elv_add_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_completed_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_completed_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_issue_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_issue_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_requeue_request Fires when a request is .IP See .IR probe::ioscheduler_trace.elv_requeue_request (3stap) for details. .P .TP .B ioscheduler_trace.elv_abort_request Fires when a request is aborted. .IP See .IR probe::ioscheduler_trace.elv_abort_request (3stap) for details. .P .TP .B ioscheduler_trace.plug Fires when a request queue is plugged; .IP See .IR probe::ioscheduler_trace.plug (3stap) for details. .P .TP .B ioscheduler_trace.unplug_io Fires when a request queue is unplugged; .IP See .IR probe::ioscheduler_trace.unplug_io (3stap) for details. .P .TP .B ioscheduler_trace.unplug_timer Fires when unplug timer associated .IP See .IR probe::ioscheduler_trace.unplug_timer (3stap) for details. .SH SEE ALSO .BR .IR \%probe::ioscheduler.elv_next_request (3stap), .BR .IR \%probe::ioscheduler.elv_next_request.return (3stap), .BR .IR \%probe::ioscheduler.elv_completed_request (3stap), .BR .IR \%probe::ioscheduler.elv_add_request.kp (3stap), .BR .IR \%probe::ioscheduler.elv_add_request.tp (3stap), .BR .IR \%probe::ioscheduler.elv_add_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_completed_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_issue_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_requeue_request (3stap), .BR .IR \%probe::ioscheduler_trace.elv_abort_request (3stap), .BR .IR \%probe::ioscheduler_trace.plug (3stap), .BR .IR \%probe::ioscheduler_trace.unplug_io (3stap), .BR .IR \%probe::ioscheduler_trace.unplug_timer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ip.3stap000066400000000000000000000010421414446751200263400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IP 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ip \- systemtap ip tapset .SH DESCRIPTION .TP .P .TP .B format_ipaddr Returns a string representation for an IP address .IP See .IR function::format_ipaddr (3stap) for details. .P .TP .B ip_ntop Returns a string representation for an IPv4 address .IP See .IR function::ip_ntop (3stap) for details. .SH SEE ALSO .BR .IR \%function::format_ipaddr (3stap), .BR .IR \%function::ip_ntop (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib-filter-default.3stap000066400000000000000000000006711414446751200317440ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB-FILTER-DEFAULT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ipmib-filter-default \- systemtap ipmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B ipmib_filter_key Default filter function for ipmib.* probes .IP See .IR function::ipmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::ipmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ipmib.3stap000066400000000000000000000055601414446751200270410ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IPMIB 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ipmib \- systemtap ipmib tapset .SH DESCRIPTION .TP .P .TP .B ipmib_remote_addr Get the remote ip address .IP See .IR function::ipmib_remote_addr (3stap) for details. .P .TP .B ipmib_local_addr Get the local ip address .IP See .IR function::ipmib_local_addr (3stap) for details. .P .TP .B ipmib_tcp_remote_port Get the remote tcp port .IP See .IR function::ipmib_tcp_remote_port (3stap) for details. .P .TP .B ipmib_tcp_local_port Get the local tcp port .IP See .IR function::ipmib_tcp_local_port (3stap) for details. .P .TP .B ipmib_get_proto Get the protocol value .IP See .IR function::ipmib_get_proto (3stap) for details. .P .TP .B ipmib.InReceives Count an arriving packet .IP See .IR probe::ipmib.InReceives (3stap) for details. .P .TP .B ipmib.InNoRoutes Count an arriving packet with no matching socket .IP See .IR probe::ipmib.InNoRoutes (3stap) for details. .P .TP .B ipmib.InAddrErrors Count arriving packets with an incorrect address .IP See .IR probe::ipmib.InAddrErrors (3stap) for details. .P .TP .B ipmib.InUnknownProtos Count arriving packets with an unbound proto .IP See .IR probe::ipmib.InUnknownProtos (3stap) for details. .P .TP .B ipmib.InDiscards Count discarded inbound packets .IP See .IR probe::ipmib.InDiscards (3stap) for details. .P .TP .B ipmib.ForwDatagrams Count forwarded packet .IP See .IR probe::ipmib.ForwDatagrams (3stap) for details. .P .TP .B ipmib.OutRequests Count a request to send a packet .IP See .IR probe::ipmib.OutRequests (3stap) for details. .P .TP .B ipmib.ReasmTimeout Count Reassembly Timeouts .IP See .IR probe::ipmib.ReasmTimeout (3stap) for details. .P .TP .B ipmib.ReasmReqds Count number of packet fragments reassembly requests .IP See .IR probe::ipmib.ReasmReqds (3stap) for details. .P .TP .B ipmib.FragOKs Count datagram fragmented successfully .IP See .IR probe::ipmib.FragOKs (3stap) for details. .P .TP .B ipmib.FragFails Count datagram fragmented unsuccessfully .IP See .IR probe::ipmib.FragFails (3stap) for details. .SH SEE ALSO .BR .IR \%function::ipmib_remote_addr (3stap), .BR .IR \%function::ipmib_local_addr (3stap), .BR .IR \%function::ipmib_tcp_remote_port (3stap), .BR .IR \%function::ipmib_tcp_local_port (3stap), .BR .IR \%function::ipmib_get_proto (3stap), .BR .IR \%probe::ipmib.InReceives (3stap), .BR .IR \%probe::ipmib.InNoRoutes (3stap), .BR .IR \%probe::ipmib.InAddrErrors (3stap), .BR .IR \%probe::ipmib.InUnknownProtos (3stap), .BR .IR \%probe::ipmib.InDiscards (3stap), .BR .IR \%probe::ipmib.ForwDatagrams (3stap), .BR .IR \%probe::ipmib.OutRequests (3stap), .BR .IR \%probe::ipmib.ReasmTimeout (3stap), .BR .IR \%probe::ipmib.ReasmReqds (3stap), .BR .IR \%probe::ipmib.FragOKs (3stap), .BR .IR \%probe::ipmib.FragFails (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::irq.3stap000066400000000000000000000027731414446751200265370ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::IRQ 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::irq \- systemtap irq tapset .SH DESCRIPTION .TP .P .TP .B workqueue.create Creating a new workqueue .IP See .IR probe::workqueue.create (3stap) for details. .P .TP .B workqueue.insert Queuing work on a workqueue .IP See .IR probe::workqueue.insert (3stap) for details. .P .TP .B workqueue.execute Executing deferred work .IP See .IR probe::workqueue.execute (3stap) for details. .P .TP .B workqueue.destroy Destroying workqueue .IP See .IR probe::workqueue.destroy (3stap) for details. .P .TP .B irq_handler.entry Execution of interrupt handler starting .IP See .IR probe::irq_handler.entry (3stap) for details. .P .TP .B irq_handler.exit Execution of interrupt handler completed .IP See .IR probe::irq_handler.exit (3stap) for details. .P .TP .B softirq.entry Execution of handler for a pending softirq starting .IP See .IR probe::softirq.entry (3stap) for details. .P .TP .B softirq.exit Execution of handler for a pending softirq completed .IP See .IR probe::softirq.exit (3stap) for details. .SH SEE ALSO .BR .IR \%probe::workqueue.create (3stap), .BR .IR \%probe::workqueue.insert (3stap), .BR .IR \%probe::workqueue.execute (3stap), .BR .IR \%probe::workqueue.destroy (3stap), .BR .IR \%probe::irq_handler.entry (3stap), .BR .IR \%probe::irq_handler.exit (3stap), .BR .IR \%probe::softirq.entry (3stap), .BR .IR \%probe::softirq.exit (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::json.3stap000066400000000000000000000055271414446751200267150ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::JSON 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::json \- systemtap json tapset .SH DESCRIPTION The JSON tapset provides probes, functions, and macros to generate a JSON metadata and data file. The JSON metadata file is located in /proc/systemtap/MODULE/metadata.json. The JSON data file is located in /proc/systemtap/MODULE/data.json. The JSON data file is updated with current data every time the file is read. .TP .P .TP .B json_set_prefix Set the metric prefix. .IP See .IR function::json_set_prefix (3stap) for details. .P .TP .B json_add_numeric_metric Add a numeric metric .IP See .IR function::json_add_numeric_metric (3stap) for details. .P .TP .B json_add_string_metric Add a string metric .IP See .IR function::json_add_string_metric (3stap) for details. .P .TP .B json_add_array Add an array .IP See .IR function::json_add_array (3stap) for details. .P .TP .B json_add_array_numeric_metric Add a numeric metric to an array .IP See .IR function::json_add_array_numeric_metric (3stap) for details. .P .TP .B json_add_array_string_metric Add a string metric to an array .IP See .IR function::json_add_array_string_metric (3stap) for details. .P .TP .B json_data Fires whenever JSON data is wanted by a reader. .IP See .IR probe::json_data (3stap) for details. .P .TP .B @json_output_data_start Start the json output. .IP See .IR macro::json_output_data_start (3stap) for details. .P .TP .B @json_output_string_value Output a string value. .IP See .IR macro::json_output_string_value (3stap) for details. .P .TP .B @json_output_numeric_value Output a numeric value. .IP See .IR macro::json_output_numeric_value (3stap) for details. .P .TP .B @json_output_array_string_value Output a string value for metric in an array. .IP See .IR macro::json_output_array_string_value (3stap) for details. .P .TP .B @json_output_array_numeric_value Output a numeric value for metric in an array. .IP See .IR macro::json_output_array_numeric_value (3stap) for details. .P .TP .B @json_output_data_end End the json output. .IP See .IR macro::json_output_data_end (3stap) for details. .SH SEE ALSO .BR .IR \%function::json_set_prefix (3stap), .BR .IR \%function::json_add_numeric_metric (3stap), .BR .IR \%function::json_add_string_metric (3stap), .BR .IR \%function::json_add_array (3stap), .BR .IR \%function::json_add_array_numeric_metric (3stap), .BR .IR \%function::json_add_array_string_metric (3stap), .BR .IR \%probe::json_data (3stap), .BR .IR \%macro::json_output_data_start (3stap), .BR .IR \%macro::json_output_string_value (3stap), .BR .IR \%macro::json_output_numeric_value (3stap), .BR .IR \%macro::json_output_array_string_value (3stap), .BR .IR \%macro::json_output_array_numeric_value (3stap), .BR .IR \%macro::json_output_data_end (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::kprocess.3stap000066400000000000000000000023621414446751200275670ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::KPROCESS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::kprocess \- systemtap kprocess tapset .SH DESCRIPTION This family of probe points is used to probe process-related activities. .TP .P .TP .B kprocess.create Fires whenever a new process or thread is successfully created .IP See .IR probe::kprocess.create (3stap) for details. .P .TP .B kprocess.start Starting new process .IP See .IR probe::kprocess.start (3stap) for details. .P .TP .B kprocess.exec Attempt to exec to a new program .IP See .IR probe::kprocess.exec (3stap) for details. .P .TP .B kprocess.exec_complete Return from exec to a new program .IP See .IR probe::kprocess.exec_complete (3stap) for details. .P .TP .B kprocess.exit Exit from process .IP See .IR probe::kprocess.exit (3stap) for details. .P .TP .B kprocess.release Process released .IP See .IR probe::kprocess.release (3stap) for details. .SH SEE ALSO .BR .IR \%probe::kprocess.create (3stap), .BR .IR \%probe::kprocess.start (3stap), .BR .IR \%probe::kprocess.exec (3stap), .BR .IR \%probe::kprocess.exec_complete (3stap), .BR .IR \%probe::kprocess.exit (3stap), .BR .IR \%probe::kprocess.release (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib-filter-default.3stap000066400000000000000000000007161414446751200324730ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB-FILTER-DEFAULT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::linuxmib-filter-default \- systemtap linuxmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B linuxmib_filter_key Default filter function for linuxmib.* probes .IP See .IR function::linuxmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::linuxmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::linuxmib.3stap000066400000000000000000000017241414446751200275660ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LINUXMIB 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::linuxmib \- systemtap linuxmib tapset .SH DESCRIPTION .TP .P .TP .B linuxmib.DelayedACKs Count of delayed acks .IP See .IR probe::linuxmib.DelayedACKs (3stap) for details. .P .TP .B linuxmib.ListenOverflows Count of times a listen queue overflowed .IP See .IR probe::linuxmib.ListenOverflows (3stap) for details. .P .TP .B linuxmib.ListenDrops Count of times conn request that were dropped .IP See .IR probe::linuxmib.ListenDrops (3stap) for details. .P .TP .B linuxmib.TCPMemoryPressures Count of times memory pressure was used .IP See .IR probe::linuxmib.TCPMemoryPressures (3stap) for details. .SH SEE ALSO .BR .IR \%probe::linuxmib.DelayedACKs (3stap), .BR .IR \%probe::linuxmib.ListenOverflows (3stap), .BR .IR \%probe::linuxmib.ListenDrops (3stap), .BR .IR \%probe::linuxmib.TCPMemoryPressures (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::loadavg.3stap000066400000000000000000000012261414446751200273510ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOADAVG 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::loadavg \- systemtap loadavg tapset .SH DESCRIPTION Functions in the loadavg tapset allow a probe handler to capture the load average. .TP .P .TP .B get_loadavg_index Get the load average for a specified interval .IP See .IR function::get_loadavg_index (3stap) for details. .P .TP .B sprint_loadavg Report a pretty-printed load average .IP See .IR function::sprint_loadavg (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_loadavg_index (3stap), .BR .IR \%function::sprint_loadavg (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::logging.3stap000066400000000000000000000030531414446751200273620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::LOGGING 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::logging \- systemtap logging tapset .SH DESCRIPTION .TP .P .TP .B log Send a line to the common trace buffer .IP See .IR function::log (3stap) for details. .P .TP .B warn Send a line to the warning stream .IP See .IR function::warn (3stap) for details. .P .TP .B exit Start shutting down probing script. .IP See .IR function::exit (3stap) for details. .P .TP .B abort Immediately shutting down probing script. .IP See .IR function::abort (3stap) for details. .P .TP .B error Send an error message .IP See .IR function::error (3stap) for details. .P .TP .B assert evaluate assertion .IP See .IR function::assert (3stap) for details. .P .TP .B assert evaluate assertion .IP See .IR function::assert (3stap) for details. .P .TP .B ftrace Send a message to the ftrace ring-buffer .IP See .IR function::ftrace (3stap) for details. .P .TP .B printk Send a message to the kernel trace buffer .IP See .IR function::printk (3stap) for details. .P .TP .B dump_stack Send the kernel backtrace to the kernel trace buffer .IP See .IR function::dump_stack (3stap) for details. .SH SEE ALSO .BR .IR \%function::log (3stap), .BR .IR \%function::warn (3stap), .BR .IR \%function::exit (3stap), .BR .IR \%function::abort (3stap), .BR .IR \%function::error (3stap), .BR .IR \%function::assert (3stap), .BR .IR \%function::ftrace (3stap), .BR .IR \%function::printk (3stap), .BR .IR \%function::dump_stack (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::memory.3stap000066400000000000000000000056251414446751200272530ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::MEMORY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::memory \- systemtap memory tapset .SH DESCRIPTION This family of probe points is used to probe memory-related events. .TP .P .TP .B vm_fault_contains Test return value for page fault reason .IP See .IR function::vm_fault_contains (3stap) for details. .P .TP .B vm.pagefault Records that a page fault occurred .IP See .IR probe::vm.pagefault (3stap) for details. .P .TP .B vm.pagefault.return Indicates what type of fault occurred .IP See .IR probe::vm.pagefault.return (3stap) for details. .P .TP .B addr_to_node Returns which node a given address belongs to within a NUMA system .IP See .IR function::addr_to_node (3stap) for details. .P .TP .B vm.write_shared Attempts at writing to a shared page .IP See .IR probe::vm.write_shared (3stap) for details. .P .TP .B vm.write_shared_copy Page copy for shared page write .IP See .IR probe::vm.write_shared_copy (3stap) for details. .P .TP .B vm.mmap Fires when an mmap is requested .IP See .IR probe::vm.mmap (3stap) for details. .P .TP .B vm.munmap Fires when an munmap is requested .IP See .IR probe::vm.munmap (3stap) for details. .P .TP .B vm.brk Fires when a brk is requested (i.e. the heap will be resized) .IP See .IR probe::vm.brk (3stap) for details. .P .TP .B vm.oom_kill Fires when a thread is selected for termination by the OOM killer .IP See .IR probe::vm.oom_kill (3stap) for details. .P .TP .B vm.kmalloc Fires when kmalloc is requested .IP See .IR probe::vm.kmalloc (3stap) for details. .P .TP .B vm.kmem_cache_alloc Fires when kmem_cache_alloc is requested .IP See .IR probe::vm.kmem_cache_alloc (3stap) for details. .P .TP .B vm.kmalloc_node Fires when kmalloc_node is requested .IP See .IR probe::vm.kmalloc_node (3stap) for details. .P .TP .B vm.kmem_cache_alloc_node Fires when kmem_cache_alloc_node is requested .IP See .IR probe::vm.kmem_cache_alloc_node (3stap) for details. .P .TP .B vm.kfree Fires when kfree is requested .IP See .IR probe::vm.kfree (3stap) for details. .P .TP .B vm.kmem_cache_free Fires when kmem_cache_free is requested .IP See .IR probe::vm.kmem_cache_free (3stap) for details. .SH SEE ALSO .BR .IR \%function::vm_fault_contains (3stap), .BR .IR \%function::addr_to_node (3stap), .BR .IR \%probe::vm.pagefault (3stap), .BR .IR \%probe::vm.pagefault.return (3stap), .BR .IR \%probe::vm.write_shared (3stap), .BR .IR \%probe::vm.write_shared_copy (3stap), .BR .IR \%probe::vm.mmap (3stap), .BR .IR \%probe::vm.munmap (3stap), .BR .IR \%probe::vm.brk (3stap), .BR .IR \%probe::vm.oom_kill (3stap), .BR .IR \%probe::vm.kmalloc (3stap), .BR .IR \%probe::vm.kmem_cache_alloc (3stap), .BR .IR \%probe::vm.kmalloc_node (3stap), .BR .IR \%probe::vm.kmem_cache_alloc_node (3stap), .BR .IR \%probe::vm.kfree (3stap), .BR .IR \%probe::vm.kmem_cache_free (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::netfilter.3stap000066400000000000000000000041511414446751200277300ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETFILTER 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::netfilter \- systemtap netfilter tapset .SH DESCRIPTION .TP .P .TP .B netfilter.ip.pre_routing Called before an IP packet is routed .IP See .IR probe::netfilter.ip.pre_routing (3stap) for details. .P .TP .B netfilter.ip.local_in Called on an incoming IP packet addressed to the local computer .IP See .IR probe::netfilter.ip.local_in (3stap) for details. .P .TP .B netfilter.ip.forward Called on an incoming IP packet addressed to some other computer .IP See .IR probe::netfilter.ip.forward (3stap) for details. .P .TP .B netfilter.ip.local_out Called on an outgoing IP packet .IP See .IR probe::netfilter.ip.local_out (3stap) for details. .P .TP .B netfilter.ip.post_routing Called immediately before an outgoing IP packet leaves the computer .IP See .IR probe::netfilter.ip.post_routing (3stap) for details. .P .TP .B netfilter.bridge.local_in Called on a bridging packet destined for the local computer .IP See .IR probe::netfilter.bridge.local_in (3stap) for details. .P .TP .B netfilter.bridge.forward Called on an incoming bridging packet destined for some other computer .IP See .IR probe::netfilter.bridge.forward (3stap) for details. .P .TP .B netfilter.bridge.local_out Called on a bridging packet coming from a local process .IP See .IR probe::netfilter.bridge.local_out (3stap) for details. .SH SEE ALSO .BR .IR \%probe::netfilter.ip.pre_routing (3stap), .BR .IR \%probe::netfilter.ip.local_in (3stap), .BR .IR \%probe::netfilter.ip.forward (3stap), .BR .IR \%probe::netfilter.ip.local_out (3stap), .BR .IR \%probe::netfilter.ip.post_routing (3stap), .BR .IR \%probe::netfilter.arp.in (3stap), .BR .IR \%probe::netfilter.arp.out (3stap), .BR .IR \%probe::netfilter.arp.forward (3stap), .BR .IR \%probe::netfilter.bridge.pre_routing (3stap), .BR .IR \%probe::netfilter.bridge.local_in (3stap), .BR .IR \%probe::netfilter.bridge.forward (3stap), .BR .IR \%probe::netfilter.bridge.local_out (3stap), .BR .IR \%probe::netfilter.bridge.post_routing (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::networking.3stap000066400000000000000000000052401414446751200301230ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NETWORKING 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::networking \- systemtap networking tapset .SH DESCRIPTION This family of probe points is used to probe the activities of the network device. .TP .P .TP .B netdev.receive Data received from network device. .IP See .IR probe::netdev.receive (3stap) for details. .P .TP .B netdev.transmit Network device transmitting buffer .IP See .IR probe::netdev.transmit (3stap) for details. .P .TP .B netdev.change_mtu Called when the netdev MTU is changed .IP See .IR probe::netdev.change_mtu (3stap) for details. .P .TP .B netdev.open Called when the device is opened .IP See .IR probe::netdev.open (3stap) for details. .P .TP .B netdev.close Called when the device is closed .IP See .IR probe::netdev.close (3stap) for details. .P .TP .B netdev.hard_transmit Called when the devices is going to TX (hard) .IP See .IR probe::netdev.hard_transmit (3stap) for details. .P .TP .B netdev.rx Called when the device is going to receive a packet .IP See .IR probe::netdev.rx (3stap) for details. .P .TP .B netdev.change_rx_flag Called when the device RX flag will be changed .IP See .IR probe::netdev.change_rx_flag (3stap) for details. .P .TP .B netdev.set_promiscuity Called when the device enters/leaves promiscuity .IP See .IR probe::netdev.set_promiscuity (3stap) for details. .P .TP .B netdev.ioctl Called when the device suffers an IOCTL .IP See .IR probe::netdev.ioctl (3stap) for details. .P .TP .B netdev.register Called when the device is registered .IP See .IR probe::netdev.register (3stap) for details. .P .TP .B netdev.unregister Called when the device is being unregistered .IP See .IR probe::netdev.unregister (3stap) for details. .P .TP .B netdev.get_stats Called when someone asks the device statistics .IP See .IR probe::netdev.get_stats (3stap) for details. .P .TP .B netdev.change_mac Called when the netdev_name has the MAC changed .IP See .IR probe::netdev.change_mac (3stap) for details. .SH SEE ALSO .BR .IR \%probe::netdev.receive (3stap), .BR .IR \%probe::netdev.transmit (3stap), .BR .IR \%probe::netdev.change_mtu (3stap), .BR .IR \%probe::netdev.open (3stap), .BR .IR \%probe::netdev.close (3stap), .BR .IR \%probe::netdev.hard_transmit (3stap), .BR .IR \%probe::netdev.rx (3stap), .BR .IR \%probe::netdev.change_rx_flag (3stap), .BR .IR \%probe::netdev.set_promiscuity (3stap), .BR .IR \%probe::netdev.ioctl (3stap), .BR .IR \%probe::netdev.register (3stap), .BR .IR \%probe::netdev.unregister (3stap), .BR .IR \%probe::netdev.get_stats (3stap), .BR .IR \%probe::netdev.change_mac (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs.3stap000066400000000000000000000076301414446751200265270ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::nfs \- systemtap nfs tapset .SH DESCRIPTION .TP .P .TP .B nfs.fop.llseek NFS client llseek operation .IP See .IR probe::nfs.fop.llseek (3stap) for details. .P .TP .B nfs.fop.read NFS client read operation .IP See .IR probe::nfs.fop.read (3stap) for details. .P .TP .B nfs.fop.write NFS client write operation .IP See .IR probe::nfs.fop.write (3stap) for details. .P .TP .B nfs.fop.aio_read NFS client aio_read file operation .IP See .IR probe::nfs.fop.aio_read (3stap) for details. .P .TP .B nfs.fop.read_iter NFS client read_iter file operation .IP See .IR probe::nfs.fop.read_iter (3stap) for details. .P .TP .B nfs.fop.aio_write NFS client aio_write file operation .IP See .IR probe::nfs.fop.aio_write (3stap) for details. .P .TP .B nfs.fop.write_iter NFS client write_iter file operation .IP See .IR probe::nfs.fop.write_iter (3stap) for details. .P .TP .B nfs.fop.mmap NFS client mmap operation .IP See .IR probe::nfs.fop.mmap (3stap) for details. .P .TP .B nfs.fop.open NFS client file open operation .IP See .IR probe::nfs.fop.open (3stap) for details. .P .TP .B nfs.fop.flush NFS client flush file operation .IP See .IR probe::nfs.fop.flush (3stap) for details. .P .TP .B nfs.fop.release NFS client release page operation .IP See .IR probe::nfs.fop.release (3stap) for details. .P .TP .B nfs.fop.fsync NFS client fsync operation .IP See .IR probe::nfs.fop.fsync (3stap) for details. .P .TP .B nfs.fop.lock NFS client file lock operation .IP See .IR probe::nfs.fop.lock (3stap) for details. .P .TP .B nfs.fop.sendfile NFS client send file operation .IP See .IR probe::nfs.fop.sendfile (3stap) for details. .P .TP .B nfs.fop.check_flags NFS client checking flag operation .IP See .IR probe::nfs.fop.check_flags (3stap) for details. .P .TP .B nfs.aop.readpage NFS client synchronously reading a page .IP See .IR probe::nfs.aop.readpage (3stap) for details. .P .TP .B nfs.aop.readpages NFS client reading multiple pages .IP See .IR probe::nfs.aop.readpages (3stap) for details. .P .TP .B nfs.aop.set_page_dirty NFS client marking page as dirty .IP See .IR probe::nfs.aop.set_page_dirty (3stap) for details. .P .TP .B nfs.aop.writepage NFS client writing a mapped page to the NFS server .IP See .IR probe::nfs.aop.writepage (3stap) for details. .P .TP .B nfs.aop.writepages NFS client writing several dirty pages to the NFS server .IP See .IR probe::nfs.aop.writepages (3stap) for details. .P .TP .B nfs.aop.write_begin NFS client begin to write data .IP See .IR probe::nfs.aop.write_begin (3stap) for details. .P .TP .B nfs.aop.write_end NFS client complete writing data .IP See .IR probe::nfs.aop.write_end (3stap) for details. .P .TP .B nfs.aop.release_page NFS client releasing page .IP See .IR probe::nfs.aop.release_page (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfs.fop.llseek (3stap), .BR .IR \%probe::nfs.fop.read (3stap), .BR .IR \%probe::nfs.fop.write (3stap), .BR .IR \%probe::nfs.fop.aio_read (3stap), .BR .IR \%probe::nfs.fop.read_iter (3stap), .BR .IR \%probe::nfs.fop.aio_write (3stap), .BR .IR \%probe::nfs.fop.write_iter (3stap), .BR .IR \%probe::nfs.fop.mmap (3stap), .BR .IR \%probe::nfs.fop.open (3stap), .BR .IR \%probe::nfs.fop.flush (3stap), .BR .IR \%probe::nfs.fop.release (3stap), .BR .IR \%probe::nfs.fop.fsync (3stap), .BR .IR \%probe::nfs.fop.lock (3stap), .BR .IR \%probe::nfs.fop.sendfile (3stap), .BR .IR \%probe::nfs.fop.check_flags (3stap), .BR .IR \%probe::nfs.aop.readpage (3stap), .BR .IR \%probe::nfs.aop.readpages (3stap), .BR .IR \%probe::nfs.aop.set_page_dirty (3stap), .BR .IR \%probe::nfs.aop.writepage (3stap), .BR .IR \%probe::nfs.aop.writepages (3stap), .BR .IR \%probe::nfs.aop.write_begin (3stap), .BR .IR \%probe::nfs.aop.write_end (3stap), .BR .IR \%probe::nfs.aop.release_page (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfs_proc.3stap000066400000000000000000000065271414446751200275560ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFS_PROC 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::nfs_proc \- systemtap nfs_proc tapset .SH DESCRIPTION .TP .P .TP .B nfs.proc.lookup NFS client opens/searches a file on server .IP See .IR probe::nfs.proc.lookup (3stap) for details. .P .TP .B nfs.proc.read NFS client synchronously reads file from server .IP See .IR probe::nfs.proc.read (3stap) for details. .P .TP .B nfs.proc.write NFS client synchronously writes file to server .IP See .IR probe::nfs.proc.write (3stap) for details. .P .TP .B nfs.proc.commit NFS client committing data on server .IP See .IR probe::nfs.proc.commit (3stap) for details. .P .TP .B nfs.proc.read_setup NFS client setting up a read RPC task .IP See .IR probe::nfs.proc.read_setup (3stap) for details. .P .TP .B nfs.proc.read_done NFS client response to a read RPC task .IP See .IR probe::nfs.proc.read_done (3stap) for details. .P .TP .B nfs.proc.write_setup NFS client setting up a write RPC task .IP See .IR probe::nfs.proc.write_setup (3stap) for details. .P .TP .B nfs.proc.write_done NFS client response to a write RPC task .IP See .IR probe::nfs.proc.write_done (3stap) for details. .P .TP .B nfs.proc.commit_setup NFS client setting up a commit RPC task .IP See .IR probe::nfs.proc.commit_setup (3stap) for details. .P .TP .B nfs.proc.commit_done NFS client response to a commit RPC task .IP See .IR probe::nfs.proc.commit_done (3stap) for details. .P .TP .B nfs.proc.rename_setup NFS client setting up a rename RPC task .IP See .IR probe::nfs.proc.rename_setup (3stap) for details. .P .TP .B nfs.proc.rename_done NFS client response to a rename RPC task .IP See .IR probe::nfs.proc.rename_done (3stap) for details. .P .TP .B nfs.proc.open NFS client allocates file read/write context information .IP See .IR probe::nfs.proc.open (3stap) for details. .P .TP .B nfs.proc.release NFS client releases file read/write context information .IP See .IR probe::nfs.proc.release (3stap) for details. .P .TP .B nfs.proc.handle_exception NFS client handling an NFSv4 exception .IP See .IR probe::nfs.proc.handle_exception (3stap) for details. .P .TP .B nfs.proc.create NFS client creating file on server .IP See .IR probe::nfs.proc.create (3stap) for details. .P .TP .B nfs.proc.remove NFS client removes a file on server .IP See .IR probe::nfs.proc.remove (3stap) for details. .P .TP .B nfs.proc.rename NFS client renames a file on server .IP See .IR probe::nfs.proc.rename (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfs.proc.lookup (3stap), .BR .IR \%probe::nfs.proc.read (3stap), .BR .IR \%probe::nfs.proc.write (3stap), .BR .IR \%probe::nfs.proc.commit (3stap), .BR .IR \%probe::nfs.proc.read_setup (3stap), .BR .IR \%probe::nfs.proc.read_done (3stap), .BR .IR \%probe::nfs.proc.write_setup (3stap), .BR .IR \%probe::nfs.proc.write_done (3stap), .BR .IR \%probe::nfs.proc.commit_setup (3stap), .BR .IR \%probe::nfs.proc.commit_done (3stap), .BR .IR \%probe::nfs.proc.rename_setup (3stap), .BR .IR \%probe::nfs.proc.rename_done (3stap), .BR .IR \%probe::nfs.proc.open (3stap), .BR .IR \%probe::nfs.proc.release (3stap), .BR .IR \%probe::nfs.proc.handle_exception (3stap), .BR .IR \%probe::nfs.proc.create (3stap), .BR .IR \%probe::nfs.proc.remove (3stap), .BR .IR \%probe::nfs.proc.rename (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsd.3stap000066400000000000000000000060671414446751200266760ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSD 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::nfsd \- systemtap nfsd tapset .SH DESCRIPTION .TP .P .TP .B nfsd.dispatch NFS server receives an operation from client .IP See .IR probe::nfsd.dispatch (3stap) for details. .P .TP .B nfsd.proc.lookup NFS server opening or searching for a file for client .IP See .IR probe::nfsd.proc.lookup (3stap) for details. .P .TP .B nfsd.proc.read NFS server reading file for client .IP See .IR probe::nfsd.proc.read (3stap) for details. .P .TP .B nfsd.proc.write NFS server writing data to file for client .IP See .IR probe::nfsd.proc.write (3stap) for details. .P .TP .B nfsd.proc.commit NFS server performing a commit operation for client .IP See .IR probe::nfsd.proc.commit (3stap) for details. .P .TP .B nfsd.proc.create NFS server creating a file for client .IP See .IR probe::nfsd.proc.create (3stap) for details. .P .TP .B nfsd.proc.remove NFS server removing a file for client .IP See .IR probe::nfsd.proc.remove (3stap) for details. .P .TP .B nfsd.proc.rename NFS Server renaming a file for client .IP See .IR probe::nfsd.proc.rename (3stap) for details. .P .TP .B nfsd.open NFS server opening a file for client .IP See .IR probe::nfsd.open (3stap) for details. .P .TP .B nfsd.close NFS server closing a file for client .IP See .IR probe::nfsd.close (3stap) for details. .P .TP .B nfsd.read NFS server reading data from a file for client .IP See .IR probe::nfsd.read (3stap) for details. .P .TP .B nfsd.write NFS server writing data to a file for client .IP See .IR probe::nfsd.write (3stap) for details. .P .TP .B nfsd.commit NFS server committing all pending writes to stable storage .IP See .IR probe::nfsd.commit (3stap) for details. .P .TP .B nfsd.lookup NFS server opening or searching file for a file for client .IP See .IR probe::nfsd.lookup (3stap) for details. .P .TP .B nfsd.create NFS server creating a file(regular,dir,device,fifo) for client .IP See .IR probe::nfsd.create (3stap) for details. .P .TP .B nfsd.createv3 NFS server creating a regular file or set file attributes for client .IP See .IR probe::nfsd.createv3 (3stap) for details. .P .TP .B nfsd.unlink NFS server removing a file or a directory for client .IP See .IR probe::nfsd.unlink (3stap) for details. .SH SEE ALSO .BR .IR \%probe::nfsd.dispatch (3stap), .BR .IR \%probe::nfsd.proc.lookup (3stap), .BR .IR \%probe::nfsd.proc.read (3stap), .BR .IR \%probe::nfsd.proc.write (3stap), .BR .IR \%probe::nfsd.proc.commit (3stap), .BR .IR \%probe::nfsd.proc.create (3stap), .BR .IR \%probe::nfsd.proc.remove (3stap), .BR .IR \%probe::nfsd.proc.rename (3stap), .BR .IR \%probe::nfsd.open (3stap), .BR .IR \%probe::nfsd.close (3stap), .BR .IR \%probe::nfsd.read (3stap), .BR .IR \%probe::nfsd.write (3stap), .BR .IR \%probe::nfsd.commit (3stap), .BR .IR \%probe::nfsd.lookup (3stap), .BR .IR \%probe::nfsd.create (3stap), .BR .IR \%probe::nfsd.createv3 (3stap), .BR .IR \%probe::nfsd.unlink (3stap), .BR .IR \%probe::nfsd.rename (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::nfsderrno.3stap000066400000000000000000000005761414446751200277430ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::NFSDERRNO 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::nfsderrno \- systemtap nfsderrno tapset .SH DESCRIPTION .TP .P .TP .B nfsderror Convert nfsd error number into string .IP See .IR function::nfsderror (3stap) for details. .SH SEE ALSO .BR .IR \%function::nfsderror (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::panic.3stap000066400000000000000000000013051414446751200270240ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PANIC 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::panic \- systemtap panic tapset .SH DESCRIPTION Functions in the panic tapset allow a probe handler to invoke the system panic routine with a user-specified message. This may be used with a crash dump collection facility such as kexec/kdump in order to capture data for post-mortem debugging. Due to the fact that this will bring the system to an immediate halt the functions in this tapset require guru mode. .TP .P .TP .B panic trigger a panic .IP See .IR function::panic (3stap) for details. .SH SEE ALSO .BR .IR \%function::panic (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::pn.3stap000066400000000000000000000007531414446751200263550ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PN 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::pn \- systemtap pn tapset .SH DESCRIPTION .TP .P .TP .B pn Returns the active probe name .IP See .IR function::pn (3stap) for details. .P .TP .B pnlabel Returns the label name parsed from the probe name .IP See .IR function::pnlabel (3stap) for details. .SH SEE ALSO .BR .IR \%function::pn (3stap), .BR .IR \%function::pnlabel (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::proc_mem.3stap000066400000000000000000000055121414446751200275370ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PROC_MEM 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::proc_mem \- systemtap proc_mem tapset .SH DESCRIPTION Process memory query and utility functions provide information about the memory usage of the current application. These functions provide information about the full size, resident, shared, code and data used by the current process. And provide utility functions to query the page size of the current architecture and create human readable string representations of bytes and pages used. .TP .P .TP .B proc_mem_size Total program virtual memory size in pages .IP See .IR function::proc_mem_size (3stap) for details. .P .TP .B proc_mem_size Total program virtual memory size in pages .IP See .IR function::proc_mem_size (3stap) for details. .P .TP .B proc_mem_rss Program resident set size in pages .IP See .IR function::proc_mem_rss (3stap) for details. .P .TP .B proc_mem_rss Program resident set size in pages .IP See .IR function::proc_mem_rss (3stap) for details. .P .TP .B proc_mem_shr Program shared pages (from shared mappings) .IP See .IR function::proc_mem_shr (3stap) for details. .P .TP .B proc_mem_shr Program shared pages (from shared mappings) .IP See .IR function::proc_mem_shr (3stap) for details. .P .TP .B proc_mem_txt Program text (code) size in pages .IP See .IR function::proc_mem_txt (3stap) for details. .P .TP .B proc_mem_txt Program text (code) size in pages .IP See .IR function::proc_mem_txt (3stap) for details. .P .TP .B proc_mem_data Program data size (data + stack) in pages .IP See .IR function::proc_mem_data (3stap) for details. .P .TP .B proc_mem_data Program data size (data + stack) in pages .IP See .IR function::proc_mem_data (3stap) for details. .P .TP .B mem_page_size Number of bytes in a page for this architecture .IP See .IR function::mem_page_size (3stap) for details. .P .TP .B bytes_to_string Human readable string for given bytes .IP See .IR function::bytes_to_string (3stap) for details. .P .TP .B pages_to_string Turns pages into a human readable string .IP See .IR function::pages_to_string (3stap) for details. .P .TP .B proc_mem_string Human readable string of process memory usage .IP See .IR function::proc_mem_string (3stap) for details. .P .TP .B proc_mem_string Human readable string of process memory usage .IP See .IR function::proc_mem_string (3stap) for details. .SH SEE ALSO .BR .IR \%function::proc_mem_size (3stap), .BR .IR \%function::proc_mem_rss (3stap), .BR .IR \%function::proc_mem_shr (3stap), .BR .IR \%function::proc_mem_txt (3stap), .BR .IR \%function::proc_mem_data (3stap), .BR .IR \%function::mem_page_size (3stap), .BR .IR \%function::bytes_to_string (3stap), .BR .IR \%function::pages_to_string (3stap), .BR .IR \%function::proc_mem_string (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::pstrace.3stap000066400000000000000000000005701414446751200273760ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::PSTRACE 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::pstrace \- systemtap pstrace tapset .SH DESCRIPTION .TP .P .TP .B pstrace Chain of processes and pids back to init(1) .IP See .IR function::pstrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::pstrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::queue_stats.3stap000066400000000000000000000040151414446751200302750ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::QUEUE_STATS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::queue_stats \- systemtap queue_stats tapset .SH DESCRIPTION .TP .P .TP .B qs_wait Function to record enqueue requests .IP See .IR function::qs_wait (3stap) for details. .P .TP .B qs_run Function to record being moved from wait queue to being serviced .IP See .IR function::qs_run (3stap) for details. .P .TP .B qs_done Function to record finishing request .IP See .IR function::qs_done (3stap) for details. .P .TP .B qsq_start Function to reset the stats for a queue .IP See .IR function::qsq_start (3stap) for details. .P .TP .B qsq_utilization Fraction of time that any request was being serviced .IP See .IR function::qsq_utilization (3stap) for details. .P .TP .B qsq_blocked Returns the time reqest was on the wait queue .IP See .IR function::qsq_blocked (3stap) for details. .P .TP .B qsq_wait_queue_length length of wait queue .IP See .IR function::qsq_wait_queue_length (3stap) for details. .P .TP .B qsq_service_time Amount of time per request service .IP See .IR function::qsq_service_time (3stap) for details. .P .TP .B qsq_wait_time Amount of time in queue + service per request .IP See .IR function::qsq_wait_time (3stap) for details. .P .TP .B qsq_throughput Number of requests served per unit time .IP See .IR function::qsq_throughput (3stap) for details. .P .TP .B qsq_print Prints a line of statistics for the given queue .IP See .IR function::qsq_print (3stap) for details. .SH SEE ALSO .BR .IR \%function::qs_wait (3stap), .BR .IR \%function::qs_run (3stap), .BR .IR \%function::qs_done (3stap), .BR .IR \%function::qsq_start (3stap), .BR .IR \%function::qsq_utilization (3stap), .BR .IR \%function::qsq_blocked (3stap), .BR .IR \%function::qsq_wait_queue_length (3stap), .BR .IR \%function::qsq_service_time (3stap), .BR .IR \%function::qsq_wait_time (3stap), .BR .IR \%function::qsq_throughput (3stap), .BR .IR \%function::qsq_print (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::random.3stap000066400000000000000000000005561414446751200272210ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RANDOM 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::random \- systemtap random tapset .SH DESCRIPTION .TP .P .TP .B randint Return a random number between [0,n) .IP See .IR function::randint (3stap) for details. .SH SEE ALSO .BR .IR \%function::randint (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::regex.3stap000066400000000000000000000012361414446751200270470ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGEX 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::regex \- systemtap regex tapset .SH DESCRIPTION .TP .P .TP .B matched_str Return the last matched string. .IP See .IR function::matched_str (3stap) for details. .P .TP .B matched Return a given matched subexpression. .IP See .IR function::matched (3stap) for details. .P .TP .B ngroups Number of subexpressions in the last match. .IP See .IR function::ngroups (3stap) for details. .SH SEE ALSO .BR .IR \%function::matched_str (3stap), .BR .IR \%function::matched (3stap), .BR .IR \%function::ngroups (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::registers.3stap000066400000000000000000000107401414446751200277440ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::REGISTERS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::registers \- systemtap registers tapset .SH DESCRIPTION .TP .P .TP .B register Return the signed value of the named CPU register .IP See .IR function::register (3stap) for details. .P .TP .B u_register Return the unsigned value of the named CPU register .IP See .IR function::u_register (3stap) for details. .P .TP .B int_arg Return function argument as signed int .IP See .IR function::int_arg (3stap) for details. .P .TP .B set_int_arg Set function argument as signed int .IP See .IR function::set_int_arg (3stap) for details. .P .TP .B uint_arg Return function argument as unsigned int .IP See .IR function::uint_arg (3stap) for details. .P .TP .B set_uint_arg Set argument as unsigned int .IP See .IR function::set_uint_arg (3stap) for details. .P .TP .B long_arg Return function argument as signed long .IP See .IR function::long_arg (3stap) for details. .P .TP .B set_long_arg Set argument as signed long .IP See .IR function::set_long_arg (3stap) for details. .P .TP .B ulong_arg Return function argument as unsigned long .IP See .IR function::ulong_arg (3stap) for details. .P .TP .B set_ulong_arg Set function argument as unsigned long .IP See .IR function::set_ulong_arg (3stap) for details. .P .TP .B longlong_arg Return function argument as 64-bit value .IP See .IR function::longlong_arg (3stap) for details. .P .TP .B set_longlong_arg Set function argument as 64-bit value .IP See .IR function::set_longlong_arg (3stap) for details. .P .TP .B ulonglong_arg Return function argument as 64-bit value .IP See .IR function::ulonglong_arg (3stap) for details. .P .TP .B set_ulonglong_arg Set function argument as 64-bit value .IP See .IR function::set_ulonglong_arg (3stap) for details. .P .TP .B pointer_arg Return function argument as pointer value .IP See .IR function::pointer_arg (3stap) for details. .P .TP .B set_pointer_arg Set function argument as pointer value .IP See .IR function::set_pointer_arg (3stap) for details. .P .TP .B s32_arg Return function argument as signed 32-bit value .IP See .IR function::s32_arg (3stap) for details. .P .TP .B set_s32_arg Set function argument as signed 32-bit value .IP See .IR function::set_s32_arg (3stap) for details. .P .TP .B u32_arg Return function argument as unsigned 32-bit value .IP See .IR function::u32_arg (3stap) for details. .P .TP .B set_u32_arg Set function argument as unsigned 32-bit value .IP See .IR function::set_u32_arg (3stap) for details. .P .TP .B s64_arg Return function argument as signed 64-bit value .IP See .IR function::s64_arg (3stap) for details. .P .TP .B set_s64_arg Set function argument as signed 64-bit value .IP See .IR function::set_s64_arg (3stap) for details. .P .TP .B u64_arg Return function argument as unsigned 64-bit value .IP See .IR function::u64_arg (3stap) for details. .P .TP .B set_u64_arg Set function argument as unsigned 64-bit value .IP See .IR function::set_u64_arg (3stap) for details. .P .TP .B asmlinkage Mark function as declared asmlinkage .IP See .IR function::asmlinkage (3stap) for details. .P .TP .B fastcall Mark function as declared fastcall .IP See .IR function::fastcall (3stap) for details. .P .TP .B regparm Specify regparm value used to compile function .IP See .IR function::regparm (3stap) for details. .SH SEE ALSO .BR .IR \%function::register (3stap), .BR .IR \%function::u_register (3stap), .BR .IR \%function::int_arg (3stap), .BR .IR \%function::set_int_arg (3stap), .BR .IR \%function::uint_arg (3stap), .BR .IR \%function::set_uint_arg (3stap), .BR .IR \%function::long_arg (3stap), .BR .IR \%function::set_long_arg (3stap), .BR .IR \%function::ulong_arg (3stap), .BR .IR \%function::set_ulong_arg (3stap), .BR .IR \%function::longlong_arg (3stap), .BR .IR \%function::set_longlong_arg (3stap), .BR .IR \%function::ulonglong_arg (3stap), .BR .IR \%function::set_ulonglong_arg (3stap), .BR .IR \%function::pointer_arg (3stap), .BR .IR \%function::set_pointer_arg (3stap), .BR .IR \%function::s32_arg (3stap), .BR .IR \%function::set_s32_arg (3stap), .BR .IR \%function::u32_arg (3stap), .BR .IR \%function::set_u32_arg (3stap), .BR .IR \%function::s64_arg (3stap), .BR .IR \%function::set_s64_arg (3stap), .BR .IR \%function::u64_arg (3stap), .BR .IR \%function::set_u64_arg (3stap), .BR .IR \%function::asmlinkage (3stap), .BR .IR \%function::fastcall (3stap), .BR .IR \%function::regparm (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::rlimit.3stap000066400000000000000000000006251414446751200272360ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RLIMIT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::rlimit \- systemtap rlimit tapset .SH DESCRIPTION .TP .P .TP .B rlimit_from_str Symbolic string associated with resource limit code .IP See .IR function::rlimit_from_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::rlimit_from_str (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::rpc.3stap000066400000000000000000000067401414446751200265260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::RPC 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::rpc \- systemtap rpc tapset .SH DESCRIPTION .TP .P .TP .B sunrpc.clnt.create_client Create an RPC client .IP See .IR probe::sunrpc.clnt.create_client (3stap) for details. .P .TP .B sunrpc.clnt.clone_client Clone an RPC client structure .IP See .IR probe::sunrpc.clnt.clone_client (3stap) for details. .P .TP .B sunrpc.clnt.shutdown_client Shutdown an RPC client .IP See .IR probe::sunrpc.clnt.shutdown_client (3stap) for details. .P .TP .B sunrpc.clnt.bind_new_program Bind a new RPC program to an existing client .IP See .IR probe::sunrpc.clnt.bind_new_program (3stap) for details. .P .TP .B sunrpc.clnt.call_sync Make a synchronous RPC call .IP See .IR probe::sunrpc.clnt.call_sync (3stap) for details. .P .TP .B sunrpc.clnt.call_async Make an asynchronous RPC call .IP See .IR probe::sunrpc.clnt.call_async (3stap) for details. .P .TP .B sunrpc.clnt.restart_call Restart an asynchronous RPC call .IP See .IR probe::sunrpc.clnt.restart_call (3stap) for details. .P .TP .B sunrpc.svc.register Register an RPC service with the local portmapper .IP See .IR probe::sunrpc.svc.register (3stap) for details. .P .TP .B sunrpc.svc.create Create an RPC service .IP See .IR probe::sunrpc.svc.create (3stap) for details. .P .TP .B sunrpc.svc.destroy Destroy an RPC service .IP See .IR probe::sunrpc.svc.destroy (3stap) for details. .P .TP .B sunrpc.svc.process Process an RPC request .IP See .IR probe::sunrpc.svc.process (3stap) for details. .P .TP .B sunrpc.svc.authorise An RPC request is to be authorised .IP See .IR probe::sunrpc.svc.authorise (3stap) for details. .P .TP .B sunrpc.svc.recv Listen for the next RPC request on any socket .IP See .IR probe::sunrpc.svc.recv (3stap) for details. .P .TP .B sunrpc.svc.send Return reply to RPC client .IP See .IR probe::sunrpc.svc.send (3stap) for details. .P .TP .B sunrpc.svc.drop Drop RPC request .IP See .IR probe::sunrpc.svc.drop (3stap) for details. .P .TP .B sunrpc.sched.new_task Create new task for the specified client .IP See .IR probe::sunrpc.sched.new_task (3stap) for details. .P .TP .B sunrpc.sched.release_task Release all resources associated with a task .IP See .IR probe::sunrpc.sched.release_task (3stap) for details. .P .TP .B sunrpc.sched.execute Execute the RPC `scheduler' .IP See .IR probe::sunrpc.sched.execute (3stap) for details. .P .TP .B sunrpc.sched.delay Delay an RPC task .IP See .IR probe::sunrpc.sched.delay (3stap) for details. .SH SEE ALSO .BR .IR \%probe::sunrpc.clnt.create_client (3stap), .BR .IR \%probe::sunrpc.clnt.clone_client (3stap), .BR .IR \%probe::sunrpc.clnt.shutdown_client (3stap), .BR .IR \%probe::sunrpc.clnt.bind_new_program (3stap), .BR .IR \%probe::sunrpc.clnt.call_sync (3stap), .BR .IR \%probe::sunrpc.clnt.call_async (3stap), .BR .IR \%probe::sunrpc.clnt.restart_call (3stap), .BR .IR \%probe::sunrpc.svc.register (3stap), .BR .IR \%probe::sunrpc.svc.create (3stap), .BR .IR \%probe::sunrpc.svc.destroy (3stap), .BR .IR \%probe::sunrpc.svc.process (3stap), .BR .IR \%probe::sunrpc.svc.authorise (3stap), .BR .IR \%probe::sunrpc.svc.recv (3stap), .BR .IR \%probe::sunrpc.svc.send (3stap), .BR .IR \%probe::sunrpc.svc.drop (3stap), .BR .IR \%probe::sunrpc.sched.new_task (3stap), .BR .IR \%probe::sunrpc.sched.release_task (3stap), .BR .IR \%probe::sunrpc.sched.execute (3stap), .BR .IR \%probe::sunrpc.sched.delay (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::scheduler.3stap000066400000000000000000000060351414446751200277150ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCHEDULER 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::scheduler \- systemtap scheduler tapset .SH DESCRIPTION .TP .P .TP .B scheduler.cpu_off Process is about to stop running on a cpu .IP See .IR probe::scheduler.cpu_off (3stap) for details. .P .TP .B scheduler.cpu_on Process is beginning execution on a cpu .IP See .IR probe::scheduler.cpu_on (3stap) for details. .P .TP .B scheduler.tick Schedulers internal tick, a processes timeslice accounting is updated .IP See .IR probe::scheduler.tick (3stap) for details. .P .TP .B scheduler.balance A cpu attempting to find more work. .IP See .IR probe::scheduler.balance (3stap) for details. .P .TP .B scheduler.ctxswitch A context switch is occuring. .IP See .IR probe::scheduler.ctxswitch (3stap) for details. .P .TP .B scheduler.kthread_stop A thread created by kthread_create is being stopped .IP See .IR probe::scheduler.kthread_stop (3stap) for details. .P .TP .B scheduler.kthread_stop.return A kthread is stopped and gets the return value .IP See .IR probe::scheduler.kthread_stop.return (3stap) for details. .P .TP .B scheduler.wait_task Waiting on a task to unschedule (become inactive) .IP See .IR probe::scheduler.wait_task (3stap) for details. .P .TP .B scheduler.wakeup Task is woken up .IP See .IR probe::scheduler.wakeup (3stap) for details. .P .TP .B scheduler.wakeup_new Newly created task is woken up for the first time .IP See .IR probe::scheduler.wakeup_new (3stap) for details. .P .TP .B scheduler.migrate Task migrating across cpus .IP See .IR probe::scheduler.migrate (3stap) for details. .P .TP .B scheduler.process_free Scheduler freeing a data structure for a process .IP See .IR probe::scheduler.process_free (3stap) for details. .P .TP .B scheduler.process_exit Process exiting .IP See .IR probe::scheduler.process_exit (3stap) for details. .P .TP .B scheduler.process_wait Scheduler starting to wait on a process .IP See .IR probe::scheduler.process_wait (3stap) for details. .P .TP .B scheduler.process_fork Process forked .IP See .IR probe::scheduler.process_fork (3stap) for details. .P .TP .B scheduler.signal_send Sending a signal .IP See .IR probe::scheduler.signal_send (3stap) for details. .SH SEE ALSO .BR .IR \%probe::scheduler.cpu_off (3stap), .BR .IR \%probe::scheduler.cpu_on (3stap), .BR .IR \%probe::scheduler.tick (3stap), .BR .IR \%probe::scheduler.balance (3stap), .BR .IR \%probe::scheduler.ctxswitch (3stap), .BR .IR \%probe::scheduler.kthread_stop (3stap), .BR .IR \%probe::scheduler.kthread_stop.return (3stap), .BR .IR \%probe::scheduler.wait_task (3stap), .BR .IR \%probe::scheduler.wakeup (3stap), .BR .IR \%probe::scheduler.wakeup_new (3stap), .BR .IR \%probe::scheduler.migrate (3stap), .BR .IR \%probe::scheduler.process_free (3stap), .BR .IR \%probe::scheduler.process_exit (3stap), .BR .IR \%probe::scheduler.process_wait (3stap), .BR .IR \%probe::scheduler.process_fork (3stap), .BR .IR \%probe::scheduler.signal_send (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::scsi.3stap000066400000000000000000000025141414446751200266760ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SCSI 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::scsi \- systemtap scsi tapset .SH DESCRIPTION This family of probe points is used to probe SCSI activities. .TP .P .TP .B scsi.ioentry Prepares a SCSI mid-layer request .IP See .IR probe::scsi.ioentry (3stap) for details. .P .TP .B scsi.iodispatching SCSI mid-layer dispatched low-level SCSI command .IP See .IR probe::scsi.iodispatching (3stap) for details. .P .TP .B scsi.iodone SCSI command completed by low level driver and enqueued into the done queue. .IP See .IR probe::scsi.iodone (3stap) for details. .P .TP .B scsi.iocompleted SCSI mid-layer running the completion processing for block device I/O requests .IP See .IR probe::scsi.iocompleted (3stap) for details. .P .TP .B scsi.ioexecute Create mid-layer SCSI request and wait for the result .IP See .IR probe::scsi.ioexecute (3stap) for details. .P .TP .B scsi.set_state Order SCSI device state change .IP See .IR probe::scsi.set_state (3stap) for details. .SH SEE ALSO .BR .IR \%probe::scsi.ioentry (3stap), .BR .IR \%probe::scsi.iodispatching (3stap), .BR .IR \%probe::scsi.iodone (3stap), .BR .IR \%probe::scsi.iocompleted (3stap), .BR .IR \%probe::scsi.ioexecute (3stap), .BR .IR \%probe::scsi.set_state (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::signal.3stap000066400000000000000000000143601414446751200272140ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SIGNAL 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::signal \- systemtap signal tapset .SH DESCRIPTION This family of probe points is used to probe signal activities. Since there are so many signals sent to processes at any given point, it is advisable to filter the information according to the requirements. For example, filter only for a particular signal (if sig==2) or for a particular process (if pid_name==stap). .TP .P .TP .B signal.send Signal being sent to a process .IP See .IR probe::signal.send (3stap) for details. .P .TP .B signal.send.return Signal being sent to a process completed (deprecated in SystemTap 2.1) .IP See .IR probe::signal.send.return (3stap) for details. .P .TP .B signal.checkperm Check being performed on a sent signal .IP See .IR probe::signal.checkperm (3stap) for details. .P .TP .B signal.checkperm.return Check performed on a sent signal completed .IP See .IR probe::signal.checkperm.return (3stap) for details. .P .TP .B signal.wakeup Sleeping process being wakened for signal .IP See .IR probe::signal.wakeup (3stap) for details. .P .TP .B signal.check_ignored Checking to see signal is ignored .IP See .IR probe::signal.check_ignored (3stap) for details. .P .TP .B signal.check_ignored.return Check to see signal is ignored completed .IP See .IR probe::signal.check_ignored.return (3stap) for details. .P .TP .B signal.force_segv Forcing send of SIGSEGV .IP See .IR probe::signal.force_segv (3stap) for details. .P .TP .B signal.force_segv.return Forcing send of SIGSEGV complete .IP See .IR probe::signal.force_segv.return (3stap) for details. .P .TP .B signal.syskill Sending kill signal to a process .IP See .IR probe::signal.syskill (3stap) for details. .P .TP .B signal.syskill.return Sending kill signal completed .IP See .IR probe::signal.syskill.return (3stap) for details. .P .TP .B signal.sys_tkill Sending a kill signal to a thread .IP See .IR probe::signal.sys_tkill (3stap) for details. .P .TP .B signal.systkill.return Sending kill signal to a thread completed .IP See .IR probe::signal.systkill.return (3stap) for details. .P .TP .B signal.sys_tgkill Sending kill signal to a thread group .IP See .IR probe::signal.sys_tgkill (3stap) for details. .P .TP .B signal.sys_tgkill.return Sending kill signal to a thread group completed .IP See .IR probe::signal.sys_tgkill.return (3stap) for details. .P .TP .B signal.send_sig_queue Queuing a signal to a process .IP See .IR probe::signal.send_sig_queue (3stap) for details. .P .TP .B signal.send_sig_queue.return Queuing a signal to a process completed .IP See .IR probe::signal.send_sig_queue.return (3stap) for details. .P .TP .B signal.pending Examining pending signal .IP See .IR probe::signal.pending (3stap) for details. .P .TP .B signal.pending.return Examination of pending signal completed .IP See .IR probe::signal.pending.return (3stap) for details. .P .TP .B signal.handle Signal handler being invoked .IP See .IR probe::signal.handle (3stap) for details. .P .TP .B signal.handle.return Signal handler invocation completed .IP See .IR probe::signal.handle.return (3stap) for details. .P .TP .B signal.do_action Examining or changing a signal action .IP See .IR probe::signal.do_action (3stap) for details. .P .TP .B signal.do_action.return Examining or changing a signal action completed .IP See .IR probe::signal.do_action.return (3stap) for details. .P .TP .B signal.procmask Examining or changing blocked signals .IP See .IR probe::signal.procmask (3stap) for details. .P .TP .B signal.procmask.return Examining or changing blocked signals completed .IP See .IR probe::signal.procmask.return (3stap) for details. .P .TP .B signal.flush Flushing all pending signals for a task .IP See .IR probe::signal.flush (3stap) for details. .P .TP .B get_sa_flags Returns the numeric value of sa_flags .IP See .IR function::get_sa_flags (3stap) for details. .P .TP .B get_sa_handler Returns the numeric value of sa_handler .IP See .IR function::get_sa_handler (3stap) for details. .P .TP .B sigset_mask_str Returns the string representation of a sigset .IP See .IR function::sigset_mask_str (3stap) for details. .P .TP .B is_sig_blocked Returns 1 if the signal is currently blocked, or 0 if it is not .IP See .IR function::is_sig_blocked (3stap) for details. .P .TP .B sa_flags_str Returns the string representation of sa_flags .IP See .IR function::sa_flags_str (3stap) for details. .P .TP .B sa_handler Returns the string representation of an sa_handler .IP See .IR function::sa_handler (3stap) for details. .P .TP .B signal_str Returns the string representation of a signal number .IP See .IR function::signal_str (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_sa_flags (3stap), .BR .IR \%function::get_sa_handler (3stap), .BR .IR \%function::sigset_mask_str (3stap), .BR .IR \%function::is_sig_blocked (3stap), .BR .IR \%function::sa_flags_str (3stap), .BR .IR \%function::sa_handler (3stap), .BR .IR \%function::signal_str (3stap), .BR .IR \%probe::signal.send (3stap), .BR .IR \%probe::signal.send.return (3stap), .BR .IR \%probe::signal.checkperm (3stap), .BR .IR \%probe::signal.checkperm.return (3stap), .BR .IR \%probe::signal.wakeup (3stap), .BR .IR \%probe::signal.check_ignored (3stap), .BR .IR \%probe::signal.check_ignored.return (3stap), .BR .IR \%probe::signal.force_segv (3stap), .BR .IR \%probe::signal.force_segv.return (3stap), .BR .IR \%probe::signal.syskill (3stap), .BR .IR \%probe::signal.syskill.return (3stap), .BR .IR \%probe::signal.sys_tkill (3stap), .BR .IR \%probe::signal.systkill.return (3stap), .BR .IR \%probe::signal.sys_tgkill (3stap), .BR .IR \%probe::signal.sys_tgkill.return (3stap), .BR .IR \%probe::signal.send_sig_queue (3stap), .BR .IR \%probe::signal.send_sig_queue.return (3stap), .BR .IR \%probe::signal.pending (3stap), .BR .IR \%probe::signal.pending.return (3stap), .BR .IR \%probe::signal.handle (3stap), .BR .IR \%probe::signal.handle.return (3stap), .BR .IR \%probe::signal.do_action (3stap), .BR .IR \%probe::signal.do_action.return (3stap), .BR .IR \%probe::signal.procmask (3stap), .BR .IR \%probe::signal.procmask.return (3stap), .BR .IR \%probe::signal.flush (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::socket.3stap000066400000000000000000000122751414446751200272320ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SOCKET 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::socket \- systemtap socket tapset .SH DESCRIPTION This family of probe points is used to probe socket activities. .TP .P .TP .B socket.send Message sent on a socket. .IP See .IR probe::socket.send (3stap) for details. .P .TP .B socket.receive Message received on a socket. .IP See .IR probe::socket.receive (3stap) for details. .P .TP .B socket.sendmsg Message is currently being sent on a socket. .IP See .IR probe::socket.sendmsg (3stap) for details. .P .TP .B socket.sendmsg.return Return from socket.sendmsg. .IP See .IR probe::socket.sendmsg.return (3stap) for details. .P .TP .B socket.recvmsg Message being received on socket .IP See .IR probe::socket.recvmsg (3stap) for details. .P .TP .B socket.recvmsg.return Return from Message being received on socket .IP See .IR probe::socket.recvmsg.return (3stap) for details. .P .TP .B socket.aio_write Message send via sock_aio_write() .IP See .IR probe::socket.aio_write (3stap) for details. .P .TP .B socket.aio_write.return Conclusion of message send via sock_aio_write() .IP See .IR probe::socket.aio_write.return (3stap) for details. .P .TP .B socket.aio_read Receiving message via sock_aio_read() .IP See .IR probe::socket.aio_read (3stap) for details. .P .TP .B socket.aio_read.return Conclusion of message received via sock_aio_read() .IP See .IR probe::socket.aio_read.return (3stap) for details. .P .TP .B socket.write_iter Message send via sock_write_iter() .IP See .IR probe::socket.write_iter (3stap) for details. .P .TP .B socket.write_iter.return Conclusion of message send via sock_write_iter() .IP See .IR probe::socket.write_iter.return (3stap) for details. .P .TP .B socket.read_iter Receiving message via sock_read_iter() .IP See .IR probe::socket.read_iter (3stap) for details. .P .TP .B socket.read_iter.return Conclusion of message received via sock_read_iter() .IP See .IR probe::socket.read_iter.return (3stap) for details. .P .TP .B socket.writev Message sent via socket_writev() .IP See .IR probe::socket.writev (3stap) for details. .P .TP .B socket.writev.return Conclusion of message sent via socket_writev() .IP See .IR probe::socket.writev.return (3stap) for details. .P .TP .B socket.readv Receiving a message via sock_readv() .IP See .IR probe::socket.readv (3stap) for details. .P .TP .B socket.readv.return Conclusion of receiving a message via sock_readv() .IP See .IR probe::socket.readv.return (3stap) for details. .P .TP .B socket.create Creation of a socket .IP See .IR probe::socket.create (3stap) for details. .P .TP .B socket.create.return Return from Creation of a socket .IP See .IR probe::socket.create.return (3stap) for details. .P .TP .B socket.close Close a socket .IP See .IR probe::socket.close (3stap) for details. .P .TP .B socket.close.return Return from closing a socket .IP See .IR probe::socket.close.return (3stap) for details. .P .TP .B sock_prot_num2str Given a protocol number, return a string representation .IP See .IR function::sock_prot_num2str (3stap) for details. .P .TP .B sock_prot_str2num Given a protocol name (string), return the corresponding protocol number .IP See .IR function::sock_prot_str2num (3stap) for details. .P .TP .B sock_fam_num2str Given a protocol family number, return a string representation .IP See .IR function::sock_fam_num2str (3stap) for details. .P .TP .B sock_fam_str2num Given a protocol family name (string), return the corresponding protocol family number .IP See .IR function::sock_fam_str2num (3stap) for details. .P .TP .B sock_state_num2str Given a socket state number, return a string representation .IP See .IR function::sock_state_num2str (3stap) for details. .P .TP .B sock_state_str2num Given a socket state string, return the corresponding state number .IP See .IR function::sock_state_str2num (3stap) for details. .SH SEE ALSO .BR .IR \%function::sock_prot_num2str (3stap), .BR .IR \%function::sock_prot_str2num (3stap), .BR .IR \%function::sock_fam_num2str (3stap), .BR .IR \%function::sock_fam_str2num (3stap), .BR .IR \%function::sock_state_num2str (3stap), .BR .IR \%function::sock_state_str2num (3stap), .BR .IR \%probe::socket.send (3stap), .BR .IR \%probe::socket.receive (3stap), .BR .IR \%probe::socket.sendmsg (3stap), .BR .IR \%probe::socket.sendmsg.return (3stap), .BR .IR \%probe::socket.recvmsg (3stap), .BR .IR \%probe::socket.recvmsg.return (3stap), .BR .IR \%probe::socket.aio_write (3stap), .BR .IR \%probe::socket.aio_write.return (3stap), .BR .IR \%probe::socket.aio_read (3stap), .BR .IR \%probe::socket.aio_read.return (3stap), .BR .IR \%probe::socket.write_iter (3stap), .BR .IR \%probe::socket.write_iter.return (3stap), .BR .IR \%probe::socket.read_iter (3stap), .BR .IR \%probe::socket.read_iter.return (3stap), .BR .IR \%probe::socket.writev (3stap), .BR .IR \%probe::socket.writev.return (3stap), .BR .IR \%probe::socket.readv (3stap), .BR .IR \%probe::socket.readv.return (3stap), .BR .IR \%probe::socket.create (3stap), .BR .IR \%probe::socket.create.return (3stap), .BR .IR \%probe::socket.close (3stap), .BR .IR \%probe::socket.close.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::speculative.3stap000066400000000000000000000015501414446751200302600ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SPECULATIVE 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::speculative \- systemtap speculative tapset .SH DESCRIPTION .TP .P .TP .B speculation Allocate a new id for speculative output .IP See .IR function::speculation (3stap) for details. .P .TP .B speculate Store a string for possible output later .IP See .IR function::speculate (3stap) for details. .P .TP .B discard Discard all output related to a speculation buffer .IP See .IR function::discard (3stap) for details. .P .TP .B commit Write out all output related to a speculation buffer .IP See .IR function::commit (3stap) for details. .SH SEE ALSO .BR .IR \%function::speculation (3stap), .BR .IR \%function::speculate (3stap), .BR .IR \%function::discard (3stap), .BR .IR \%function::commit (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::stap_staticmarkers.3stap000066400000000000000000000112671414446751200316450ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STAP_STATICMARKERS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::stap_staticmarkers \- systemtap stap_staticmarkers tapset .SH DESCRIPTION .TP .P .TP .B stap.pass0 Starting stap pass0 (parsing command line arguments) .IP See .IR probe::stap.pass0 (3stap) for details. .P .TP .B stap.pass0.end Finished stap pass0 (parsing command line arguments) .IP See .IR probe::stap.pass0.end (3stap) for details. .P .TP .B stap.pass1a Starting stap pass1 (parsing user script) .IP See .IR probe::stap.pass1a (3stap) for details. .P .TP .B stap.pass1b Starting stap pass1 (parsing library scripts) .IP See .IR probe::stap.pass1b (3stap) for details. .P .TP .B stap.pass1.end Finished stap pass1 (parsing scripts) .IP See .IR probe::stap.pass1.end (3stap) for details. .P .TP .B stap.pass2 Starting stap pass2 (elaboration) .IP See .IR probe::stap.pass2 (3stap) for details. .P .TP .B stap.pass2.end Finished stap pass2 (elaboration) .IP See .IR probe::stap.pass2.end (3stap) for details. .P .TP .B stap.pass3 Starting stap pass3 (translation to C) .IP See .IR probe::stap.pass3 (3stap) for details. .P .TP .B stap.pass3.end Finished stap pass3 (translation to C) .IP See .IR probe::stap.pass3.end (3stap) for details. .P .TP .B stap.pass4 Starting stap pass4 (compile C code into kernel module) .IP See .IR probe::stap.pass4 (3stap) for details. .P .TP .B stap.pass4.end Finished stap pass4 (compile C code into kernel module) .IP See .IR probe::stap.pass4.end (3stap) for details. .P .TP .B stap.pass5 Starting stap pass5 (running the instrumentation) .IP See .IR probe::stap.pass5 (3stap) for details. .P .TP .B stap.pass5.end Finished stap pass5 (running the instrumentation) .IP See .IR probe::stap.pass5.end (3stap) for details. .P .TP .B stap.pass6 Starting stap pass6 (cleanup) .IP See .IR probe::stap.pass6 (3stap) for details. .P .TP .B stap.pass6.end Finished stap pass6 (cleanup) .IP See .IR probe::stap.pass6.end (3stap) for details. .P .TP .B stap.cache_clean Removing file from stap cache .IP See .IR probe::stap.cache_clean (3stap) for details. .P .TP .B stap.cache_add_mod Adding kernel instrumentation module to cache .IP See .IR probe::stap.cache_add_mod (3stap) for details. .P .TP .B stap.cache_add_src Adding C code translation to cache .IP See .IR probe::stap.cache_add_src (3stap) for details. .P .TP .B stap.cache_add_nss Add NSS (Network Security Services) information to cache .IP See .IR probe::stap.cache_add_nss (3stap) for details. .P .TP .B stap.cache_get Found item in stap cache .IP See .IR probe::stap.cache_get (3stap) for details. .P .TP .B stap.system Starting a command from stap .IP See .IR probe::stap.system (3stap) for details. .P .TP .B stap.system.spawn stap spawned new process .IP See .IR probe::stap.system.spawn (3stap) for details. .P .TP .B stap.system.return Finished a command from stap .IP See .IR probe::stap.system.return (3stap) for details. .P .TP .B staprun.insert_module Inserting SystemTap instrumentation module .IP See .IR probe::staprun.insert_module (3stap) for details. .P .TP .B staprun.remove_module Removing SystemTap instrumentation module .IP See .IR probe::staprun.remove_module (3stap) for details. .P .TP .B staprun.send_control_message Sending a control message .IP See .IR probe::staprun.send_control_message (3stap) for details. .P .TP .B stapio.receive_control_message Received a control message .IP See .IR probe::stapio.receive_control_message (3stap) for details. .SH SEE ALSO .BR .IR \%probe::stap.pass0 (3stap), .BR .IR \%probe::stap.pass0.end (3stap), .BR .IR \%probe::stap.pass1a (3stap), .BR .IR \%probe::stap.pass1b (3stap), .BR .IR \%probe::stap.pass1.end (3stap), .BR .IR \%probe::stap.pass2 (3stap), .BR .IR \%probe::stap.pass2.end (3stap), .BR .IR \%probe::stap.pass3 (3stap), .BR .IR \%probe::stap.pass3.end (3stap), .BR .IR \%probe::stap.pass4 (3stap), .BR .IR \%probe::stap.pass4.end (3stap), .BR .IR \%probe::stap.pass5 (3stap), .BR .IR \%probe::stap.pass5.end (3stap), .BR .IR \%probe::stap.pass6 (3stap), .BR .IR \%probe::stap.pass6.end (3stap), .BR .IR \%probe::stap.cache_clean (3stap), .BR .IR \%probe::stap.cache_add_mod (3stap), .BR .IR \%probe::stap.cache_add_src (3stap), .BR .IR \%probe::stap.cache_add_nss (3stap), .BR .IR \%probe::stap.cache_get (3stap), .BR .IR \%probe::stap.system (3stap), .BR .IR \%probe::stap.system.spawn (3stap), .BR .IR \%probe::stap.system.return (3stap), .BR .IR \%probe::staprun.insert_module (3stap), .BR .IR \%probe::staprun.remove_module (3stap), .BR .IR \%probe::staprun.send_control_message (3stap), .BR .IR \%probe::stapio.receive_control_message (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::stopwatch.3stap000066400000000000000000000026251414446751200277540ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STOPWATCH 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::stopwatch \- systemtap stopwatch tapset .SH DESCRIPTION .TP .P .TP .B delete_stopwatch Remove an existing stopwatch .IP See .IR function::delete_stopwatch (3stap) for details. .P .TP .B start_stopwatch Start a stopwatch .IP See .IR function::start_stopwatch (3stap) for details. .P .TP .B stop_stopwatch Stop a stopwatch .IP See .IR function::stop_stopwatch (3stap) for details. .P .TP .B read_stopwatch_ns Reads the time in nanoseconds for a stopwatch .IP See .IR function::read_stopwatch_ns (3stap) for details. .P .TP .B read_stopwatch_us Reads the time in microseconds for a stopwatch .IP See .IR function::read_stopwatch_us (3stap) for details. .P .TP .B read_stopwatch_ms Reads the time in milliseconds for a stopwatch .IP See .IR function::read_stopwatch_ms (3stap) for details. .P .TP .B read_stopwatch_s Reads the time in seconds for a stopwatch .IP See .IR function::read_stopwatch_s (3stap) for details. .SH SEE ALSO .BR .IR \%function::delete_stopwatch (3stap), .BR .IR \%function::start_stopwatch (3stap), .BR .IR \%function::stop_stopwatch (3stap), .BR .IR \%function::read_stopwatch_ns (3stap), .BR .IR \%function::read_stopwatch_us (3stap), .BR .IR \%function::read_stopwatch_ms (3stap), .BR .IR \%function::read_stopwatch_s (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::string.3stap000066400000000000000000000033031414446751200272400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::STRING 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::string \- systemtap string tapset .SH DESCRIPTION .TP .P .TP .B strlen Returns the length of a string .IP See .IR function::strlen (3stap) for details. .P .TP .B substr Returns a substring .IP See .IR function::substr (3stap) for details. .P .TP .B stringat Returns the char at a given position in the string .IP See .IR function::stringat (3stap) for details. .P .TP .B isinstr Returns whether a string is a substring of another string .IP See .IR function::isinstr (3stap) for details. .P .TP .B strpos Returns location of a substring within another string .IP See .IR function::strpos (3stap) for details. .P .TP .B text_str Escape any non-printable chars in a string .IP See .IR function::text_str (3stap) for details. .P .TP .B text_strn Escape any non-printable chars in a string .IP See .IR function::text_strn (3stap) for details. .P .TP .B - strtol Convert a string to a long .IP See .IR function::- strtol (3stap) for details. .P .TP .B isdigit Checks for a digit .IP See .IR function::isdigit (3stap) for details. .P .TP .B string_quoted Quotes a given string .IP See .IR function::string_quoted (3stap) for details. .SH SEE ALSO .BR .IR \%function::strlen (3stap), .BR .IR \%function::substr (3stap), .BR .IR \%function::stringat (3stap), .BR .IR \%function::isinstr (3stap), .BR .IR \%function::strpos (3stap), .BR .IR \%function::text_str (3stap), .BR .IR \%function::text_strn (3stap), .BR .IR \%function::- (3stap), .BR .IR \%function::strtol (3stap), .BR .IR \%function::isdigit (3stap), .BR .IR \%function::string_quoted (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::switchfile.3stap000066400000000000000000000006001414446751200300700ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SWITCHFILE 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::switchfile \- systemtap switchfile tapset .SH DESCRIPTION .TP .P .TP .B switch_file switch to the next output file .IP See .IR function::switch_file (3stap) for details. .SH SEE ALSO .BR .IR \%function::switch_file (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscall_any.3stap000066400000000000000000000010371414446751200302550ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSCALL_ANY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::syscall_any \- systemtap syscall_any tapset .SH DESCRIPTION .TP .P .TP .B syscall_any Record entry into a syscall .IP See .IR probe::syscall_any (3stap) for details. .P .TP .B syscall_any.return Record exit from a syscall .IP See .IR probe::syscall_any.return (3stap) for details. .SH SEE ALSO .BR .IR \%probe::syscall_any (3stap), .BR .IR \%probe::syscall_any.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::syscalls.3stap000066400000000000000000000625331414446751200276010ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "November 2021" "Systemtap Tapset Reference" .SH NAME tapset::syscalls \- systemtap syscall tapset .SH DESCRIPTION Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. .TP .P .TP .P .TP .B syscall.accept addr_uaddr, addrlen_uaddr, sockfd .P .TP .B syscall.accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd .P .TP .B syscall.access mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.acct filename, filename_unquoted .P .TP .B syscall.add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr .P .TP .B syscall.adjtimex buf_str, buf_uaddr .P .TP .B syscall.alarm seconds .P .TP .B syscall.arch_prctl addr, code, code_str .P .TP .B syscall.bdflush data, data_str, func .P .TP .B syscall.bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.bpf attr_uaddr, cmd, cmd_str, size .P .TP .B syscall.brk brk .P .TP .B syscall.capget data_uaddr, header_uaddr .P .TP .B syscall.capset data_uaddr, header_uaddr .P .TP .B syscall.chdir path, path_unquoted .P .TP .B syscall.chmod mode, path, path_unquoted .P .TP .B syscall.chown group, owner, path, path_unquoted .P .TP .B syscall.chown16 group, owner, path, path_unquoted .P .TP .B syscall.chroot path, path_unquoted .P .TP .B syscall.clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str .P .TP .B syscall.clock_getres clk_id, clk_id_str, res_uaddr .P .TP .B syscall.clock_gettime clk_id, clk_id_str, tp_uaddr .P .TP .B syscall.clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str .P .TP .B syscall.clone $id, $regs, child_tid_uaddr, clone_flags, int, parent_tid_uaddr, pt_regs*, stack_start .P .TP .B syscall.close fd .P .TP .B syscall.compat_adjtimex $id, $regs, buf_str, buf_uaddr, int, pt_regs* .P .TP .B syscall.compat_clock_nanosleep $id, $regs, clk_id, clk_id_str, flags, flags_str, int, pt_regs*, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_execve args, env_str, filename .P .TP .B syscall.compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.compat_fadvise64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.compat_fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.compat_fallocate $id, $regs, fd, int, len, mode, mode_str, offset, pt_regs* .P .TP .B syscall.compat_ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.compat_futex $id, $regs, futex_uaddr, int, op, pt_regs*, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.compat_futimesat $id, $regs, dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, int, pt_regs*, tvp_str, tvp_uaddr .P .TP .B syscall.compat_getitimer value_uaddr, which .P .TP .B syscall.compat_lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* .P .TP .B syscall.compat_nanosleep $id, $regs, int, pt_regs*, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_ppoll $id, $regs, fds_uaddr, int, nfds, pt_regs*, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.compat_pselect6 $id, $regs, exceptfds, int, nfds, pt_regs*, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.compat_readahead $id, $regs, count, fd, int, offset, pt_regs* .P .TP .B syscall.compat_recvmmsg $id, $regs, flags, flags_str, int, mmsg_uaddr, pt_regs*, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.compat_signalfd flags .P .TP .B syscall.compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.compat_sys_recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.compat_sys_sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.compat_sys_utimes $id, $regs, filename, filename_unquoted, int, pt_regs*, timeval, tvp_uaddr_str .P .TP .B syscall.compat_truncate64 $id, $regs, int, length, path, path_uaddr, path_unquoted, pt_regs* .P .TP .B syscall.compat_utime $id, $regs, actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, int, modtime, pt_regs* .P .TP .B syscall.compat_utimensat $id, $regs, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, int, pt_regs*, tsp_str, tsp_uaddr .P .TP .B syscall.compat_vmsplice $id, $regs, fd, flags, flags_str, int, iov, nr_segs, pt_regs* .P .TP .B syscall.connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.copy_file_range fd_in, fd_out, flags, len, off_in, off_out .P .TP .B syscall.creat mode, pathname, pathname_unquoted .P .TP .B syscall.delete_module flags, flags_str, name_user, name_user_unquoted .P .TP .B syscall.dup oldfd .P .TP .B syscall.dup2 flags, flags_str, newfd, oldfd .P .TP .B syscall.dup3 flags, flags_str, newfd, oldfd .P .TP .B syscall.epoll_create flags, size .P .TP .B syscall.epoll_ctl epfd, event_uaddr, fd, op, op_str .P .TP .B syscall.epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout .P .TP .B syscall.epoll_wait epfd, events_uaddr, maxevents, timeout .P .TP .B syscall.eventfd count, flags, flags_str .P .TP .B syscall.execve args, env_str, filename .P .TP .B syscall.execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.exit status .P .TP .B syscall.exit_group status .P .TP .B syscall.faccessat dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.fanotify_init event_f_flags, event_f_flags_str, flags, flags_str .P .TP .B syscall.fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname, pathname_unquoted .P .TP .B syscall.fchdir fd .P .TP .B syscall.fchmod fildes, mode .P .TP .B syscall.fchmodat dirfd, dirfd_str, mode, pathname, pathname_unquoted .P .TP .B syscall.fchown fd, group, owner .P .TP .B syscall.fchown16 fd, group, owner .P .TP .B syscall.fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname, pathname_unquoted .P .TP .B syscall.fcntl arg, cmd, cmd_str, fd .P .TP .B syscall.fdatasync fd .P .TP .B syscall.fgetxattr filedes, name_str, name_str_unquoted, size, value_uaddr .P .TP .B syscall.finit_module fd, flags, flags_str, uargs, uargs_unquoted .P .TP .B syscall.flistxattr filedes, list_uaddr, size .P .TP .B syscall.flock fd, operation .P .TP .B syscall.fork .P .TP .B syscall.fremovexattr filedes, name_str, name_str_unquoted, name_uaddr .P .TP .B syscall.fsetxattr filedes, flags, flags_str, name_str, name_str_unquoted, name_uaddr, size, value_str, value_uaddr .P .TP .B syscall.fstat buf_uaddr, filedes .P .TP .B syscall.fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path, path_unquoted .P .TP .B syscall.fstatfs buf_uaddr, fd .P .TP .B syscall.fstatfs64 buf_uaddr, fd, sz .P .TP .B syscall.fsync fd .P .TP .B syscall.ftruncate fd, length .P .TP .B syscall.ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.futimesat dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, tvp_str, tvp_uaddr .P .TP .B syscall.get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr .P .TP .B syscall.get_robust_list len_uaddr, list_head_uaddr, pid .P .TP .B syscall.get_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.getcpu cpu_uaddr, node_uaddr, tcache_uaddr .P .TP .B syscall.getcwd buf_uaddr, size .P .TP .B syscall.getdents count, dirp_uaddr, fd .P .TP .B syscall.getegid .P .TP .B syscall.geteuid .P .TP .B syscall.getgid .P .TP .B syscall.getgroups list_uaddr, size .P .TP .B syscall.getitimer value_uaddr, which .P .TP .B syscall.getpeername name_uaddr, namelen_uaddr, s .P .TP .B syscall.getpgid pid .P .TP .B syscall.getpgrp .P .TP .B syscall.getpid .P .TP .B syscall.getppid .P .TP .B syscall.getpriority which, who .P .TP .B syscall.getrandom buf, buf_unquoted, count, flags, flags_str .P .TP .B syscall.getresgid egid_uaddr, rgid_uaddr, sgid_uaddr .P .TP .B syscall.getresuid euid_uaddr, ruid_uaddr, suid_uaddr .P .TP .B syscall.getrlimit resource, rlim_uaddr .P .TP .B syscall.getrusage usage_uaddr, who, who_str .P .TP .B syscall.getsid pid .P .TP .B syscall.getsockname name_uaddr, namelen_uaddr, s .P .TP .B syscall.getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr .P .TP .B syscall.gettid .P .TP .B syscall.gettimeofday tv_uaddr, tz_uaddr .P .TP .B syscall.getuid .P .TP .B syscall.getxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr .P .TP .B syscall.init_module len, uargs, uargs_unquoted, umod_uaddr .P .TP .B syscall.inotify_add_watch fd, mask, mask_str, path, path_uaddr, path_unquoted .P .TP .B syscall.inotify_init flags .P .TP .B syscall.inotify_rm_watch fd, wd .P .TP .B syscall.io_cancel ctx_id, iocb_uaddr, result_uaddr .P .TP .B syscall.io_destroy ctx .P .TP .B syscall.io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr .P .TP .B syscall.io_setup ctxp_uaddr, maxevents .P .TP .B syscall.io_submit ctx_id, iocbpp_uaddr, nr .P .TP .B syscall.ioctl argp, fd, request .P .TP .B syscall.ioperm from, num, turn_on .P .TP .B syscall.iopl level .P .TP .B syscall.ioprio_get which, which_str, who .P .TP .B syscall.ioprio_set ioprio, ioprio_str, which, which_str, who .P .TP .B syscall.kcmp idx1, idx2, pid1, pid2, type, type_str .P .TP .B syscall.kexec_file_load cmdline, cmdline_len, cmdline_unquoted, flags, flags_str, initrd_fd, kernel_fd .P .TP .B syscall.kexec_load entry, flags, flags_str, nr_segments, segments_uaddr .P .TP .B syscall.keyctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.kill pid, sig, sig_name .P .TP .B syscall.lchown group, owner, path, path_unquoted .P .TP .B syscall.lchown16 group, owner, path, path_unquoted .P .TP .B syscall.lgetxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr .P .TP .B syscall.link newpath, newpath_unquoted, oldpath, oldpath_unquoted .P .TP .B syscall.linkat flags, flags_str, newdirfd, newdirfd_str, newpath, newpath_unquoted, olddirfd, olddirfd_str, oldpath, oldpath_unquoted .P .TP .B syscall.listen backlog, sockfd .P .TP .B syscall.listxattr list_uaddr, path, path_uaddr, path_unquoted, size .P .TP .B syscall.llistxattr list_uaddr, path, path_uaddr, path_unquoted, size .P .TP .B syscall.llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str .P .TP .B syscall.lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* .P .TP .B syscall.lremovexattr name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted .P .TP .B syscall.lseek fildes, offset, whence, whence_str .P .TP .B syscall.lsetxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr .P .TP .B syscall.lstat buf_uaddr, path, path_unquoted .P .TP .B syscall.madvise advice, advice_str, length, start .P .TP .B syscall.mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start .P .TP .B syscall.membarrier cmd, cmd_str, flags .P .TP .B syscall.memfd_create flags, flags_str, uname, uname_unquoted .P .TP .B syscall.migrate_pages maxnode, new_nodes, old_nodes, pid .P .TP .B syscall.mincore length, start, vec_uaddr .P .TP .B syscall.mkdir mode, pathname, pathname_uaddr, pathname_unquoted .P .TP .B syscall.mkdirat dirfd, dirfd_str, mode, pahtname_unquoted, pathname .P .TP .B syscall.mknod dev, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.mlock addr, len .P .TP .B syscall.mlock2 addr, flags, flags_str, len .P .TP .B syscall.mlockall flags, flags_str .P .TP .B syscall.mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start .P .TP .B syscall.modify_ldt bytecount, func, ptr_uaddr .P .TP .B syscall.mount data, data_unquoted, filesystemtype, filesystemtype_unquoted, mountflags, mountflags_str, source, source_unquoted, target, target_unquoted .P .TP .B syscall.move_pages flags, flags_str, nodes, nr_pages, pages, pid, status .P .TP .B syscall.mprotect addr, len, prot, prot_str .P .TP .B syscall.mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr .P .TP .B syscall.mq_notify mqdes, notification_uaddr .P .TP .B syscall.mq_open filename, filename_unquoted, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr .P .TP .B syscall.mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr .P .TP .B syscall.mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr .P .TP .B syscall.mq_unlink u_name, u_name_uaddr, u_name_unquoted .P .TP .B syscall.mremap flags, flags_str, new_address, new_size, old_address, old_size .P .TP .B syscall.msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.msgget key, key_str, msgflg, msgflg_str .P .TP .B syscall.msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.msync flags, flags_str, length, start .P .TP .B syscall.munlock addr, len .P .TP .B syscall.munlockall .P .TP .B syscall.munmap length, start .P .TP .B syscall.name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname, pathname_unquoted .P .TP .B syscall.nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.ni_syscall .P .TP .B syscall.nice inc .P .TP .B syscall.open filename, filename_unquoted, flags, flags_str, mode .P .TP .B syscall.open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str .P .TP .B syscall.openat dfd, dfd_str, filename, filename_unquoted, flags, flags_str, mode .P .TP .B syscall.pause .P .TP .B syscall.perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid .P .TP .B syscall.personality persona .P .TP .B syscall.pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 .P .TP .B syscall.pivot_root new_root_str, new_root_str_unquoted, old_root_str, old_root_str_unquoted .P .TP .B syscall.pkey_alloc flags, init_val, init_val_str .P .TP .B syscall.pkey_free pkey .P .TP .B syscall.pkey_mprotect addr, len, pkey, prot, prot_str .P .TP .B syscall.poll nfds, timeout, ufds_uaddr .P .TP .B syscall.ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.prctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.pread buf_uaddr, count, fd, offset .P .TP .B syscall.preadv count, fd, offset, vector_uaddr .P .TP .B syscall.preadv2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str .P .TP .B syscall.process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.ptrace addr, data, pid, request .P .TP .B syscall.pwrite buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwrite32 $id, $regs, buf_str, buf_uaddr, count, fd, int, offset, pt_regs* .P .TP .B syscall.pwritev count, fd, offset, vector_uaddr .P .TP .B syscall.pwritev2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.quotactl addr_uaddr, cmd, cmd_str, id, special, special_str, special_str_unquoted .P .TP .B syscall.read buf_uaddr, count, fd .P .TP .B syscall.readahead count, fd, offset .P .TP .B syscall.readdir count, dirent, fd .P .TP .B syscall.readlink buf_uaddr, bufsiz, path, path_unquoted .P .TP .B syscall.readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path, path_unquoted .P .TP .B syscall.readv count, fd, vector_uaddr .P .TP .B syscall.reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str .P .TP .B syscall.recv buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start .P .TP .B syscall.removexattr name_str, name_str_unquoted, path, path_unquoted .P .TP .B syscall.rename newpath, newpath_unquoted, oldpath, oldpath_unquoted .P .TP .B syscall.renameat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.request_key callout_info_uaddr, description_str, description_str_unquoted, description_uaddr, destringid, type_str, type_str_unquoted, type_uaddr .P .TP .B syscall.restart_syscall .P .TP .B syscall.rmdir pathname, pathname_unquoted .P .TP .B syscall.rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigpending set_uaddr, sigsetsize .P .TP .B syscall.rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr .P .TP .B syscall.rt_sigsuspend set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr .P .TP .B syscall.rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr .P .TP .B syscall.sched_get_priority_max policy, policy_str .P .TP .B syscall.sched_get_priority_min policy, policy_str .P .TP .B syscall.sched_getaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size .P .TP .B syscall.sched_getparam p_uaddr, pid .P .TP .B syscall.sched_getscheduler pid .P .TP .B syscall.sched_rr_get_interval pid, tp_uaddr .P .TP .B syscall.sched_setaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr .P .TP .B syscall.sched_setparam p_uaddr, pid .P .TP .B syscall.sched_setscheduler p_uaddr, pid, policy, policy_str .P .TP .B syscall.sched_yield .P .TP .B syscall.seccomp flags, flags_str, op, op_str, uargs_uaddr .P .TP .B syscall.select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.semget key, key_str, nsems, semflg, semflg_str .P .TP .B syscall.semop nsops, semid, sops_uaddr .P .TP .B syscall.semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.send buf, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.sendfile count, in_fd, offset_uaddr, out_fd .P .TP .B syscall.sendmmsg flags, flags_str, mmsg_uaddr, s, vlen .P .TP .B syscall.sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen .P .TP .B syscall.set_mempolicy maxnode, mode, mode_str, nmask_uaddr .P .TP .B syscall.set_robust_list len, list_head_uaddr .P .TP .B syscall.set_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.set_tid_address tidptr_uaddr .P .TP .B syscall.setdomainname domainname_str, domainname_str_unquoted, domainname_uaddr, len .P .TP .B syscall.setfsgid fsgid .P .TP .B syscall.setfsuid fsuid .P .TP .B syscall.setgid gid .P .TP .B syscall.setgroups list_uaddr, size .P .TP .B syscall.sethostname hostname_uaddr, len, name_str, name_str_unquoted .P .TP .B syscall.setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.setns fd, nstype, nstype_str .P .TP .B syscall.setpgid pgid, pid .P .TP .B syscall.setpriority prio, which, which_str, who .P .TP .B syscall.setregid egid, rgid .P .TP .B syscall.setregid16 egid, rgid .P .TP .B syscall.setresgid egid, rgid, sgid .P .TP .B syscall.setresgid16 egid, rgid, sgid .P .TP .B syscall.setresuid euid, ruid, suid .P .TP .B syscall.setresuid16 euid, ruid, suid .P .TP .B syscall.setreuid euid, ruid .P .TP .B syscall.setreuid16 euid, ruid .P .TP .B syscall.setrlimit resource, resource_str, rlim_str, rlim_uaddr .P .TP .B syscall.setsid .P .TP .B syscall.setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr .P .TP .B syscall.settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.setuid uid .P .TP .B syscall.setxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr .P .TP .B syscall.sgetmask .P .TP .B syscall.shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.shmdt shmaddr_uaddr .P .TP .B syscall.shmget key, shmflg, shmflg_str, size .P .TP .B syscall.shutdown how, how_str, s .P .TP .B syscall.sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str .P .TP .B syscall.sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str .P .TP .B syscall.sigaltstack uoss_uaddr, uss_str, uss_uaddr .P .TP .B syscall.signal handler, handler_str, sig, sig_str .P .TP .B syscall.signalfd flags .P .TP .B syscall.sigpending set .P .TP .B syscall.sigprocmask how, how_str, oldset_uaddr, set_uaddr .P .TP .B syscall.sigsuspend mask, mask_str .P .TP .B syscall.socket family, family_str, protocol, protocol_str, type, type_str .P .TP .B syscall.socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str .P .TP .B syscall.splice fd_in, fd_out, flags, flags_str, len, off_in, off_out .P .TP .B syscall.ssetmask newmask, newmask_str .P .TP .B syscall.stat buf_uaddr, filename, filename_uaddr, filename_unquoted .P .TP .B syscall.statfs buf_uaddr, path, path_unquoted .P .TP .B syscall.statfs64 buf_uaddr, path, path_unquoted, sz .P .TP .B syscall.statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, mask, mask_str .P .TP .B syscall.stime t_uaddr .P .TP .B syscall.swapoff path, path_uaddr, path_unquoted .P .TP .B syscall.swapon path, path_uaddr, path_unquoted, swapflags, swapflags_str .P .TP .B syscall.symlink newpath, oldpath, oldpath_unquoted .P .TP .B syscall.symlinkat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.sync .P .TP .B syscall.sync_file_range fd, flags, flags_str, nbytes, offset .P .TP .B syscall.syncfs fd .P .TP .B syscall.sysctl $id, $regs, args, int, pt_regs* .P .TP .B syscall.sysfs arg1, arg2, option .P .TP .B syscall.sysinfo info_str, info_uaddr .P .TP .B syscall.syslog bufp_uaddr, len, type .P .TP .B syscall.tee fdin, fdout, flags, len .P .TP .B syscall.tgkill pid, sig, sig_str, tgid .P .TP .B syscall.time t_uaddr .P .TP .B syscall.timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr .P .TP .B syscall.timer_delete timerid .P .TP .B syscall.timer_getoverrun timerid .P .TP .B syscall.timer_gettime timerid, value_uaddr .P .TP .B syscall.timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr .P .TP .B syscall.timerfd_create clockid, clockid_str, flags, flags_str .P .TP .B syscall.timerfd_gettime fd, value_uaddr .P .TP .B syscall.timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr .P .TP .B syscall.times buf_str, buf_uaddr .P .TP .B syscall.tkill pid, sig, sig_str .P .TP .B syscall.truncate length, path, path_uaddr, path_unquoted .P .TP .B syscall.umask mask .P .TP .B syscall.umount flags, flags_str, target, target_unquoted .P .TP .B syscall.uname name_uaddr .P .TP .B syscall.unlink pathname, pathname_uaddr, pathname_unquoted .P .TP .B syscall.unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str, pathname_str_unquoted .P .TP .B syscall.unshare unshare_flags, unshare_flags_str .P .TP .B syscall.uselib $id, $regs, int, library, library_uaddr, library_unquoted, pt_regs* .P .TP .B syscall.userfaultfd flags, flags_str .P .TP .B syscall.ustat dev, ubuf_uaddr .P .TP .B syscall.ustat32 dev, ubuf_uaddr .P .TP .B syscall.utime actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, modtime .P .TP .B syscall.utimensat dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.utimes filename, filename_uaddr, filename_unquoted, tvp_uaddr, tvp_uaddr_str .P .TP .B syscall.vfork .P .TP .B syscall.vhangup .P .TP .B syscall.vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.wait4 options, options_str, pid, rusage_uaddr, status_uaddr .P .TP .B syscall.waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str .P .TP .B syscall.waitpid options, options_str, pid, status_uaddr .P .TP .B syscall.write buf_str, buf_uaddr, count, fd .P .TP .B syscall.writev count, fd, vector_uaddr .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::system.3stap000066400000000000000000000005441414446751200272620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::SYSTEM 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::system \- systemtap system tapset .SH DESCRIPTION .TP .P .TP .B system Issue a command to the system .IP See .IR function::system (3stap) for details. .SH SEE ALSO .BR .IR \%function::system (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::target_set.3stap000066400000000000000000000010771414446751200301010ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TARGET_SET 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::target_set \- systemtap target_set tapset .SH DESCRIPTION .TP .P .TP .B target_set_pid Does pid descend from target process? .IP See .IR function::target_set_pid (3stap) for details. .P .TP .B target_set_report Print a report about the target set .IP See .IR function::target_set_report (3stap) for details. .SH SEE ALSO .BR .IR \%function::target_set_pid (3stap), .BR .IR \%function::target_set_report (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::task.3stap000066400000000000000000000074231414446751200267030ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::task \- systemtap task tapset .SH DESCRIPTION .TP .P .TP .B task_current The current task_struct of the current task .IP See .IR function::task_current (3stap) for details. .P .TP .B task_parent The task_struct of the parent task .IP See .IR function::task_parent (3stap) for details. .P .TP .B task_state The state of the task .IP See .IR function::task_state (3stap) for details. .P .TP .B task_execname The name of the task .IP See .IR function::task_execname (3stap) for details. .P .TP .B task_pid The process identifier of the task .IP See .IR function::task_pid (3stap) for details. .P .TP .B task_ns_pid The process identifier of the task .IP See .IR function::task_ns_pid (3stap) for details. .P .TP .B pid2task The task_struct of the given process identifier .IP See .IR function::pid2task (3stap) for details. .P .TP .B pid2execname The name of the given process identifier .IP See .IR function::pid2execname (3stap) for details. .P .TP .B task_tid The thread identifier of the task .IP See .IR function::task_tid (3stap) for details. .P .TP .B task_ns_tid The thread identifier of the task as seen in a namespace .IP See .IR function::task_ns_tid (3stap) for details. .P .TP .B task_gid The group identifier of the task .IP See .IR function::task_gid (3stap) for details. .P .TP .B task_ns_gid The group identifier of the task as seen in a namespace .IP See .IR function::task_ns_gid (3stap) for details. .P .TP .B task_egid The effective group identifier of the task .IP See .IR function::task_egid (3stap) for details. .P .TP .B task_ns_egid The effective group identifier of the task .IP See .IR function::task_ns_egid (3stap) for details. .P .TP .B task_uid The user identifier of the task .IP See .IR function::task_uid (3stap) for details. .P .TP .B task_ns_uid The user identifier of the task .IP See .IR function::task_ns_uid (3stap) for details. .P .TP .B task_euid The effective user identifier of the task .IP See .IR function::task_euid (3stap) for details. .P .TP .B task_ns_euid The effective user identifier of the task .IP See .IR function::task_ns_euid (3stap) for details. .P .TP .B task_prio The priority value of the task .IP See .IR function::task_prio (3stap) for details. .P .TP .B task_nice The nice value of the task .IP See .IR function::task_nice (3stap) for details. .P .TP .B task_cpu The scheduled cpu of the task .IP See .IR function::task_cpu (3stap) for details. .P .TP .B task_open_file_handles The number of open files of the task .IP See .IR function::task_open_file_handles (3stap) for details. .P .TP .B task_max_file_handles The max number of open files for the task .IP See .IR function::task_max_file_handles (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_current (3stap), .BR .IR \%function::task_parent (3stap), .BR .IR \%function::task_state (3stap), .BR .IR \%function::task_execname (3stap), .BR .IR \%function::task_pid (3stap), .BR .IR \%function::task_ns_pid (3stap), .BR .IR \%function::pid2task (3stap), .BR .IR \%function::pid2execname (3stap), .BR .IR \%function::task_tid (3stap), .BR .IR \%function::task_ns_tid (3stap), .BR .IR \%function::task_gid (3stap), .BR .IR \%function::task_ns_gid (3stap), .BR .IR \%function::task_egid (3stap), .BR .IR \%function::task_ns_egid (3stap), .BR .IR \%function::task_uid (3stap), .BR .IR \%function::task_ns_uid (3stap), .BR .IR \%function::task_euid (3stap), .BR .IR \%function::task_ns_euid (3stap), .BR .IR \%function::task_prio (3stap), .BR .IR \%function::task_nice (3stap), .BR .IR \%function::task_cpu (3stap), .BR .IR \%function::task_open_file_handles (3stap), .BR .IR \%function::task_max_file_handles (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_ancestry.3stap000066400000000000000000000006171414446751200306110ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_ANCESTRY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::task_ancestry \- systemtap task_ancestry tapset .SH DESCRIPTION .TP .P .TP .B task_ancestry The ancestry of the given task .IP See .IR function::task_ancestry (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_ancestry (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::task_time.3stap000066400000000000000000000055501414446751200277200ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TASK_TIME 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::task_time \- systemtap task_time tapset .SH DESCRIPTION Task time query and utility functions provide information about the time resource usage of the current task. These functions provide information about the user time and system time of the current task. And provide utility functions to turn the reported times into miliseconds and create human readable string representations of task time used. The reported times are approximates and should be used for "coarse grained" measurements only. The reported user and system time are only for the current task, not for the process as a whole nor of any time spend by children of the current task. .TP .P .TP .B task_utime User time of the task .IP See .IR function::task_utime (3stap) for details. .P .TP .B task_utime User time of the task .IP See .IR function::task_utime (3stap) for details. .P .TP .B task_stime System time of the task .IP See .IR function::task_stime (3stap) for details. .P .TP .B task_stime System time of the task .IP See .IR function::task_stime (3stap) for details. .P .TP .B task_start_time Start time of the given task .IP See .IR function::task_start_time (3stap) for details. .P .TP .B cputime_to_msecs Translates the given cputime into milliseconds .IP See .IR function::cputime_to_msecs (3stap) for details. .P .TP .B cputime_to_usecs Translates the given cputime into microseconds .IP See .IR function::cputime_to_usecs (3stap) for details. .P .TP .B msecs_to_string Human readable string for given milliseconds .IP See .IR function::msecs_to_string (3stap) for details. .P .TP .B usecs_to_string Human readable string for given microseconds .IP See .IR function::usecs_to_string (3stap) for details. .P .TP .B nsecs_to_string Human readable string for given nanoseconds .IP See .IR function::nsecs_to_string (3stap) for details. .P .TP .B cputime_to_string Human readable string for given cputime .IP See .IR function::cputime_to_string (3stap) for details. .P .TP .B task_time_string Human readable string of task time usage .IP See .IR function::task_time_string (3stap) for details. .P .TP .B task_time_string_tid Human readable string of task time usage .IP See .IR function::task_time_string_tid (3stap) for details. .SH SEE ALSO .BR .IR \%function::task_utime (3stap), .BR .IR \%function::task_stime (3stap), .BR .IR \%function::task_start_time (3stap), .BR .IR \%function::cputime_to_msecs (3stap), .BR .IR \%function::cputime_to_usecs (3stap), .BR .IR \%function::msecs_to_string (3stap), .BR .IR \%function::usecs_to_string (3stap), .BR .IR \%function::nsecs_to_string (3stap), .BR .IR \%function::cputime_to_string (3stap), .BR .IR \%function::task_time_string (3stap), .BR .IR \%function::task_time_string_tid (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcp.3stap000066400000000000000000000032531414446751200265240ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCP 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tcp \- systemtap tcp tapset .SH DESCRIPTION This family of probe points is used to probe events that occur in the TCP layer, .TP .P .TP .B tcp.sendmsg Sending a tcp message .IP See .IR probe::tcp.sendmsg (3stap) for details. .P .TP .B tcp.sendmsg.return Sending TCP message is done .IP See .IR probe::tcp.sendmsg.return (3stap) for details. .P .TP .B tcp.recvmsg Receiving TCP message .IP See .IR probe::tcp.recvmsg (3stap) for details. .P .TP .B tcp.recvmsg.return Receiving TCP message complete .IP See .IR probe::tcp.recvmsg.return (3stap) for details. .P .TP .B tcp.disconnect TCP socket disconnection .IP See .IR probe::tcp.disconnect (3stap) for details. .P .TP .B tcp.disconnect.return TCP socket disconnection complete .IP See .IR probe::tcp.disconnect.return (3stap) for details. .P .TP .B tcp.setsockopt Call to setsockopt() .IP See .IR probe::tcp.setsockopt (3stap) for details. .P .TP .B tcp.setsockopt.return Return from setsockopt() .IP See .IR probe::tcp.setsockopt.return (3stap) for details. .P .TP .B tcp.receive Called when a TCP packet is received .IP See .IR probe::tcp.receive (3stap) for details. .SH SEE ALSO .BR .IR \%probe::tcp.sendmsg (3stap), .BR .IR \%probe::tcp.sendmsg.return (3stap), .BR .IR \%probe::tcp.recvmsg (3stap), .BR .IR \%probe::tcp.recvmsg.return (3stap), .BR .IR \%probe::tcp.disconnect (3stap), .BR .IR \%probe::tcp.disconnect.return (3stap), .BR .IR \%probe::tcp.setsockopt (3stap), .BR .IR \%probe::tcp.setsockopt.return (3stap), .BR .IR \%probe::tcp.receive (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib-filter-default.3stap000066400000000000000000000007001414446751200321130ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB-FILTER-DEFAULT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tcpmib-filter-default \- systemtap tcpmib-filter-default tapset .SH DESCRIPTION .TP .P .TP .B tcpmib_filter_key Default filter function for tcpmib.* probes .IP See .IR function::tcpmib_filter_key (3stap) for details. .SH SEE ALSO .BR .IR \%function::tcpmib_filter_key (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tcpmib.3stap000066400000000000000000000047511414446751200272200ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TCPMIB 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tcpmib \- systemtap tcpmib tapset .SH DESCRIPTION .TP .P .TP .B tcpmib_get_state Get a socket's state .IP See .IR function::tcpmib_get_state (3stap) for details. .P .TP .B tcpmib_local_addr Get the source address .IP See .IR function::tcpmib_local_addr (3stap) for details. .P .TP .B tcpmib_remote_addr Get the remote address .IP See .IR function::tcpmib_remote_addr (3stap) for details. .P .TP .B tcpmib_local_port Get the local port .IP See .IR function::tcpmib_local_port (3stap) for details. .P .TP .B tcpmib_remote_port Get the remote port .IP See .IR function::tcpmib_remote_port (3stap) for details. .P .TP .B tcpmib.ActiveOpens Count an active opening of a socket .IP See .IR probe::tcpmib.ActiveOpens (3stap) for details. .P .TP .B tcpmib.AttemptFails Count a failed attempt to open a socket .IP See .IR probe::tcpmib.AttemptFails (3stap) for details. .P .TP .B tcpmib.CurrEstab Update the count of open sockets .IP See .IR probe::tcpmib.CurrEstab (3stap) for details. .P .TP .B tcpmib.EstabResets Count the reset of a socket .IP See .IR probe::tcpmib.EstabResets (3stap) for details. .P .TP .B tcpmib.InSegs Count an incoming tcp segment .IP See .IR probe::tcpmib.InSegs (3stap) for details. .P .TP .B tcpmib.OutRsts Count the sending of a reset packet .IP See .IR probe::tcpmib.OutRsts (3stap) for details. .P .TP .B tcpmib.OutSegs Count the sending of a TCP segment .IP See .IR probe::tcpmib.OutSegs (3stap) for details. .P .TP .B tcpmib.PassiveOpens Count the passive creation of a socket .IP See .IR probe::tcpmib.PassiveOpens (3stap) for details. .P .TP .B tcpmib.RetransSegs Count the retransmission of a TCP segment .IP See .IR probe::tcpmib.RetransSegs (3stap) for details. .SH SEE ALSO .BR .IR \%function::tcpmib_get_state (3stap), .BR .IR \%function::tcpmib_local_addr (3stap), .BR .IR \%function::tcpmib_remote_addr (3stap), .BR .IR \%function::tcpmib_local_port (3stap), .BR .IR \%function::tcpmib_remote_port (3stap), .BR .IR \%probe::tcpmib.ActiveOpens (3stap), .BR .IR \%probe::tcpmib.AttemptFails (3stap), .BR .IR \%probe::tcpmib.CurrEstab (3stap), .BR .IR \%probe::tcpmib.EstabResets (3stap), .BR .IR \%probe::tcpmib.InSegs (3stap), .BR .IR \%probe::tcpmib.OutRsts (3stap), .BR .IR \%probe::tcpmib.OutSegs (3stap), .BR .IR \%probe::tcpmib.PassiveOpens (3stap), .BR .IR \%probe::tcpmib.RetransSegs (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp.3stap000066400000000000000000000015331414446751200277400ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::timestamp \- systemtap timestamp tapset .SH DESCRIPTION Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. .TP .P .TP .B get_cycles Processor cycle count .IP See .IR function::get_cycles (3stap) for details. .P .TP .B jiffies Kernel jiffies count .IP See .IR function::jiffies (3stap) for details. .P .TP .B HZ Kernel HZ .IP See .IR function::HZ (3stap) for details. .SH SEE ALSO .BR .IR \%function::get_cycles (3stap), .BR .IR \%function::jiffies (3stap), .BR .IR \%function::HZ (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_gtod.3stap000066400000000000000000000016371414446751200307620ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_GTOD 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::timestamp_gtod \- systemtap timestamp_gtod tapset .SH DESCRIPTION .TP .P .TP .B gettimeofday_ns Number of nanoseconds since UNIX epoch .IP See .IR function::gettimeofday_ns (3stap) for details. .P .TP .B gettimeofday_us Number of microseconds since UNIX epoch .IP See .IR function::gettimeofday_us (3stap) for details. .P .TP .B gettimeofday_ms Number of milliseconds since UNIX epoch .IP See .IR function::gettimeofday_ms (3stap) for details. .P .TP .B gettimeofday_s Number of seconds since UNIX epoch .IP See .IR function::gettimeofday_s (3stap) for details. .SH SEE ALSO .BR .IR \%function::gettimeofday_ns (3stap), .BR .IR \%function::gettimeofday_us (3stap), .BR .IR \%function::gettimeofday_ms (3stap), .BR .IR \%function::gettimeofday_s (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::timestamp_monotonic.3stap000066400000000000000000000034061414446751200320260ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TIMESTAMP_MONOTONIC 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::timestamp_monotonic \- systemtap timestamp_monotonic tapset .SH DESCRIPTION .TP .P .TP .B cpu_clock_ns Number of nanoseconds on the given cpu's clock .IP See .IR function::cpu_clock_ns (3stap) for details. .P .TP .B cpu_clock_us Number of microseconds on the given cpu's clock .IP See .IR function::cpu_clock_us (3stap) for details. .P .TP .B cpu_clock_ms Number of milliseconds on the given cpu's clock .IP See .IR function::cpu_clock_ms (3stap) for details. .P .TP .B cpu_clock_s Number of seconds on the given cpu's clock .IP See .IR function::cpu_clock_s (3stap) for details. .P .TP .B local_clock_ns Number of nanoseconds on the local cpu's clock .IP See .IR function::local_clock_ns (3stap) for details. .P .TP .B local_clock_us Number of microseconds on the local cpu's clock .IP See .IR function::local_clock_us (3stap) for details. .P .TP .B local_clock_ms Number of milliseconds on the local cpu's clock .IP See .IR function::local_clock_ms (3stap) for details. .P .TP .B local_clock_s Number of seconds on the local cpu's clock .IP See .IR function::local_clock_s (3stap) for details. .P .TP .B ktime_get_ns Number of nanoseconds since boot .IP See .IR function::ktime_get_ns (3stap) for details. .SH SEE ALSO .BR .IR \%function::cpu_clock_ns (3stap), .BR .IR \%function::cpu_clock_us (3stap), .BR .IR \%function::cpu_clock_ms (3stap), .BR .IR \%function::cpu_clock_s (3stap), .BR .IR \%function::local_clock_ns (3stap), .BR .IR \%function::local_clock_us (3stap), .BR .IR \%function::local_clock_ms (3stap), .BR .IR \%function::local_clock_s (3stap), .BR .IR \%function::ktime_get_ns (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tokenize.3stap000066400000000000000000000007641414446751200275720ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TOKENIZE 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tokenize \- systemtap tokenize tapset .SH DESCRIPTION .TP .P .TP .B tokenize Return the next non-empty token in a string .IP See .IR function::tokenize (3stap) for details. .P .TP .B tokenize Return the next non-empty token in a string .IP See .IR function::tokenize (3stap) for details. .SH SEE ALSO .BR .IR \%function::tokenize (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tty.3stap000066400000000000000000000034651414446751200265630ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TTY 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tty \- systemtap tty tapset .SH DESCRIPTION .TP .P .TP .B tty.open Called when a tty is opened .IP See .IR probe::tty.open (3stap) for details. .P .TP .B tty.release Called when the tty is closed .IP See .IR probe::tty.release (3stap) for details. .P .TP .B tty.resize Called when a terminal resize happens .IP See .IR probe::tty.resize (3stap) for details. .P .TP .B tty.ioctl called when a ioctl is request to the tty .IP See .IR probe::tty.ioctl (3stap) for details. .P .TP .B tty.init Called when a tty is being initalized .IP See .IR probe::tty.init (3stap) for details. .P .TP .B tty.register Called when a tty device is registred .IP See .IR probe::tty.register (3stap) for details. .P .TP .B tty.unregister Called when a tty device is being unregistered .IP See .IR probe::tty.unregister (3stap) for details. .P .TP .B tty.poll Called when a tty device is being polled .IP See .IR probe::tty.poll (3stap) for details. .P .TP .B tty.receive called when a tty receives a message .IP See .IR probe::tty.receive (3stap) for details. .P .TP .B tty.write write to the tty line .IP See .IR probe::tty.write (3stap) for details. .P .TP .B tty.read called when a tty line will be read .IP See .IR probe::tty.read (3stap) for details. .SH SEE ALSO .BR .IR \%probe::tty.open (3stap), .BR .IR \%probe::tty.release (3stap), .BR .IR \%probe::tty.resize (3stap), .BR .IR \%probe::tty.ioctl (3stap), .BR .IR \%probe::tty.init (3stap), .BR .IR \%probe::tty.register (3stap), .BR .IR \%probe::tty.unregister (3stap), .BR .IR \%probe::tty.poll (3stap), .BR .IR \%probe::tty.receive (3stap), .BR .IR \%probe::tty.write (3stap), .BR .IR \%probe::tty.read (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::tzinfo.3stap000066400000000000000000000012751414446751200272510ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::TZINFO 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::tzinfo \- systemtap tzinfo tapset .SH DESCRIPTION .TP .P .TP .B tz_gmtoff Return local time zone offset .IP See .IR function::tz_gmtoff (3stap) for details. .P .TP .B tz_name Return local time zone name .IP See .IR function::tz_name (3stap) for details. .P .TP .B tz_ctime Convert seconds since epoch into human readable date/time string, with local time zone .IP See .IR function::tz_ctime (3stap) for details. .SH SEE ALSO .BR .IR \%function::tz_gmtoff (3stap), .BR .IR \%function::tz_name (3stap), .BR .IR \%function::tz_ctime (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-symbols.3stap000066400000000000000000000041201414446751200312670ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-SYMBOLS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ucontext-symbols \- systemtap ucontext-symbols tapset .SH DESCRIPTION User context symbol functions provide additional information about addresses from an application. These functions can provide information about the user space map (library) that the event occurred or the function symbol of an address. .TP .P .TP .B ustack Return address at given depth of user stack backtrace .IP See .IR function::ustack (3stap) for details. .P .TP .B usymname Return the symbol of an address in the current task. .IP See .IR function::usymname (3stap) for details. .P .TP .B usymdata Return the symbol and module offset of an address. .IP See .IR function::usymdata (3stap) for details. .P .TP .B print_ustack Print out stack for the current task from string. .IP See .IR function::print_ustack (3stap) for details. .P .TP .B print_usyms Print out user stack from string .IP See .IR function::print_usyms (3stap) for details. .P .TP .B sprint_ustack Return stack for the current task from string. .IP See .IR function::sprint_ustack (3stap) for details. .P .TP .B sprint_usyms Return stack for user addresses from string .IP See .IR function::sprint_usyms (3stap) for details. .P .TP .B usymfileline Return the file name and line number of an address. .IP See .IR function::usymfileline (3stap) for details. .P .TP .B usymfile Return the file name of a given address. .IP See .IR function::usymfile (3stap) for details. .P .TP .B usymline Return the line number of an address. .IP See .IR function::usymline (3stap) for details. .SH SEE ALSO .BR .IR \%function::ustack (3stap), .BR .IR \%function::usymname (3stap), .BR .IR \%function::usymdata (3stap), .BR .IR \%function::print_ustack (3stap), .BR .IR \%function::print_usyms (3stap), .BR .IR \%function::sprint_ustack (3stap), .BR .IR \%function::sprint_usyms (3stap), .BR .IR \%function::usymfileline (3stap), .BR .IR \%function::usymfile (3stap), .BR .IR \%function::usymline (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext-unwind.3stap000066400000000000000000000025041414446751200311070ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT-UNWIND 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ucontext-unwind \- systemtap ucontext-unwind tapset .SH DESCRIPTION .TP .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B sprint_ubacktrace Return stack back trace for current user-space task as string. .IP See .IR function::sprint_ubacktrace (3stap) for details. .P .TP .B print_ubacktrace_fileline Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace_fileline (3stap) for details. .P .TP .B print_ubacktrace Print stack back trace for current user-space task. .IP See .IR function::print_ubacktrace (3stap) for details. .P .TP .B ubacktrace Hex backtrace of current user-space task stack. .IP See .IR function::ubacktrace (3stap) for details. .SH SEE ALSO .BR .IR \%function::print_ubacktrace (3stap), .BR .IR \%function::sprint_ubacktrace (3stap), .BR .IR \%function::print_ubacktrace_fileline (3stap), .BR .IR \%function::print_ubacktrace (3stap), .BR .IR \%function::ubacktrace (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::ucontext.3stap000066400000000000000000000010371414446751200276050ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONTEXT 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::ucontext \- systemtap ucontext tapset .SH DESCRIPTION .TP .P .TP .B umodname Returns the (short) name of the user module. .IP See .IR function::umodname (3stap) for details. .P .TP .B ucallers Return first n elements of user stack backtrace .IP See .IR function::ucallers (3stap) for details. .SH SEE ALSO .BR .IR \%function::umodname (3stap), .BR .IR \%function::ucallers (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions-guru.3stap000066400000000000000000000031041414446751200314460ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS-GURU 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::uconversions-guru \- systemtap uconversions-guru tapset .SH DESCRIPTION .TP .P .TP .B set_user_string Writes a string to user memory .IP See .IR function::set_user_string (3stap) for details. .P .TP .B set_user_string_n Writes a string of given length to user memory .IP See .IR function::set_user_string_n (3stap) for details. .P .TP .B set_user_string_arg Writes a string to user memory. .IP See .IR function::set_user_string_arg (3stap) for details. .P .TP .B set_user_long Writes a long value to user memory .IP See .IR function::set_user_long (3stap) for details. .P .TP .B set_user_int Writes an int value to user memory .IP See .IR function::set_user_int (3stap) for details. .P .TP .B set_user_short Writes a short value to user memory .IP See .IR function::set_user_short (3stap) for details. .P .TP .B set_user_char Writes a char value to user memory .IP See .IR function::set_user_char (3stap) for details. .P .TP .B set_user_pointer Writes a pointer value to user memory. .IP See .IR function::set_user_pointer (3stap) for details. .SH SEE ALSO .BR .IR \%function::set_user_string (3stap), .BR .IR \%function::set_user_string_n (3stap), .BR .IR \%function::set_user_string_arg (3stap), .BR .IR \%function::set_user_long (3stap), .BR .IR \%function::set_user_int (3stap), .BR .IR \%function::set_user_short (3stap), .BR .IR \%function::set_user_char (3stap), .BR .IR \%function::set_user_pointer (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::uconversions.3stap000066400000000000000000000235361414446751200305010ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UCONVERSIONS 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::uconversions \- systemtap uconversions tapset .SH DESCRIPTION .TP .P .TP .B user_string Retrieves string from user space .IP See .IR function::user_string (3stap) for details. .P .TP .B user_string_nofault Retrieves string from user space .IP See .IR function::user_string_nofault (3stap) for details. .P .TP .B user_string Retrieves string from user space with alternative error string .IP See .IR function::user_string (3stap) for details. .P .TP .B user_string_warn Retrieves string from user space .IP See .IR function::user_string_warn (3stap) for details. .P .TP .B user_string_warn Retrieves string from user space with alternative warning string .IP See .IR function::user_string_warn (3stap) for details. .P .TP .B user_string_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_quoted (3stap) for details. .P .TP .B user_string_n Retrieves string of given length from user space .IP See .IR function::user_string_n (3stap) for details. .P .TP .B user_string_n_nofault Retrieves string of given length from user space .IP See .IR function::user_string_n_nofault (3stap) for details. .P .TP .B user_string_n Retrieves string of given length from user space .IP See .IR function::user_string_n (3stap) for details. .P .TP .B user_string_n_warn Retrieves string from user space .IP See .IR function::user_string_n_warn (3stap) for details. .P .TP .B user_string_n_warn Retrieves string from user space with alternative warning string .IP See .IR function::user_string_n_warn (3stap) for details. .P .TP .B user_string_n_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_n_quoted (3stap) for details. .P .TP .B user_string_n_quoted Retrieves and quotes string from user space .IP See .IR function::user_string_n_quoted (3stap) for details. .P .TP .B user_string_utf32 Retrieves UTF-32 string from user memory .IP See .IR function::user_string_utf32 (3stap) for details. .P .TP .B user_string_utf32 Retrieves UTF-32 string from user memory with alternative error string .IP See .IR function::user_string_utf32 (3stap) for details. .P .TP .B user_string_quoted_utf32 Quote given user UTF-32 string. .IP See .IR function::user_string_quoted_utf32 (3stap) for details. .P .TP .B user_string_utf16 Retrieves UTF-16 string from user memory .IP See .IR function::user_string_utf16 (3stap) for details. .P .TP .B user_string_utf16 Retrieves UTF-16 string from user memory with alternative error string .IP See .IR function::user_string_utf16 (3stap) for details. .P .TP .B user_string_quoted_utf16 Quote given user UTF-16 string. .IP See .IR function::user_string_quoted_utf16 (3stap) for details. .P .TP .B user_char_error Retrieves a char value stored in user space .IP See .IR function::user_char_error (3stap) for details. .P .TP .B user_char Retrieves a char value stored in user space .IP See .IR function::user_char (3stap) for details. .P .TP .B user_char_warn Retrieves a char value stored in user space .IP See .IR function::user_char_warn (3stap) for details. .P .TP .B user_short_error Retrieves a short value stored in user space .IP See .IR function::user_short_error (3stap) for details. .P .TP .B user_short Retrieves a short value stored in user space .IP See .IR function::user_short (3stap) for details. .P .TP .B user_short_warn Retrieves a short value stored in user space .IP See .IR function::user_short_warn (3stap) for details. .P .TP .B user_ushort_error Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort_error (3stap) for details. .P .TP .B user_ushort Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort (3stap) for details. .P .TP .B user_ushort_warn Retrieves an unsigned short value stored in user space .IP See .IR function::user_ushort_warn (3stap) for details. .P .TP .B user_int_error Retrieves an int value stored in user space .IP See .IR function::user_int_error (3stap) for details. .P .TP .B user_int Retrieves an int value stored in user space .IP See .IR function::user_int (3stap) for details. .P .TP .B user_int_warn Retrieves an int value stored in user space .IP See .IR function::user_int_warn (3stap) for details. .P .TP .B user_long_error Retrieves a long value stored in user space .IP See .IR function::user_long_error (3stap) for details. .P .TP .B user_long Retrieves a long value stored in user space .IP See .IR function::user_long (3stap) for details. .P .TP .B user_long_warn Retrieves a long value stored in user space .IP See .IR function::user_long_warn (3stap) for details. .P .TP .B user_ulong_error Retrieves a unsigned long value stored in user space .IP See .IR function::user_ulong_error (3stap) for details. .P .TP .B user_ulong Retrieves an unsigned long value stored in user space .IP See .IR function::user_ulong (3stap) for details. .P .TP .B user_ulong_warn Retrieves an unsigned long value stored in user space .IP See .IR function::user_ulong_warn (3stap) for details. .P .TP .B user_int8_error Retrieves a 8-bit integer value stored in user space .IP See .IR function::user_int8_error (3stap) for details. .P .TP .B user_int8 Retrieves a 8-bit integer value stored in user space .IP See .IR function::user_int8 (3stap) for details. .P .TP .B user_uint8_error Retrieves a unsigned 8-bit integer value stored in user space .IP See .IR function::user_uint8_error (3stap) for details. .P .TP .B user_uint8 Retrieves a unsigned 8-bit integer value stored in user space .IP See .IR function::user_uint8 (3stap) for details. .P .TP .B user_int16_error Retrieves a 16-bit integer value stored in user space .IP See .IR function::user_int16_error (3stap) for details. .P .TP .B user_int16 Retrieves a 16-bit integer value stored in user space .IP See .IR function::user_int16 (3stap) for details. .P .TP .B user_uint16_error Retrieves an unsigned 16-bit integer value stored in user space .IP See .IR function::user_uint16_error (3stap) for details. .P .TP .B user_uint16 Retrieves an unsigned 16-bit integer value stored in user space .IP See .IR function::user_uint16 (3stap) for details. .P .TP .B user_int32_error Retrieves a 32-bit integer value stored in user space .IP See .IR function::user_int32_error (3stap) for details. .P .TP .B user_int32 Retrieves a 32-bit integer value stored in user space .IP See .IR function::user_int32 (3stap) for details. .P .TP .B user_uint32_error Retrieves an unsigned 32-bit integer value stored in user space .IP See .IR function::user_uint32_error (3stap) for details. .P .TP .B user_uint32 Retrieves an unsigned 32-bit integer value stored in user space .IP See .IR function::user_uint32 (3stap) for details. .P .TP .B user_int64_error Retrieves a 64-bit integer value stored in user space .IP See .IR function::user_int64_error (3stap) for details. .P .TP .B user_int64 Retrieves a 64-bit integer value stored in user space .IP See .IR function::user_int64 (3stap) for details. .P .TP .B user_uint64_error Retrieves an unsigned 64-bit integer value stored in user space .IP See .IR function::user_uint64_error (3stap) for details. .P .TP .B user_uint64 Retrieves an unsigned 64-bit integer value stored in user space .IP See .IR function::user_uint64 (3stap) for details. .P .TP .B user_buffer_quoted Retrieves and quotes buffer from user space .IP See .IR function::user_buffer_quoted (3stap) for details. .P .TP .B user_buffer_quoted_error Retrieves and quotes buffer from user space .IP See .IR function::user_buffer_quoted_error (3stap) for details. .SH SEE ALSO .BR .IR \%function::user_string (3stap), .BR .IR \%function::user_string_nofault (3stap), .BR .IR \%function::user_string (3stap), .BR .IR \%function::user_string_warn (3stap), .BR .IR \%function::user_string_quoted (3stap), .BR .IR \%function::user_string_n (3stap), .BR .IR \%function::user_string_n_nofault (3stap), .BR .IR \%function::user_string_n (3stap), .BR .IR \%function::user_string_n_warn (3stap), .BR .IR \%function::user_string_n_quoted (3stap), .BR .IR \%function::user_string_utf32 (3stap), .BR .IR \%function::user_string_quoted_utf32 (3stap), .BR .IR \%function::user_string_utf16 (3stap), .BR .IR \%function::user_string_quoted_utf16 (3stap), .BR .IR \%function::user_char_error (3stap), .BR .IR \%function::user_char (3stap), .BR .IR \%function::user_char_warn (3stap), .BR .IR \%function::user_short_error (3stap), .BR .IR \%function::user_short (3stap), .BR .IR \%function::user_short_warn (3stap), .BR .IR \%function::user_ushort_error (3stap), .BR .IR \%function::user_ushort (3stap), .BR .IR \%function::user_ushort_warn (3stap), .BR .IR \%function::user_int_error (3stap), .BR .IR \%function::user_int (3stap), .BR .IR \%function::user_int_warn (3stap), .BR .IR \%function::user_long_error (3stap), .BR .IR \%function::user_long (3stap), .BR .IR \%function::user_long_warn (3stap), .BR .IR \%function::user_ulong_error (3stap), .BR .IR \%function::user_ulong (3stap), .BR .IR \%function::user_ulong_warn (3stap), .BR .IR \%function::user_int8_error (3stap), .BR .IR \%function::user_int8 (3stap), .BR .IR \%function::user_uint8_error (3stap), .BR .IR \%function::user_uint8 (3stap), .BR .IR \%function::user_int16_error (3stap), .BR .IR \%function::user_int16 (3stap), .BR .IR \%function::user_uint16_error (3stap), .BR .IR \%function::user_uint16 (3stap), .BR .IR \%function::user_int32_error (3stap), .BR .IR \%function::user_int32 (3stap), .BR .IR \%function::user_uint32_error (3stap), .BR .IR \%function::user_uint32 (3stap), .BR .IR \%function::user_int64_error (3stap), .BR .IR \%function::user_int64 (3stap), .BR .IR \%function::user_uint64_error (3stap), .BR .IR \%function::user_uint64 (3stap), .BR .IR \%function::user_buffer_quoted (3stap), .BR .IR \%function::user_buffer_quoted_error (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/man_pages/tapset::udp.3stap000066400000000000000000000025541414446751200265310ustar00rootroot00000000000000.\" -*- nroff -*- .TH TAPSET::UDP 3stap "November 2021" "SystemTap Tapset Reference" .SH NAME tapset::udp \- systemtap udp tapset .SH DESCRIPTION This family of probe points is used to probe events that occur in the UDP layer. .TP .P .TP .B udp.sendmsg Fires whenever a process sends a UDP message .IP See .IR probe::udp.sendmsg (3stap) for details. .P .TP .B udp.sendmsg.return Fires whenever an attempt to send a UDP message is completed .IP See .IR probe::udp.sendmsg.return (3stap) for details. .P .TP .B udp.recvmsg Fires whenever a UDP message is received .IP See .IR probe::udp.recvmsg (3stap) for details. .P .TP .B udp.recvmsg.return Fires whenever an attempt to receive a UDP message received is completed .IP See .IR probe::udp.recvmsg.return (3stap) for details. .P .TP .B udp.disconnect Fires when a process requests for a UDP disconnection .IP See .IR probe::udp.disconnect (3stap) for details. .P .TP .B udp.disconnect.return UDP has been disconnected successfully .IP See .IR probe::udp.disconnect.return (3stap) for details. .SH SEE ALSO .BR .IR \%probe::udp.sendmsg (3stap), .BR .IR \%probe::udp.sendmsg.return (3stap), .BR .IR \%probe::udp.recvmsg (3stap), .BR .IR \%probe::udp.recvmsg.return (3stap), .BR .IR \%probe::udp.disconnect (3stap), .BR .IR \%probe::udp.disconnect.return (3stap), .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/manpager000077500000000000000000000120411414446751200231360ustar00rootroot00000000000000#!/bin/bash # This script builds overview man pages for each tapset from the doc # comments in the tapset source. As such, the man page content # generated herein should be in sync with the SystemTap Tapset # Reference. # If testing manually, just run this script with # doc/SystemTap_Tapset_Reference as the working directory # and the SRCTREE variable set to the location of your # systemtap source tree. echo "Starting manpager in" `pwd` # cleanup rm -rf man_pages # create working directory mkdir workingdir ; # create list of man pages to generate cat $SRCTREE/doc/SystemTap_Tapset_Reference/tapsets.tmpl | grep ^\!Itapset > manpageus ; sed -i -e 's/\!Itapset\///g' manpageus ; # copy list of man pages into working directory # with similar basenames concatenated for i in `cat manpageus` ; do b=`basename $i | sed -e 's/.stpm$/.stp/'` cat $SRCTREE/tapset/$i >>workingdir/$b ; done ; # rewrite manpageus to the resulting files ls workingdir >manpageus # enter workdir cd workingdir ; # copy tapsetdescriptions, then clean for i in `cat ../manpageus`; do sed -n '/\/\/ /,/\/\/ <\/tapsetdescription>/ s/.*/&/w temp' < $i ; mv temp $i.tapsetdescription ; sed -i -e 's/\/\/ //g' $i.tapsetdescription ; sed -i -e 's/\/\/ <\/tapsetdescription>//g' $i.tapsetdescription ; sed -i -e 's/\/\///g' $i.tapsetdescription ; # XXX: may want to trim whitespace from description edges done # strip all tapset files to just comments; but all comments must be exactly 1 space before and after "*" for i in `cat ../manpageus` ; do sed -i -e 's/^ \*/ \*/g' $i; sed -i -e 's/^ \* / \* /g' $i; # mark the start of each probe entry (sub "/**") perl -p -i -e 's|^/\*\*| *probestart|g' $i; sed -i -e '/^ \*/!d' $i; # rename all tapsets (remove .stp/.stpm filename suffix), create templates echo $i > tempname ; sed -i -e 's/.stpm*$//g' tempname ; mv $i `cat tempname` ; mv tempname $i ; done ; # create man page headers date=`date "+%B %Y"` for i in `ls | grep -v .stp | grep -v tapsetdescription` ; do icap=`echo $i | tr a-z A-Z` echo ".\\\" -*- nroff -*-" >> $i.template ; echo ".TH TAPSET::"$icap" 3stap \"$date\" \"SystemTap Tapset Reference\"" >> $i.template ; echo ".SH NAME" >> $i.template ; echo "tapset::"`cat $i.stp`" \- systemtap "`cat $i.stp`" tapset" >> $i.template ; echo " " >> $i.template ; echo ".SH DESCRIPTION" >> $i.template ; cat $i.stp.tapsetdescription >> $i.template ; echo ".TP" >> $i.template ; done # clean man page body sed -i -e 's/\.stp$//g' ../manpageus ; for i in `cat ../manpageus` ; do mv $i $i.tmp ; perl -e 'while(<>){print"$1\n"if/ \* probe ([^\n]*) -/;}' $i.tmp >$i.probenames; perl -e 'while(<>){print"$1\n"if/ \* sfunction ([^\n]*) -/;}' $i.tmp >$i.funcnames; perl -e 'while(<>){print"$1\n"if/ \* smacro ([^\n]*) -/;}' $i.tmp >$i.macros; # perl -p -i -e 's/ \* (probe|sfunction) ([^\n]*)\n/.P\n.TP\n.B $1 \n $2\n$3\n perl -p -i -e 's/ \* sfunction ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B $1 \n$2\n.IP\nSee \n.IR function::$1 \(3stap\)\n for details.\n/g' $i.tmp ; perl -p -i -e 's/ \* probe ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B $1 \n$2\n.IP\n See \n.IR probe::$1 \(3stap\)\n for details.\n/g' $i.tmp ; perl -p -i -e 's/ \* smacro ([^\n]*) - ([^\n]*)\n/.P\n.TP\n.B \@$1 \n$2\n.IP\n See \n.IR macro::$1 \(3stap\)\n for details.\n/g' $i.tmp ; # XXX: the people hunger for argument descriptions, which would be extracted here perl -p -i -e 's/ \*([^\n]*)\n//g' $i.tmp ; # nuke the rest of it done # generate footer template for i in `cat ../manpageus` ; do echo "" >> $i.footer echo ".SH SEE ALSO" >> $i.footer for j in `cat $i.funcnames | uniq` ; do echo ".BR" >> $i.footer echo ".IR \\%function::"$j" (3stap)," >> $i.footer done for j in `cat $i.probenames` ; do echo ".BR" >> $i.footer echo ".IR \\%probe::"$j" (3stap)," >> $i.footer done for j in `cat $i.macros` ; do echo ".BR" >> $i.footer echo ".IR \\%macro::"$j" (3stap)," >> $i.footer done echo ".BR" >> $i.footer echo ".IR \\%stap (1)," >> $i.footer echo ".IR \\%stapprobes (3stap)" >> $i.footer done # add cross reference to enclosed functions and probes for i in `cat ../manpageus` ; do for j in `cat $i.funcnames | uniq` ; do echo ".SH SEE ALSO\n " >> ../man3/function::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/function::$j.3stap done for j in `cat $i.probenames` ; do echo ".SH SEE ALSO\n " >> ../man3/probe::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/probe::$j.3stap done for j in `cat $i.macros` ; do echo ".SH SEE ALSO\n " >> ../man3/macro::$j.3stap echo ".IR tapset::$i (3stap)" >> ../man3/macro::$j.3stap done done # assemble parts for i in `cat ../manpageus`; do cat $i.template >> tapset\:\:$i.3stap ; cat $i.tmp >> tapset\:\:$i.3stap ; cat $i.footer >> tapset\:\:$i.3stap ; # final polish sed -i -e 's/\*\/$//g' tapset\:\:$i.3stap ; done # cleanup for i in `ls | grep -v -e "tapset::.*\\.3stap"` ; do rm $i ; done rm ../manpageus ; cd .. mv workingdir man_pages echo " " echo "Finished! man pages generated in ./man_pages." echo " " systemtap-4.6/doc/SystemTap_Tapset_Reference/overload.py000077500000000000000000000061251414446751200236140ustar00rootroot00000000000000# XML tree transformation for systemtap function overloading # This script merges all overloaded tapset function entries # into one entry. import sys from lxml import etree DEBUG = 0 def collect_overloads(refentries): """ Collect overloads into lists. """ functions = {} for entry in refentries: name = entry.xpath("refnamediv/refname")[0].text if name not in functions: functions[name] = [] functions[name].append(entry) return {k: v for (k, v) in functions.items() if len(v) > 1} def get_params(functions): """ Return a parameter list containing the parameters for all overloads. """ seen = set() params = [] for overload in functions: refsect = overload.xpath("refsect1[1]")[0] # add variablelist node for future construction if len(refsect.xpath("variablelist")) == 0: refsect.remove(refsect[1]) etree.SubElement(refsect, "variablelist") continue param_list = refsect.xpath("variablelist")[0].getchildren() for param in param_list: name = param.xpath("term/parameter")[0].text if name not in seen: seen.add(name) params.append(param) return params def annotate(entry): """ Numbers all overloaded entries. """ num_overloads = len(entry.xpath("refsynopsisdiv/programlisting")) synopsis = entry.xpath("refsynopsisdiv/programlisting") description = entry.xpath("refsect1[2]/para") for i in range(num_overloads): synopsis[i].text = str(i+1) + ")" + " " + synopsis[i].text.strip() description[i].text = str(i+1) + ")" + " " + description[i].text.strip() def merge(functions): """ Merge matching refentries into one and delete them from their parents. """ merged = functions[0] # merge params new_params = get_params(functions) param_list = merged.xpath("refsect1[1]/variablelist")[0] for param in param_list: param.getparent().remove(param) for param in new_params: param_list.append(param) # merge synopsis and descriptions description = merged.xpath("refsect1[2]")[0] synopsis = merged.xpath("refsynopsisdiv")[0] for overload in functions[1:]: synopsis.append(overload.xpath("refsynopsisdiv/programlisting")[0]) description.append(overload.xpath("refsect1[2]/para")[0]) overload.getparent().remove(overload) annotate(merged) def merge_overloads(functions_list): for functions in functions_list.values(): merge(functions) def usage(): print("Usage: ./overload.py ") def main(): if len(sys.argv) != 2: usage() sys.exit() parser = etree.XMLParser(remove_comments=False) tree = etree.parse(sys.argv[1], parser=parser) root = tree.getroot() refentries = [r for r in root.iter("refentry")] functions = collect_overloads(refentries) merge_overloads(functions) output_file = getattr(sys.stdout, "buffer", sys.stdout) tree.write(output_file, encoding="UTF-8", xml_declaration=True) if __name__ == '__main__': main() systemtap-4.6/doc/SystemTap_Tapset_Reference/publicanize.sh000077700000000000000000000000001414446751200336632../Tapset_Reference_Guide/publicanize.shustar00rootroot00000000000000systemtap-4.6/doc/SystemTap_Tapset_Reference/sort-tapsets.xslt000066400000000000000000000012611414446751200250040ustar00rootroot00000000000000 systemtap-4.6/doc/SystemTap_Tapset_Reference/syscalls.3stap000066400000000000000000000625331414446751200242420ustar00rootroot00000000000000." -*- nroff -*- .TH TAPSET::SYSCALLS 3stap "November 2021" "Systemtap Tapset Reference" .SH NAME tapset::syscalls \- systemtap syscall tapset .SH DESCRIPTION Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. .TP .P .TP .P .TP .B syscall.accept addr_uaddr, addrlen_uaddr, sockfd .P .TP .B syscall.accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd .P .TP .B syscall.access mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.acct filename, filename_unquoted .P .TP .B syscall.add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr .P .TP .B syscall.adjtimex buf_str, buf_uaddr .P .TP .B syscall.alarm seconds .P .TP .B syscall.arch_prctl addr, code, code_str .P .TP .B syscall.bdflush data, data_str, func .P .TP .B syscall.bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.bpf attr_uaddr, cmd, cmd_str, size .P .TP .B syscall.brk brk .P .TP .B syscall.capget data_uaddr, header_uaddr .P .TP .B syscall.capset data_uaddr, header_uaddr .P .TP .B syscall.chdir path, path_unquoted .P .TP .B syscall.chmod mode, path, path_unquoted .P .TP .B syscall.chown group, owner, path, path_unquoted .P .TP .B syscall.chown16 group, owner, path, path_unquoted .P .TP .B syscall.chroot path, path_unquoted .P .TP .B syscall.clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str .P .TP .B syscall.clock_getres clk_id, clk_id_str, res_uaddr .P .TP .B syscall.clock_gettime clk_id, clk_id_str, tp_uaddr .P .TP .B syscall.clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str .P .TP .B syscall.clone $id, $regs, child_tid_uaddr, clone_flags, int, parent_tid_uaddr, pt_regs*, stack_start .P .TP .B syscall.close fd .P .TP .B syscall.compat_adjtimex $id, $regs, buf_str, buf_uaddr, int, pt_regs* .P .TP .B syscall.compat_clock_nanosleep $id, $regs, clk_id, clk_id_str, flags, flags_str, int, pt_regs*, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_execve args, env_str, filename .P .TP .B syscall.compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.compat_fadvise64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.compat_fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.compat_fallocate $id, $regs, fd, int, len, mode, mode_str, offset, pt_regs* .P .TP .B syscall.compat_ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.compat_futex $id, $regs, futex_uaddr, int, op, pt_regs*, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.compat_futimesat $id, $regs, dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, int, pt_regs*, tvp_str, tvp_uaddr .P .TP .B syscall.compat_getitimer value_uaddr, which .P .TP .B syscall.compat_lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* .P .TP .B syscall.compat_nanosleep $id, $regs, int, pt_regs*, rem_uaddr, req_str, req_uaddr .P .TP .B syscall.compat_ppoll $id, $regs, fds_uaddr, int, nfds, pt_regs*, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.compat_pselect6 $id, $regs, exceptfds, int, nfds, pt_regs*, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.compat_readahead $id, $regs, count, fd, int, offset, pt_regs* .P .TP .B syscall.compat_recvmmsg $id, $regs, flags, flags_str, int, mmsg_uaddr, pt_regs*, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.compat_signalfd flags .P .TP .B syscall.compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.compat_sys_recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.compat_sys_sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.compat_sys_utimes $id, $regs, filename, filename_unquoted, int, pt_regs*, timeval, tvp_uaddr_str .P .TP .B syscall.compat_truncate64 $id, $regs, int, length, path, path_uaddr, path_unquoted, pt_regs* .P .TP .B syscall.compat_utime $id, $regs, actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, int, modtime, pt_regs* .P .TP .B syscall.compat_utimensat $id, $regs, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, int, pt_regs*, tsp_str, tsp_uaddr .P .TP .B syscall.compat_vmsplice $id, $regs, fd, flags, flags_str, int, iov, nr_segs, pt_regs* .P .TP .B syscall.connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id .P .TP .B syscall.copy_file_range fd_in, fd_out, flags, len, off_in, off_out .P .TP .B syscall.creat mode, pathname, pathname_unquoted .P .TP .B syscall.delete_module flags, flags_str, name_user, name_user_unquoted .P .TP .B syscall.dup oldfd .P .TP .B syscall.dup2 flags, flags_str, newfd, oldfd .P .TP .B syscall.dup3 flags, flags_str, newfd, oldfd .P .TP .B syscall.epoll_create flags, size .P .TP .B syscall.epoll_ctl epfd, event_uaddr, fd, op, op_str .P .TP .B syscall.epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout .P .TP .B syscall.epoll_wait epfd, events_uaddr, maxevents, timeout .P .TP .B syscall.eventfd count, flags, flags_str .P .TP .B syscall.execve args, env_str, filename .P .TP .B syscall.execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str .P .TP .B syscall.exit status .P .TP .B syscall.exit_group status .P .TP .B syscall.faccessat dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.fadvise64 advice, advice_str, fd, len, offset .P .TP .B syscall.fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* .P .TP .B syscall.fallocate fd, len, mode, mode_str, offset .P .TP .B syscall.fanotify_init event_f_flags, event_f_flags_str, flags, flags_str .P .TP .B syscall.fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname, pathname_unquoted .P .TP .B syscall.fchdir fd .P .TP .B syscall.fchmod fildes, mode .P .TP .B syscall.fchmodat dirfd, dirfd_str, mode, pathname, pathname_unquoted .P .TP .B syscall.fchown fd, group, owner .P .TP .B syscall.fchown16 fd, group, owner .P .TP .B syscall.fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname, pathname_unquoted .P .TP .B syscall.fcntl arg, cmd, cmd_str, fd .P .TP .B syscall.fdatasync fd .P .TP .B syscall.fgetxattr filedes, name_str, name_str_unquoted, size, value_uaddr .P .TP .B syscall.finit_module fd, flags, flags_str, uargs, uargs_unquoted .P .TP .B syscall.flistxattr filedes, list_uaddr, size .P .TP .B syscall.flock fd, operation .P .TP .B syscall.fork .P .TP .B syscall.fremovexattr filedes, name_str, name_str_unquoted, name_uaddr .P .TP .B syscall.fsetxattr filedes, flags, flags_str, name_str, name_str_unquoted, name_uaddr, size, value_str, value_uaddr .P .TP .B syscall.fstat buf_uaddr, filedes .P .TP .B syscall.fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path, path_unquoted .P .TP .B syscall.fstatfs buf_uaddr, fd .P .TP .B syscall.fstatfs64 buf_uaddr, fd, sz .P .TP .B syscall.fsync fd .P .TP .B syscall.ftruncate fd, length .P .TP .B syscall.ftruncate64 $id, $regs, fd, int, length, pt_regs* .P .TP .B syscall.futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val .P .TP .B syscall.futimesat dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, tvp_str, tvp_uaddr .P .TP .B syscall.get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr .P .TP .B syscall.get_robust_list len_uaddr, list_head_uaddr, pid .P .TP .B syscall.get_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.getcpu cpu_uaddr, node_uaddr, tcache_uaddr .P .TP .B syscall.getcwd buf_uaddr, size .P .TP .B syscall.getdents count, dirp_uaddr, fd .P .TP .B syscall.getegid .P .TP .B syscall.geteuid .P .TP .B syscall.getgid .P .TP .B syscall.getgroups list_uaddr, size .P .TP .B syscall.getitimer value_uaddr, which .P .TP .B syscall.getpeername name_uaddr, namelen_uaddr, s .P .TP .B syscall.getpgid pid .P .TP .B syscall.getpgrp .P .TP .B syscall.getpid .P .TP .B syscall.getppid .P .TP .B syscall.getpriority which, who .P .TP .B syscall.getrandom buf, buf_unquoted, count, flags, flags_str .P .TP .B syscall.getresgid egid_uaddr, rgid_uaddr, sgid_uaddr .P .TP .B syscall.getresuid euid_uaddr, ruid_uaddr, suid_uaddr .P .TP .B syscall.getrlimit resource, rlim_uaddr .P .TP .B syscall.getrusage usage_uaddr, who, who_str .P .TP .B syscall.getsid pid .P .TP .B syscall.getsockname name_uaddr, namelen_uaddr, s .P .TP .B syscall.getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr .P .TP .B syscall.gettid .P .TP .B syscall.gettimeofday tv_uaddr, tz_uaddr .P .TP .B syscall.getuid .P .TP .B syscall.getxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr .P .TP .B syscall.init_module len, uargs, uargs_unquoted, umod_uaddr .P .TP .B syscall.inotify_add_watch fd, mask, mask_str, path, path_uaddr, path_unquoted .P .TP .B syscall.inotify_init flags .P .TP .B syscall.inotify_rm_watch fd, wd .P .TP .B syscall.io_cancel ctx_id, iocb_uaddr, result_uaddr .P .TP .B syscall.io_destroy ctx .P .TP .B syscall.io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr .P .TP .B syscall.io_setup ctxp_uaddr, maxevents .P .TP .B syscall.io_submit ctx_id, iocbpp_uaddr, nr .P .TP .B syscall.ioctl argp, fd, request .P .TP .B syscall.ioperm from, num, turn_on .P .TP .B syscall.iopl level .P .TP .B syscall.ioprio_get which, which_str, who .P .TP .B syscall.ioprio_set ioprio, ioprio_str, which, which_str, who .P .TP .B syscall.kcmp idx1, idx2, pid1, pid2, type, type_str .P .TP .B syscall.kexec_file_load cmdline, cmdline_len, cmdline_unquoted, flags, flags_str, initrd_fd, kernel_fd .P .TP .B syscall.kexec_load entry, flags, flags_str, nr_segments, segments_uaddr .P .TP .B syscall.keyctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.kill pid, sig, sig_name .P .TP .B syscall.lchown group, owner, path, path_unquoted .P .TP .B syscall.lchown16 group, owner, path, path_unquoted .P .TP .B syscall.lgetxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr .P .TP .B syscall.link newpath, newpath_unquoted, oldpath, oldpath_unquoted .P .TP .B syscall.linkat flags, flags_str, newdirfd, newdirfd_str, newpath, newpath_unquoted, olddirfd, olddirfd_str, oldpath, oldpath_unquoted .P .TP .B syscall.listen backlog, sockfd .P .TP .B syscall.listxattr list_uaddr, path, path_uaddr, path_unquoted, size .P .TP .B syscall.llistxattr list_uaddr, path, path_uaddr, path_unquoted, size .P .TP .B syscall.llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str .P .TP .B syscall.lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* .P .TP .B syscall.lremovexattr name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted .P .TP .B syscall.lseek fildes, offset, whence, whence_str .P .TP .B syscall.lsetxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr .P .TP .B syscall.lstat buf_uaddr, path, path_unquoted .P .TP .B syscall.madvise advice, advice_str, length, start .P .TP .B syscall.mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start .P .TP .B syscall.membarrier cmd, cmd_str, flags .P .TP .B syscall.memfd_create flags, flags_str, uname, uname_unquoted .P .TP .B syscall.migrate_pages maxnode, new_nodes, old_nodes, pid .P .TP .B syscall.mincore length, start, vec_uaddr .P .TP .B syscall.mkdir mode, pathname, pathname_uaddr, pathname_unquoted .P .TP .B syscall.mkdirat dirfd, dirfd_str, mode, pahtname_unquoted, pathname .P .TP .B syscall.mknod dev, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted .P .TP .B syscall.mlock addr, len .P .TP .B syscall.mlock2 addr, flags, flags_str, len .P .TP .B syscall.mlockall flags, flags_str .P .TP .B syscall.mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start .P .TP .B syscall.modify_ldt bytecount, func, ptr_uaddr .P .TP .B syscall.mount data, data_unquoted, filesystemtype, filesystemtype_unquoted, mountflags, mountflags_str, source, source_unquoted, target, target_unquoted .P .TP .B syscall.move_pages flags, flags_str, nodes, nr_pages, pages, pid, status .P .TP .B syscall.mprotect addr, len, prot, prot_str .P .TP .B syscall.mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr .P .TP .B syscall.mq_notify mqdes, notification_uaddr .P .TP .B syscall.mq_open filename, filename_unquoted, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr .P .TP .B syscall.mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr .P .TP .B syscall.mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr .P .TP .B syscall.mq_unlink u_name, u_name_uaddr, u_name_unquoted .P .TP .B syscall.mremap flags, flags_str, new_address, new_size, old_address, old_size .P .TP .B syscall.msgctl buf_uaddr, cmd, cmd_str, msqid .P .TP .B syscall.msgget key, key_str, msgflg, msgflg_str .P .TP .B syscall.msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid .P .TP .B syscall.msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid .P .TP .B syscall.msync flags, flags_str, length, start .P .TP .B syscall.munlock addr, len .P .TP .B syscall.munlockall .P .TP .B syscall.munmap length, start .P .TP .B syscall.name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname, pathname_unquoted .P .TP .B syscall.nanosleep rem_uaddr, req_str, req_uaddr .P .TP .B syscall.ni_syscall .P .TP .B syscall.nice inc .P .TP .B syscall.open filename, filename_unquoted, flags, flags_str, mode .P .TP .B syscall.open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str .P .TP .B syscall.openat dfd, dfd_str, filename, filename_unquoted, flags, flags_str, mode .P .TP .B syscall.pause .P .TP .B syscall.perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid .P .TP .B syscall.personality persona .P .TP .B syscall.pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 .P .TP .B syscall.pivot_root new_root_str, new_root_str_unquoted, old_root_str, old_root_str_unquoted .P .TP .B syscall.pkey_alloc flags, init_val, init_val_str .P .TP .B syscall.pkey_free pkey .P .TP .B syscall.pkey_mprotect addr, len, pkey, prot, prot_str .P .TP .B syscall.poll nfds, timeout, ufds_uaddr .P .TP .B syscall.ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str .P .TP .B syscall.prctl arg2, arg3, arg4, arg5, option .P .TP .B syscall.pread buf_uaddr, count, fd, offset .P .TP .B syscall.preadv count, fd, offset, vector_uaddr .P .TP .B syscall.preadv2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str .P .TP .B syscall.process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt .P .TP .B syscall.pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds .P .TP .B syscall.ptrace addr, data, pid, request .P .TP .B syscall.pwrite buf_str, buf_uaddr, count, fd, offset .P .TP .B syscall.pwrite32 $id, $regs, buf_str, buf_uaddr, count, fd, int, offset, pt_regs* .P .TP .B syscall.pwritev count, fd, offset, vector_uaddr .P .TP .B syscall.pwritev2 count, fd, flags, flags_str, offset, vector_uaddr .P .TP .B syscall.quotactl addr_uaddr, cmd, cmd_str, id, special, special_str, special_str_unquoted .P .TP .B syscall.read buf_uaddr, count, fd .P .TP .B syscall.readahead count, fd, offset .P .TP .B syscall.readdir count, dirent, fd .P .TP .B syscall.readlink buf_uaddr, bufsiz, path, path_unquoted .P .TP .B syscall.readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path, path_unquoted .P .TP .B syscall.readv count, fd, vector_uaddr .P .TP .B syscall.reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str .P .TP .B syscall.recv buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen .P .TP .B syscall.recvmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start .P .TP .B syscall.removexattr name_str, name_str_unquoted, path, path_unquoted .P .TP .B syscall.rename newpath, newpath_unquoted, oldpath, oldpath_unquoted .P .TP .B syscall.renameat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.request_key callout_info_uaddr, description_str, description_str_unquoted, description_uaddr, destringid, type_str, type_str_unquoted, type_uaddr .P .TP .B syscall.restart_syscall .P .TP .B syscall.rmdir pathname, pathname_unquoted .P .TP .B syscall.rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize .P .TP .B syscall.rt_sigpending set_uaddr, sigsetsize .P .TP .B syscall.rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr .P .TP .B syscall.rt_sigsuspend set_str, set_uaddr, sigsetsize .P .TP .B syscall.rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr .P .TP .B syscall.rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr .P .TP .B syscall.sched_get_priority_max policy, policy_str .P .TP .B syscall.sched_get_priority_min policy, policy_str .P .TP .B syscall.sched_getaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size .P .TP .B syscall.sched_getparam p_uaddr, pid .P .TP .B syscall.sched_getscheduler pid .P .TP .B syscall.sched_rr_get_interval pid, tp_uaddr .P .TP .B syscall.sched_setaffinity len, mask_uaddr, pid .P .TP .B syscall.sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr .P .TP .B syscall.sched_setparam p_uaddr, pid .P .TP .B syscall.sched_setscheduler p_uaddr, pid, policy, policy_str .P .TP .B syscall.sched_yield .P .TP .B syscall.seccomp flags, flags_str, op, op_str, uargs_uaddr .P .TP .B syscall.select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr .P .TP .B syscall.semctl arg, cmd, cmdstr, semid, semnum .P .TP .B syscall.semget key, key_str, nsems, semflg, semflg_str .P .TP .B syscall.semop nsops, semid, sops_uaddr .P .TP .B syscall.semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr .P .TP .B syscall.send buf, buf_uaddr, flags, flags_str, len, s .P .TP .B syscall.sendfile count, in_fd, offset_uaddr, out_fd .P .TP .B syscall.sendmmsg flags, flags_str, mmsg_uaddr, s, vlen .P .TP .B syscall.sendmsg flags, flags_str, msg_uaddr, s .P .TP .B syscall.sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen .P .TP .B syscall.set_mempolicy maxnode, mode, mode_str, nmask_uaddr .P .TP .B syscall.set_robust_list len, list_head_uaddr .P .TP .B syscall.set_thread_area u_info_str, u_info_uaddr .P .TP .B syscall.set_tid_address tidptr_uaddr .P .TP .B syscall.setdomainname domainname_str, domainname_str_unquoted, domainname_uaddr, len .P .TP .B syscall.setfsgid fsgid .P .TP .B syscall.setfsuid fsuid .P .TP .B syscall.setgid gid .P .TP .B syscall.setgroups list_uaddr, size .P .TP .B syscall.sethostname hostname_uaddr, len, name_str, name_str_unquoted .P .TP .B syscall.setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str .P .TP .B syscall.setns fd, nstype, nstype_str .P .TP .B syscall.setpgid pgid, pid .P .TP .B syscall.setpriority prio, which, which_str, who .P .TP .B syscall.setregid egid, rgid .P .TP .B syscall.setregid16 egid, rgid .P .TP .B syscall.setresgid egid, rgid, sgid .P .TP .B syscall.setresgid16 egid, rgid, sgid .P .TP .B syscall.setresuid euid, ruid, suid .P .TP .B syscall.setresuid16 euid, ruid, suid .P .TP .B syscall.setreuid euid, ruid .P .TP .B syscall.setreuid16 euid, ruid .P .TP .B syscall.setrlimit resource, resource_str, rlim_str, rlim_uaddr .P .TP .B syscall.setsid .P .TP .B syscall.setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr .P .TP .B syscall.settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr .P .TP .B syscall.setuid uid .P .TP .B syscall.setxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr .P .TP .B syscall.sgetmask .P .TP .B syscall.shmat shmaddr_uaddr, shmflg, shmflg_str, shmid .P .TP .B syscall.shmctl buf_uaddr, cmd, cmd_str, shmid .P .TP .B syscall.shmdt shmaddr_uaddr .P .TP .B syscall.shmget key, shmflg, shmflg_str, size .P .TP .B syscall.shutdown how, how_str, s .P .TP .B syscall.sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str .P .TP .B syscall.sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str .P .TP .B syscall.sigaltstack uoss_uaddr, uss_str, uss_uaddr .P .TP .B syscall.signal handler, handler_str, sig, sig_str .P .TP .B syscall.signalfd flags .P .TP .B syscall.sigpending set .P .TP .B syscall.sigprocmask how, how_str, oldset_uaddr, set_uaddr .P .TP .B syscall.sigsuspend mask, mask_str .P .TP .B syscall.socket family, family_str, protocol, protocol_str, type, type_str .P .TP .B syscall.socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str .P .TP .B syscall.splice fd_in, fd_out, flags, flags_str, len, off_in, off_out .P .TP .B syscall.ssetmask newmask, newmask_str .P .TP .B syscall.stat buf_uaddr, filename, filename_uaddr, filename_unquoted .P .TP .B syscall.statfs buf_uaddr, path, path_unquoted .P .TP .B syscall.statfs64 buf_uaddr, path, path_unquoted, sz .P .TP .B syscall.statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, mask, mask_str .P .TP .B syscall.stime t_uaddr .P .TP .B syscall.swapoff path, path_uaddr, path_unquoted .P .TP .B syscall.swapon path, path_uaddr, path_unquoted, swapflags, swapflags_str .P .TP .B syscall.symlink newpath, oldpath, oldpath_unquoted .P .TP .B syscall.symlinkat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, oldname, oldname_str, oldname_str_unquoted .P .TP .B syscall.sync .P .TP .B syscall.sync_file_range fd, flags, flags_str, nbytes, offset .P .TP .B syscall.syncfs fd .P .TP .B syscall.sysctl $id, $regs, args, int, pt_regs* .P .TP .B syscall.sysfs arg1, arg2, option .P .TP .B syscall.sysinfo info_str, info_uaddr .P .TP .B syscall.syslog bufp_uaddr, len, type .P .TP .B syscall.tee fdin, fdout, flags, len .P .TP .B syscall.tgkill pid, sig, sig_str, tgid .P .TP .B syscall.time t_uaddr .P .TP .B syscall.timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr .P .TP .B syscall.timer_delete timerid .P .TP .B syscall.timer_getoverrun timerid .P .TP .B syscall.timer_gettime timerid, value_uaddr .P .TP .B syscall.timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr .P .TP .B syscall.timerfd_create clockid, clockid_str, flags, flags_str .P .TP .B syscall.timerfd_gettime fd, value_uaddr .P .TP .B syscall.timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr .P .TP .B syscall.times buf_str, buf_uaddr .P .TP .B syscall.tkill pid, sig, sig_str .P .TP .B syscall.truncate length, path, path_uaddr, path_unquoted .P .TP .B syscall.umask mask .P .TP .B syscall.umount flags, flags_str, target, target_unquoted .P .TP .B syscall.uname name_uaddr .P .TP .B syscall.unlink pathname, pathname_uaddr, pathname_unquoted .P .TP .B syscall.unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str, pathname_str_unquoted .P .TP .B syscall.unshare unshare_flags, unshare_flags_str .P .TP .B syscall.uselib $id, $regs, int, library, library_uaddr, library_unquoted, pt_regs* .P .TP .B syscall.userfaultfd flags, flags_str .P .TP .B syscall.ustat dev, ubuf_uaddr .P .TP .B syscall.ustat32 dev, ubuf_uaddr .P .TP .B syscall.utime actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, modtime .P .TP .B syscall.utimensat dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, tsp_str, tsp_uaddr .P .TP .B syscall.utimes filename, filename_uaddr, filename_unquoted, tvp_uaddr, tvp_uaddr_str .P .TP .B syscall.vfork .P .TP .B syscall.vhangup .P .TP .B syscall.vmsplice fd, flags, flags_str, iov, nr_segs .P .TP .B syscall.wait4 options, options_str, pid, rusage_uaddr, status_uaddr .P .TP .B syscall.waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str .P .TP .B syscall.waitpid options, options_str, pid, status_uaddr .P .TP .B syscall.write buf_str, buf_uaddr, count, fd .P .TP .B syscall.writev count, fd, vector_uaddr .SH SEE ALSO .BR .IR \%stap (1), .IR \%stapprobes (3stap) systemtap-4.6/doc/SystemTap_Tapset_Reference/syscalls.xmlpart000066400000000000000000001143021414446751200246670ustar00rootroot00000000000000 syscalls Following is an overview of available syscall probes and convenience variables they offer. By default, each syscall probe has name and argstr convenience variables, which are not included in the overview in order to keep it short. Non dwarf-based nd_syscall probes are supposed to have the same convenience variables. Syscalls list syscall params accept addr_uaddr, addrlen_uaddr, sockfd accept4 addr_uaddr, addrlen_uaddr, flags, flags_str, sockfd access mode, mode_str, pathname, pathname_unquoted acct filename, filename_unquoted add_key description_uaddr, payload_uaddr, plen, ringid, type_uaddr adjtimex buf_str, buf_uaddr alarm seconds arch_prctl addr, code, code_str bdflush data, data_str, func bind addrlen, my_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id bpf attr_uaddr, cmd, cmd_str, size brk brk capget data_uaddr, header_uaddr capset data_uaddr, header_uaddr chdir path, path_unquoted chmod mode, path, path_unquoted chown group, owner, path, path_unquoted chown16 group, owner, path, path_unquoted chroot path, path_unquoted clock_adjtime clk_id, clk_id_str, tx_uaddr, tx_uaddr_str clock_getres clk_id, clk_id_str, res_uaddr clock_gettime clk_id, clk_id_str, tp_uaddr clock_nanosleep clk_id, clk_id_str, flags, flags_str, rem_uaddr, req_str, req_uaddr clock_settime clk_id, clk_id_str, tp_uaddr, tp_uaddr_str clone $id, $regs, child_tid_uaddr, clone_flags, int, parent_tid_uaddr, pt_regs*, stack_start close fd compat_adjtimex $id, $regs, buf_str, buf_uaddr, int, pt_regs* compat_clock_nanosleep $id, $regs, clk_id, clk_id_str, flags, flags_str, int, pt_regs*, rem_uaddr, req_str, req_uaddr compat_execve args, env_str, filename compat_execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str compat_fadvise64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* compat_fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* compat_fallocate $id, $regs, fd, int, len, mode, mode_str, offset, pt_regs* compat_ftruncate64 $id, $regs, fd, int, length, pt_regs* compat_futex $id, $regs, futex_uaddr, int, op, pt_regs*, uaddr2_uaddr, utime_uaddr, val3, val compat_futimesat $id, $regs, dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, int, pt_regs*, tvp_str, tvp_uaddr compat_getitimer value_uaddr, which compat_lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* compat_nanosleep $id, $regs, int, pt_regs*, rem_uaddr, req_str, req_uaddr compat_ppoll $id, $regs, fds_uaddr, int, nfds, pt_regs*, sigmask, sigsetsize, tsp, tsp_str compat_pselect6 $id, $regs, exceptfds, int, nfds, pt_regs*, readfds, sigmask, timeout, timeout_str, writefds compat_readahead $id, $regs, count, fd, int, offset, pt_regs* compat_recvmmsg $id, $regs, flags, flags_str, int, mmsg_uaddr, pt_regs*, s, timeout_str, timeout_uaddr, vlen compat_select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr compat_setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str compat_signalfd flags compat_sys_msgctl buf_uaddr, cmd, cmd_str, msqid compat_sys_msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid compat_sys_msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid compat_sys_recvmsg flags, flags_str, msg_uaddr, s compat_sys_semctl arg, cmd, cmdstr, semid, semnum compat_sys_semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr compat_sys_sendmsg flags, flags_str, msg_uaddr, s compat_sys_shmat shmaddr_uaddr, shmflg, shmflg_str, shmid compat_sys_shmctl buf_uaddr, cmd, cmd_str, shmid compat_sys_utimes $id, $regs, filename, filename_unquoted, int, pt_regs*, timeval, tvp_uaddr_str compat_truncate64 $id, $regs, int, length, path, path_uaddr, path_unquoted, pt_regs* compat_utime $id, $regs, actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, int, modtime, pt_regs* compat_utimensat $id, $regs, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, int, pt_regs*, tsp_str, tsp_uaddr compat_vmsplice $id, $regs, fd, flags, flags_str, int, iov, nr_segs, pt_regs* connect addrlen, serv_addr_uaddr, sockfd, uaddr_af, uaddr_ip, uaddr_ip_port, uaddr_ipv6_flowinfo, uaddr_ipv6_scope_id copy_file_range fd_in, fd_out, flags, len, off_in, off_out creat mode, pathname, pathname_unquoted delete_module flags, flags_str, name_user, name_user_unquoted dup oldfd dup2 flags, flags_str, newfd, oldfd dup3 flags, flags_str, newfd, oldfd epoll_create flags, size epoll_ctl epfd, event_uaddr, fd, op, op_str epoll_pwait epfd, events_uaddr, maxevents, sigmask_uaddr, sigsetsize, timeout epoll_wait epfd, events_uaddr, maxevents, timeout eventfd count, flags, flags_str execve args, env_str, filename execveat args, dirfd, dirfd_str, env_str, filename, flags, flags_str exit status exit_group status faccessat dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted fadvise64 advice, advice_str, fd, len, offset fadvise64_64 $id, $regs, advice, advice_str, fd, int, len, offset, pt_regs* fallocate fd, len, mode, mode_str, offset fanotify_init event_f_flags, event_f_flags_str, flags, flags_str fanotify_mark dirfd, dirfd_str, fanotify_fd, flags, flags_str, mask, mask_str, pathname, pathname_unquoted fchdir fd fchmod fildes, mode fchmodat dirfd, dirfd_str, mode, pathname, pathname_unquoted fchown fd, group, owner fchown16 fd, group, owner fchownat dirfd, dirfd_str, flags, flags_str, group, owner, pathname, pathname_unquoted fcntl arg, cmd, cmd_str, fd fdatasync fd fgetxattr filedes, name_str, name_str_unquoted, size, value_uaddr finit_module fd, flags, flags_str, uargs, uargs_unquoted flistxattr filedes, list_uaddr, size flock fd, operation fork fremovexattr filedes, name_str, name_str_unquoted, name_uaddr fsetxattr filedes, flags, flags_str, name_str, name_str_unquoted, name_uaddr, size, value_str, value_uaddr fstat buf_uaddr, filedes fstatat buf_uaddr, dirfd, dirfd_str, flags, flags_str, path, path_unquoted fstatfs buf_uaddr, fd fstatfs64 buf_uaddr, fd, sz fsync fd ftruncate fd, length ftruncate64 $id, $regs, fd, int, length, pt_regs* futex futex_uaddr, op, uaddr2_uaddr, utime_uaddr, val3, val futimesat dirfd, dirfd_str, filename, filename_uaddr, filename_unquoted, tvp_str, tvp_uaddr get_mempolicy addr, flags, flags_str, maxnode, nmask_uaddr, policy_uaddr get_robust_list len_uaddr, list_head_uaddr, pid get_thread_area u_info_str, u_info_uaddr getcpu cpu_uaddr, node_uaddr, tcache_uaddr getcwd buf_uaddr, size getdents count, dirp_uaddr, fd getegid geteuid getgid getgroups list_uaddr, size getitimer value_uaddr, which getpeername name_uaddr, namelen_uaddr, s getpgid pid getpgrp getpid getppid getpriority which, who getrandom buf, buf_unquoted, count, flags, flags_str getresgid egid_uaddr, rgid_uaddr, sgid_uaddr getresuid euid_uaddr, ruid_uaddr, suid_uaddr getrlimit resource, rlim_uaddr getrusage usage_uaddr, who, who_str getsid pid getsockname name_uaddr, namelen_uaddr, s getsockopt fd, level, level_str, optlen_uaddr, optname, optname_str, optval_uaddr gettid gettimeofday tv_uaddr, tz_uaddr getuid getxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr init_module len, uargs, uargs_unquoted, umod_uaddr inotify_add_watch fd, mask, mask_str, path, path_uaddr, path_unquoted inotify_init flags inotify_rm_watch fd, wd io_cancel ctx_id, iocb_uaddr, result_uaddr io_destroy ctx io_getevents ctx_id, events_uaddr, min_nr, nr, timeout_uaddr, timestr io_setup ctxp_uaddr, maxevents io_submit ctx_id, iocbpp_uaddr, nr ioctl argp, fd, request ioperm from, num, turn_on iopl level ioprio_get which, which_str, who ioprio_set ioprio, ioprio_str, which, which_str, who kcmp idx1, idx2, pid1, pid2, type, type_str kexec_file_load cmdline, cmdline_len, cmdline_unquoted, flags, flags_str, initrd_fd, kernel_fd kexec_load entry, flags, flags_str, nr_segments, segments_uaddr keyctl arg2, arg3, arg4, arg5, option kill pid, sig, sig_name lchown group, owner, path, path_unquoted lchown16 group, owner, path, path_unquoted lgetxattr name_str, name_str_unquoted, path, path_unquoted, size, value_uaddr link newpath, newpath_unquoted, oldpath, oldpath_unquoted linkat flags, flags_str, newdirfd, newdirfd_str, newpath, newpath_unquoted, olddirfd, olddirfd_str, oldpath, oldpath_unquoted listen backlog, sockfd listxattr list_uaddr, path, path_uaddr, path_unquoted, size llistxattr list_uaddr, path, path_uaddr, path_unquoted, size llseek fd, offset_high, offset_low, result_uaddr, whence, whence_str lookup_dcookie $id, $regs, buffer_uaddr, cookie, int, len, pt_regs* lremovexattr name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted lseek fildes, offset, whence, whence_str lsetxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr lstat buf_uaddr, path, path_unquoted madvise advice, advice_str, length, start mbind flags, flags_str, len, maxnode, mode, mode_str, nmask_uaddr, start membarrier cmd, cmd_str, flags memfd_create flags, flags_str, uname, uname_unquoted migrate_pages maxnode, new_nodes, old_nodes, pid mincore length, start, vec_uaddr mkdir mode, pathname, pathname_uaddr, pathname_unquoted mkdirat dirfd, dirfd_str, mode, pahtname_unquoted, pathname mknod dev, mode, mode_str, pathname, pathname_unquoted mknodat dev, dirfd, dirfd_str, mode, mode_str, pathname, pathname_unquoted mlock addr, len mlock2 addr, flags, flags_str, len mlockall flags, flags_str mmap2 fd, flags, flags_str, length, pgoffset, prot, prot_str, start modify_ldt bytecount, func, ptr_uaddr mount data, data_unquoted, filesystemtype, filesystemtype_unquoted, mountflags, mountflags_str, source, source_unquoted, target, target_unquoted move_pages flags, flags_str, nodes, nr_pages, pages, pid, status mprotect addr, len, prot, prot_str mq_getsetattr mqdes, u_mqstat_uaddr, u_omqstat_uaddr mq_notify mqdes, notification_uaddr mq_open filename, filename_unquoted, mode, name_uaddr, oflag, oflag_str, u_attr_uaddr mq_timedreceive abs_timeout_uaddr, mqdes, msg_len, msg_prio_uaddr, msg_ptr_uaddr mq_timedsend abs_timeout_uaddr, mqdes, msg_len, msg_prio, msg_ptr_uaddr mq_unlink u_name, u_name_uaddr, u_name_unquoted mremap flags, flags_str, new_address, new_size, old_address, old_size msgctl buf_uaddr, cmd, cmd_str, msqid msgget key, key_str, msgflg, msgflg_str msgrcv msgflg, msgflg_str, msgp_uaddr, msgsz, msgtyp, msqid msgsnd msgflg, msgflg_str, msgp_uaddr, msgsz, msqid msync flags, flags_str, length, start munlock addr, len munlockall munmap length, start name_to_handle_at dfd, dfd_str, flags, flags_str, handle_uaddr, mnt_id_uaddr, pathname, pathname_unquoted nanosleep rem_uaddr, req_str, req_uaddr ni_syscall nice inc open filename, filename_unquoted, flags, flags_str, mode open_by_handle_at flags, flags_str, handle_uaddr, mount_dfd, mount_dfd_str openat dfd, dfd_str, filename, filename_unquoted, flags, flags_str, mode pause perf_event_open attr_uaddr, cpu, flags, flags_str, group_fd, pid personality persona pipe fildes_uaddr, flag_str, flags, pipe0, pipe1 pivot_root new_root_str, new_root_str_unquoted, old_root_str, old_root_str_unquoted pkey_alloc flags, init_val, init_val_str pkey_free pkey pkey_mprotect addr, len, pkey, prot, prot_str poll nfds, timeout, ufds_uaddr ppoll fds_uaddr, nfds, sigmask, sigsetsize, tsp, tsp_str prctl arg2, arg3, arg4, arg5, option pread buf_uaddr, count, fd, offset preadv count, fd, offset, vector_uaddr preadv2 count, fd, flags, flags_str, offset, vector_uaddr prlimit64 new_rlim_str, new_rlim_uaddr, old_rlim_uaddr, pid, resource, resource_str process_vm_readv flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt process_vm_writev flags, liovcnt, local_iov_uaddr, pid, remote_iov_uaddr, riovcnt pselect6 exceptfds, nfds, readfds, sigmask, timeout, timeout_str, writefds ptrace addr, data, pid, request pwrite buf_str, buf_uaddr, count, fd, offset pwrite32 $id, $regs, buf_str, buf_uaddr, count, fd, int, offset, pt_regs* pwritev count, fd, offset, vector_uaddr pwritev2 count, fd, flags, flags_str, offset, vector_uaddr quotactl addr_uaddr, cmd, cmd_str, id, special, special_str, special_str_unquoted read buf_uaddr, count, fd readahead count, fd, offset readdir count, dirent, fd readlink buf_uaddr, bufsiz, path, path_unquoted readlinkat buf_uaddr, bufsiz, dfd, dfd_str, path, path_unquoted readv count, fd, vector_uaddr reboot arg_uaddr, flag, flag_str, magic2, magic2_str, magic, magic_str recv buf_uaddr, flags, flags_str, len, s recvfrom addr_uaddr, addrlen_uaddr, buf_uaddr, flags, flags_str, len, s recvmmsg flags, flags_str, mmsg_uaddr, s, timeout_str, timeout_uaddr, vlen recvmsg flags, flags_str, msg_uaddr, s remap_file_pages flags, flags_str, pgoff, prot, prot_str, size, start removexattr name_str, name_str_unquoted, path, path_unquoted rename newpath, newpath_unquoted, oldpath, oldpath_unquoted renameat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted renameat2 flags, flags_str, newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, olddfd, olddfd_str, oldname, oldname_str, oldname_str_unquoted request_key callout_info_uaddr, description_str, description_str_unquoted, description_uaddr, destringid, type_str, type_str_unquoted, type_uaddr restart_syscall rmdir pathname, pathname_unquoted rt_sigaction act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize rt_sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str, sigsetsize rt_sigpending set_uaddr, sigsetsize rt_sigprocmask how, how_str, oldset_uaddr, set_str, set_uaddr, sigsetsize rt_sigqueueinfo pid, sig, sig_name, siginfo_str, uinfo_uaddr rt_sigsuspend set_str, set_uaddr, sigsetsize rt_sigtimedwait sigsetsize, uinfo_str, uinfo_uaddr, uthese_str, uthese_uaddr, uts_str, uts_uaddr rt_tgsigqueueinfo sig, sig_str, tgid, tid, uinfo_str, uinfo_uaddr sched_get_priority_max policy, policy_str sched_get_priority_min policy, policy_str sched_getaffinity len, mask_uaddr, pid sched_getattr flags, pid, sched_attr_str, sched_attr_uaddr, size sched_getparam p_uaddr, pid sched_getscheduler pid sched_rr_get_interval pid, tp_uaddr sched_setaffinity len, mask_uaddr, pid sched_setattr flags, pid, sched_attr_str, sched_attr_uaddr sched_setparam p_uaddr, pid sched_setscheduler p_uaddr, pid, policy, policy_str sched_yield seccomp flags, flags_str, op, op_str, uargs_uaddr select exceptfds_uaddr, n, readfds_uaddr, timeout_str, timeout_uaddr, writefds_uaddr semctl arg, cmd, cmdstr, semid, semnum semget key, key_str, nsems, semflg, semflg_str semop nsops, semid, sops_uaddr semtimedop nsops, semid, sops_uaddr, timeout_str, timeout_uaddr send buf, buf_uaddr, flags, flags_str, len, s sendfile count, in_fd, offset_uaddr, out_fd sendmmsg flags, flags_str, mmsg_uaddr, s, vlen sendmsg flags, flags_str, msg_uaddr, s sendto buf, buf_uaddr, flags, flags_str, len, s, to_str, to_uaddr, tolen set_mempolicy maxnode, mode, mode_str, nmask_uaddr set_robust_list len, list_head_uaddr set_thread_area u_info_str, u_info_uaddr set_tid_address tidptr_uaddr setdomainname domainname_str, domainname_str_unquoted, domainname_uaddr, len setfsgid fsgid setfsuid fsuid setgid gid setgroups list_uaddr, size sethostname hostname_uaddr, len, name_str, name_str_unquoted setitimer ovalue_uaddr, value_str, value_uaddr, which, which_str setns fd, nstype, nstype_str setpgid pgid, pid setpriority prio, which, which_str, who setregid egid, rgid setregid16 egid, rgid setresgid egid, rgid, sgid setresgid16 egid, rgid, sgid setresuid euid, ruid, suid setresuid16 euid, ruid, suid setreuid euid, ruid setreuid16 euid, ruid setrlimit resource, resource_str, rlim_str, rlim_uaddr setsid setsockopt fd, level, level_str, optlen, optname, optname_str, optval_uaddr settimeofday tv_str, tv_uaddr, tz_str, tz_uaddr settimeofday32 tv_str, tv_uaddr, tz_str, tz_uaddr setuid uid setxattr flags, flags_str, name_str, name_str_unquoted, name_uaddr, path, path_uaddr, path_unquoted, size, value_str, value_uaddr sgetmask shmat shmaddr_uaddr, shmflg, shmflg_str, shmid shmctl buf_uaddr, cmd, cmd_str, shmid shmdt shmaddr_uaddr shmget key, shmflg, shmflg_str, size shutdown how, how_str, s sigaction $id, $regs, act_str, act_uaddr, int, oact_uaddr, pt_regs*, sig, sig_str sigaction32 act_str, act_uaddr, oact_uaddr, sig, sig_str sigaltstack uoss_uaddr, uss_str, uss_uaddr signal handler, handler_str, sig, sig_str signalfd flags sigpending set sigprocmask how, how_str, oldset_uaddr, set_uaddr sigsuspend mask, mask_str socket family, family_str, protocol, protocol_str, type, type_str socketpair family, family_str, protocol, protocol_str, sv_uaddr, type, type_str splice fd_in, fd_out, flags, flags_str, len, off_in, off_out ssetmask newmask, newmask_str stat buf_uaddr, filename, filename_uaddr, filename_unquoted statfs buf_uaddr, path, path_unquoted statfs64 buf_uaddr, path, path_unquoted, sz statx buf_uaddr, dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, mask, mask_str stime t_uaddr swapoff path, path_uaddr, path_unquoted swapon path, path_uaddr, path_unquoted, swapflags, swapflags_str symlink newpath, oldpath, oldpath_unquoted symlinkat newdfd, newdfd_str, newname, newname_str, newname_str_unquoted, oldname, oldname_str, oldname_str_unquoted sync sync_file_range fd, flags, flags_str, nbytes, offset syncfs fd sysctl $id, $regs, args, int, pt_regs* sysfs arg1, arg2, option sysinfo info_str, info_uaddr syslog bufp_uaddr, len, type tee fdin, fdout, flags, len tgkill pid, sig, sig_str, tgid time t_uaddr timer_create clockid, clockid_str, evp_uaddr, timerid_uaddr timer_delete timerid timer_getoverrun timerid timer_gettime timerid, value_uaddr timer_settime flags, ovalue_uaddr, timerid, value_str, value_uaddr timerfd_create clockid, clockid_str, flags, flags_str timerfd_gettime fd, value_uaddr timerfd_settime fd, flags, flags_str, ovalue_uaddr, value_str, value_uaddr times buf_str, buf_uaddr tkill pid, sig, sig_str truncate length, path, path_uaddr, path_unquoted umask mask umount flags, flags_str, target, target_unquoted uname name_uaddr unlink pathname, pathname_uaddr, pathname_unquoted unlinkat dfd, dfd_str, flag, flag_str, pathname, pathname_str, pathname_str_unquoted unshare unshare_flags, unshare_flags_str uselib $id, $regs, int, library, library_uaddr, library_unquoted, pt_regs* userfaultfd flags, flags_str ustat dev, ubuf_uaddr ustat32 dev, ubuf_uaddr utime actime, buf_uaddr, filename, filename_uaddr, filename_unquoted, modtime utimensat dfd, dfd_str, filename, filename_uaddr, filename_unquoted, flags, flags_str, tsp_str, tsp_uaddr utimes filename, filename_uaddr, filename_unquoted, tvp_uaddr, tvp_uaddr_str vfork vhangup vmsplice fd, flags, flags_str, iov, nr_segs wait4 options, options_str, pid, rusage_uaddr, status_uaddr waitid infop_uaddr, options, options_str, pid, rusage_uaddr, which, which_str waitpid options, options_str, pid, status_uaddr write buf_str, buf_uaddr, count, fd writev count, fd, vector_uaddr
systemtap-4.6/doc/SystemTap_Tapset_Reference/tapcheck.sh000077500000000000000000000035241414446751200235450ustar00rootroot00000000000000#!/bin/sh #check to make sure a tapsets.tmpl file exists if [ ! -f tapsets.tmpl ]; then echo "Error: tapsets.tmpl doesn't exist in the current directory!" exit 1 fi # list the tapsets in the tapsets.tmpl file and properly format the # file names grep "\.stp" tapsets.tmpl | grep ! | sed 's/!Itapset\///g' > checkfile2 # change to the tapset directory and check the tapsets there # check to see if directory is present first if [ ! -d ../../tapset/ ]; then echo "Error: tapsets directory doesn't exist!" exit 1 fi (cd ../../tapset/; find -path "*.stp") | sed 's/\.\///g' > checkfile1 #might as well check for the functions that are documented in #langref now too (cd ../../tapset/; find -path "*.stp" -exec grep -H sfunction {} \; ) \ | sed 's/\.\///g' | cut -d : -f 1 | sort -d | uniq > tap1 # order the tapset names then diff the files to examine the differences sort -d checkfile1 | uniq > checkfile1s sort -d checkfile2 | uniq > checkfile2s comm -23 checkfile1s checkfile2s > missingdoc comm -12 missingdoc tap1 > commondoc comm -23 missingdoc tap1 > missingdoc1 comm -13 checkfile1s checkfile2s > missingtap zero='0' one='1' Missingdoc=`cat missingdoc1 |wc -l ` Missingtap=`cat missingtap | wc -l ` Commondoc=`cat commondoc | wc -l ` if [ "$Missingdoc" -gt "$zero" ] then echo "You have missing documentation from tapsets in use, specifically:" cat missingdoc1 fi if [ "$Missingtap" -gt "$zero" ] then echo "You have documentation for the following tapsets that don't exist!" cat missingtap fi if [ "$Commondoc" -gt "$zero" ] then echo "The following tapsets did not appear in tapset.tmpl, but have references in the langref file." cat commondoc fi rm checkfile2 checkfile2s checkfile1 checkfile1s missingtap missingdoc missingdoc1 commondoc tap1 # at the end we need to make sure we remove any files that we created # change to proper directory first systemtap-4.6/doc/SystemTap_Tapset_Reference/tapsets.pdf000066400000000000000000056464431414446751200236240ustar00rootroot00000000000000%PDF-1.4 % 1 0 obj << /Title (SystemTap Tapset Reference Manual) /Author (SystemTap) /Creator (DocBook XSL Stylesheets with Apache FOP) /Producer (Apache FOP Version 2.5) /CreationDate (D:20211108135225-05'00') >> endobj 2 0 obj << /N 3 /Length 3 0 R /Filter /FlateDecode >> stream xD])AпmBajT>0*,car;*RGyޡ%> x/"Wz6\_7OK7~pSGC^πb@Z.vџ[Td^)9Z3Óyȼyme7Ūebs3|)P`s zg;ûCRmO$e>~瀴A*_ZT 둖oOB+s>둇7׿=87koyԧph5w~ʷe{s7y.G-X.|xSG/\/]pSXo[DNP6UۮU?-e !~mPA̷cjW_~AuPjw*hHZ\1z3NJ0|o/sBr0bq cCl{-YK`.Q@bLu΀_yZmIǰ tF7(45^\e,Ψd-qluKo/f J6֕~jSӮT(pO);$@8<;wC ?y]*;$ 濼lWtC S0s">_9y_}7R-k.\? q9)V*W?AkJ|AG?M'8wW>+`qЗs :~^^@?n Qj7@ tM0%ҍD^k].Eh6xhZ5)f2D Wt!}L5IoVA?D+E^2t:b{Ŀ)Kx?՘GV|yYjiH6Ց ~HnwqUi,GE<2ꣾ]U,ǠjmK4thKCjBکQWheKf)SA?B{ii"4ҲfHpcy], `IVrZ[H=2G c$s wz!!4oӀi%D>Z[# Pk"D, q ].DYy?V9j[GyJ[ol+ xe<y͆D3Թsm`5Te) G^Zzp 8S k%2(As=<J['> zZ$eۺ"4] sbR$֗n |HJV2䎳љPԍg!\8|Oe'1AyxtHoNBY;=O~8 R=$l]lG2 0PkU%f1L.YR#1 Jg\2)KA&c_%;R͐)͊ЫyfQqz8RP\4ZBoúTʼ y_9R7®3KU]/"I x֟7<= %(%=駷<̾Q]%WwGԓ5dN4$<*+@EtG߃͊O%9Y!=]N}#4{X QUuR8X k8͵DaFk)澋~"ۄv+^ k_23xyvA7n(;=kLմȟK YivMI}5;axCX;h/1hf1Nx7@h@~\vؐ=/j9,\"ͻi$ e㳲[+X8|0"={C{}=;QG[>}NA죽ȧ0J2lQDz0hڏK&&PeByNoO}ZiӮ&].@zTqk{#xF0B3O h.ԣ~|Z'I Oe061^@G$:̈f&&8NEaزs(eܨ#g=Hl\h,x_jJ4#E |'Fב?&h4 eeDL>oPp 86iɻ@F%akhJg[4ypOkZQ4^]3: $b('> AxR:\C B̗">jtwP}/\jWfq>'1jїw\ w!6'\#;4^i05(JV'@1h\ۚǨ '>|\*+m;>2NQ>R3Nᜓ#ʹP M+J0ڴ@:rH,3GŮo tƆײeLXz>ul"p$Jgt^ؖĺڒ}&d{fCqrM=`@fLwz8{t}q0cy.ӚqFV>R>Qeȣ[ N/f#HP)̻d]-3$HE4jŹ,YAO' (*}mDV<' $R6ʒe6Z bO.z _K@[2JjrڮH]C .=)^b#2Fg1L'G#eV$<3U}ʢ:\24kٚ R|`6b(ϷGex%ZخhM Ve ! 3u˴z{}>3)Yi kIc- 9̽(ayql gHSeQ<]YzN[DzxJU&?C|}Tz- C*}FTG3VuiktZbzJJgR^^-F묍#A%jd}?'-Ce'Y1:cJ[JO~4=UvQEE:/o_ XJ:n}dTC'[*z"|Hj4P8ϥUԟ :-95q< -Oܹ1fYDV&K#kT_~6ҙ~Q,Ev(XH#KCQ#]էC3unr>@ͩN3>YU;|>::稱7Xg;o&ߍ'ġ)Zrz%|z vռ6e ='47B+ߢ5]FEi$ۓ7]71 Utvjoot mUx`z6 4K0}Eto, +%MJrSf.2<^LwӰy3rteߦ$vCt(.:(RՎ%k~HDK OR(%yP6O{C.+bPMo(R0;E]7ʘ&-H>aj$t o$ {D_𮬕' u=[c[;J厦!0vrOgJ}Q4A=Dq7pv6mxl1`i%FٿF%):=O4:eEK]ޱ_1va:I*љe@V F+e<nXY/!N#NT./6\M4dRv!E`Qo.CyIiC!~VxMSYfTzH82nGwC}iFzV.?|-Y;(?Oh'M:9OG:jwu';q-믍q="vȚ)U7ӞW=iN{NI4wvM(<aV {S>Don?޸>w!ߌ $~BvԚ;/i鴪ԧ'3TsRߦ/ /؜&@l[.Z&sDMYi9K$Nәɕ]-H5w!)>c^q7~h!/$aɟ!NQ3 iF#`=3AFEC a|` pBmX)}ڒ e`ݽX1řH_^QM"Ӣm9[XlY:şŵV.h#ZtE<{ yvC::_bnKh5HJ_3I;h5](+Ud=QwWJES~ z3r@ e.D]*%տ+y'T_j]4-I-"|),㷃FiZhVBU &/cRz(!:ǯ1o蕲WǷɣٶ\f5ލ|ۛCZ^.ټ/Jpß{w淎\%[ބVMWo[ӗl,0&i>s~T3![hΪn[aƭ-ކgR 7lƺgMo-> 8c O!}/a6ze-[[r6Ʒ;WZ;-6=D*fš7wOKVu[g>oy݃q5^Ǐ^h^Uлz?u݇ b@+mںi+i˿mn3ZV-~Km.]6ԅn?R)|^Z~H>%(_Y}3 endstream endobj 3 0 obj 7214 endobj 4 0 obj [/ICCBased 2 0 R] endobj 5 0 obj << /Type /Metadata /Subtype /XML /Length 6 0 R >> stream SystemTap application/pdf SystemTap Tapset Reference Manual en 2021-11-08T13:52:25-05:00 Apache FOP Version 2.5 1.4 DocBook XSL Stylesheets with Apache FOP 2021-11-08T13:52:25-05:00 2021-11-08T13:52:25-05:00 endstream endobj 6 0 obj 1141 endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode >> stream x}0 E|GC!bV' 2 Jtr}2k6\5k dz@yIdR³*Zr΁>Q(9J%9YZa?ݺ>Ծ8C. U )kq;Ȗr碕R?٥oқC& endstream endobj 8 0 obj 177 endobj 9 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 7 0 R >> endobj 12 0 obj << /Length 13 0 R /Filter /FlateDecode >> stream xVs:~8e0'۩wZ Ύw@\'Bwﭨ8r~~ (Fz6&D tl jiGDk$'4cfl@~' ]|B>m]j:}-OY3S@`uhR)!;)iW1yfe| Hǀ,"qiEr3_x=[y8u;v,"uUڌ\6τ]MddеB5E "juq1k:wE_`4`"+SP pW%9oB=u e CH*/Pх2oTF">~[f諸ifrx0iU]+?ϊ7(JqQ0.ba{"6l1DO.&E5Gf"tbؑW\aj`=6bSI`"I \_<.R&0rk2^vW{co>^X0)y"7St9N5Y<.-`af`qyaY; |m.Ѧ2l0FTbD\").Rb9y-۪;ubP9qƛ;a=pU;Ak"ĉ^Nљ*ҶkQ4fR P f 箪{gN{'&ئaW]+'RCҴO3 6f`DBa>L罜BQA,ϫby Y\;>09"+7 -> endobj 15 0 obj << /Length 16 0 R /Filter /FlateDecode >> stream xVKo0 W' [ CۃbˉP[J$9i$%9َk#&?S"zݙ*@C`xC(]Qn^0/Em]@pfw׵ĥ  1_/(* @/ȫ{ zgN"7 endstream endobj 16 0 obj 821 endobj 17 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 15 0 R >> endobj 18 0 obj << /Length 19 0 R /Filter /FlateDecode >> stream xU;O0+n6HlH 8.hpN)P}# <+$'o ᰎb`#VjPF:{Rkhѝ3#GD_q ٭w,ȡܼ  ~,y2<'gWk<2ȷapFy bCRvJpԝયeW5u{qÅMj^Q^*849yr8#9TEQY 6z/,՞޻}/\x5uPWkVõU?c#(b*hzx^~'@ⓐ/2p5^vOeqN[lpL]|c:hZ=W9]&ILmSLvjF2_vsy=vNt+yο fQa30/*wS|'} endstream endobj 19 0 obj 448 endobj 20 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 18 0 R >> endobj 21 0 obj << /Length 22 0 R /Filter /FlateDecode >> stream xUn0+hXnZ[@!AiK-:$4-/d,CS@0O F ]h~ؿq;n'EkpЅCxjs-&TlVY2aDD Ĩ>_.bnsU̾_f;2BXU|˪vŨ*+S(vu5TȽ;P`Y#̲d:M ]rH8E0jn 8F$h{Oi<&Sp>1`3 RkYXj(a¢6zӤ3EFEQ#޼jkrRŁ ]eE4iqyV~wτc qWe`NiNB hW-Ia 54so~rH EVҖ00sμ"/eU=X=js@=o軁?-W1glj%WjO둱痭XҟrߏեW*6S*{$!^n[S#oUO1TWY&v@LqݓJwrsn ۓY?3AY4Rļlt#H 8`8wEL9?qGStOlol(݁14Zs5!Jv2;ڄ_YS$ endstream endobj 22 0 obj 666 endobj 23 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 21 0 R >> endobj 24 0 obj << /Length 25 0 R /Filter /FlateDecode >> stream xT[o0~WfR mI6)j=4DH1Q?0Ie{Z <nA;dCPAXhᖅ~ݎٽ?G?~E%xx!9Oƃ@Mņ>Nw!P|'J8ΔLpu[UݶH,&_ϓl9eo,q_㲩fIl^ u*-w;Annγb,t)c0h-<QzeB[2&qߒj1$f:͓J8 rfEZH$Q9-dkwQnLfİk> |!q8_YSwsp endstream endobj 25 0 obj 546 endobj 26 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 24 0 R >> endobj 27 0 obj << /Length 28 0 R /Filter /FlateDecode >> stream xUR0+,P-+;m3 aa1`'Hɯ(&IYL$龎\=}Oi<4NŻb !k+p?n}۟v!N;( EgoPk ~WaXEC:RD!D3H=O> # \Ԭօ@-8OwejGU~UJ;84ڕ#nu3dr 1k7 Ψl*kj@H% cb8dΌ،cw^:P| ôTJ*=hc"+&bңcDZ׎OzW5{'8F[4iұOP* ՙZ-D; 'ʤ2ZђVBQ}zVwzRBQH Q{ra`#B$AJR̛$y=g7)}ef-JIr,Z~fS'^ {aZUșeH}*/s{Y,&'?__._M[K?bgUk=h//RMzZm@;-kQߢu{ps~yd_ endstream endobj 28 0 obj 651 endobj 29 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 27 0 R >> endobj 30 0 obj << /Length 31 0 R /Filter /FlateDecode >> stream xUMo@W1HvvJ=TJC*&AiYk4&̛g6t]8U1F@!4pɄ"°{bYZ1awQ!|OT M+|W!"y.zN:0}UsΪ)+,#kX)c l؉A 3C1ׄ rd/]Z #r*ƇsΔ{,i;s3)vY d$d6˒<|BJؗ,,U[TdZkO߾Mȃ렀fΐʴuREF)/ƃc$rhc[%iWi+3:M^q*/I>C\0)8 M=-rF OIja_4P;Cۇ9`lwߓ%n6@>EKR<=̐~hrBȖ9>W]Ͻ0ddm$!.!Y:\1 iћ,f$Pud"5 ΅{=JWx]]{փ?̙vxǘ=w1 sk,V endstream endobj 31 0 obj 647 endobj 32 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 30 0 R >> endobj 33 0 obj << /Length 34 0 R /Filter /FlateDecode >> stream xTn0+19}Iڤ)C7r"e[M%_Zb9SI012! E0ߒc`8=$*mC/0ؤ؏-n'_}@W2=hUo+)#0l,dY,ŋC7w~!J>g#wvK%wxx M-d8##5W &E'̲d2?l6yaZq^؂3M12!a=TE0@ y<!Vo[D쀾AM/bu0f3Yۮ|N6_fo E%.j澩OiΔJLF VYKH]*z*3D+*_C{\ϨKW\:iVg&v?l'5s4Fguoi endstream endobj 34 0 obj 481 endobj 35 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 33 0 R >> endobj 36 0 obj << /Length 37 0 R /Filter /FlateDecode >> stream xUMS0W4$F[`tϴ3qă-Ynwr*K~֮>=,C[-`{s=`.M`SjVdvcn(Y7.wդ"]q>ESh9H0‚0 φ<4?Q7G ţJ&:-d9umUk3ΪՏ@kWN+K}CJ l͒8˄j'o'ٔ2,b44}c.q̦<|ι_ ++%aR\H]B{Ƞqrwx*NDWmJVv$), Um 0q†ҍK3J)L`>Ui$ רN?7U ikk8JX(QbLHu_AzQMw^1wv'=UT6<~L*VLȕ^/ξ\oӾ]}_Ri]?gm.1 >pkjSJ endstream endobj 37 0 obj 673 endobj 38 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 36 0 R >> endobj 39 0 obj << /Length 40 0 R /Filter /FlateDecode >> stream xUMs0+-pgzKLbf-b=5%ZVp ,B$Fn,ݎ}:~l!'ɢKGCp?"7 srsBFiq[Umrc$& FjiQDP]gby 'Jc.Ytn4Z%䦖t$ "y6GYg:ߺʸVNPRq4{jۄ&X/emJWl`U@/rke{F]6h8ʆ3Μۢ?W[{ۙ1EoHJQ/ Vw0> endobj 42 0 obj << /Length 43 0 R /Filter /FlateDecode >> stream xVMs Wљq(oҏt%gzH2Uƶf rn,έ1>ˊGK){ F G # n _b3bWqZ-wѕCxtw3 7 {w\w$M$!A>M͇’C) rUxWh>ol75:d;TbT'q 5b+L1~#̺djW3F)(ǘ蕜Γ>x<=!<L[K3tgBU% `/˜UnM&zb2'("#Nl>r_5λ& 5+,~&Rl6++xevQN&UW(J4uZ~Sï Y)-6L/%Rl{eF8buij g&x!:)zɑ ^ G?Vo9czw CLS}&3է-Ko3a8< R#rYAMav'JeRZPQ wƙs= 8r/>c(%%2i=ήƴFsJTʞtH Q*gJf+4v|r0{,[w&TI@uUTa+ZfLiڍ=u9) 4awBMȓұ> endobj 45 0 obj << /Length 46 0 R /Filter /FlateDecode >> stream xUKs0+$o}3=tƍgz3d#M+48v{ji?k_.ңG=uT {l0 COX`Z np)j۱g%4TJCH8SbLcfJDebr˯ [NvQWzGرÁ!NK"MCl>1gQ59/QD.[DH Z(蹉cr_S.{4]gXcMY&Ryn%8YM;Xhm=#kG&;I^` J,l³ 3Kvu=#{t*4PDR6O-3!Z.<9^s(#> ښ|17L`DN/t頪DTt/뀦=}&{ṟ]Oz,?S^f9jVG|Gkc4ZֿtLO}>^GmM|a[l|`. Ҷ?ppPzxeJ! endstream endobj 46 0 obj 575 endobj 47 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 45 0 R >> endobj 48 0 obj << /Length 49 0 R /Filter /FlateDecode >> stream xTn0+ %.uK CKU6SZNԞH(뛀x ?EHˣDU冰22BnMHuYJ.^ ޗ)~5pٖ>MUįe_@˩LQ(McT@jvdm/SZHX2)D 2J0ɪSh_| ͦ7vƼUm\nRk6W}HuOL3RGB]׫Je8,Z~='6Nj8g:ڗZI*I\PyǍ 2aBLGɳͶq_N41CV;KS΄Gi' K?O endstream endobj 49 0 obj 464 endobj 50 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 48 0 R >> endobj 51 0 obj << /Length 52 0 R /Filter /FlateDecode >> stream xTKs0+J !ڦLqLq.Vlf8c;2w{gэz⵷*6)>\@(OBu(Lp.Q 2*JAe+lM|˦w)4TȔCQeAduie9%n>g"Nq%"b/\M ~.. U`CV?MG.\zѣ]R Bڦ >"EWp6}Fkشuc#piוٌXrL#D7lsYzҤܟh@,`Gb|>&b 0K 1lc# 7KZd. endstream endobj 52 0 obj 538 endobj 53 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 51 0 R >> endobj 54 0 obj << /Length 55 0 R /Filter /FlateDecode >> stream xUKO0W 8GbJ{@ !m#Ҹ$.׎ PTug>y "b`snXs(U$ǡ”Uv1"}˛.v6͇.!Gɦh$`s֕ȦS i4!ឆ_6 cx%2yTOU%3rb$49h#DzjElg+-[ZyRI*t[ڥM3qTC ,w:)_2Z-ÚU&aQߣ6p?Kx6ϙק0-x2Ix~gJ!g:A endstream endobj 55 0 obj 662 endobj 56 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 54 0 R >> endobj 57 0 obj << /Length 58 0 R /Filter /FlateDecode >> stream xTn0+5iSn8l IÉm/M$AF> +0`V6(*eg80>8㾛DZpX7Q O;S!F╘%o*7Bge &$yV>^ \\Te~p)*>Nvׅ켣3tBhP(-B<2Q I(w*u(H#Wp =w 4GBCϹ3>kh7u@> endobj 60 0 obj << /Length 61 0 R /Filter /FlateDecode >> stream xUM0+=TJ7vWUJLLH󕄐mO݅(g1-ΪjU~U;T[HV`ND_*S%R*aFÏ2W gRE w$ >(_^9}`$h.̔0Vg65,n yBs,2E"\\᪬$ ]> endobj 63 0 obj << /Length 64 0 R /Filter /FlateDecode >> stream xTMS0W N{Lg8LPBfl+lBSXg='= $+cX !J P"Up~` }qC37c aqW" wSK1%*78ć![ej5wVɯ xGcecBwhP(-B<2Qw,:A&]ݵA"H\*HC Δc"PoaGX-Է2԰)y U1&`/ŦZ~$obF.+b"_ΎfL: ;[cܮC^WħK-}+ќķP&6P@EJ&ۑhP;P.>.۹8M; ŸnO-4xd^?,zd_=Xx endstream endobj 64 0 obj 484 endobj 65 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 63 0 R >> endobj 66 0 obj << /Length 67 0 R /Filter /FlateDecode >> stream xTn0+iSn `b QFӿ/9@J!G`|Sb{@ j Q2.w,.}1kW?w[/Їy?\}>f%4˺t lp!bRPn{ԅٰA&A*iJ^6@/hCрJ>؆׾\L^d3Orq Cdhь$Lf;gzM=P |οy'(3+18.K'EIƒ/ endstream endobj 67 0 obj 485 endobj 68 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 66 0 R >> endobj 69 0 obj << /Length 70 0 R /Filter /FlateDecode >> stream xT]o0}WtRkcѷ['MڤT%N@ـiB>>Eݗ~A:d}&(',qp08U{wal! %KtwЙx67"8$@&i9%TiAi1nt]UͶ,=LF'{ƔjM~M;$i 4޷l^|*1w\]S[gj*sL_FcD8A߳(U &)crH` ]C|KGa!03* ľZItD"*E T}vh &rqW:M/ H-#>T=:M4k-30M)Bcج7^se3ٯ7>+z0_D~02af6/= vi~ =+l[=0Si>v:_5リy>-Uf^?҄㙯_P%bصa%sKgs$jS}]F endstream endobj 70 0 obj 549 endobj 71 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 69 0 R >> endobj 72 0 obj << /Length 73 0 R /Filter /FlateDecode >> stream xTMS0W+[0Йp 8!vi+#'Xg=iv:+cA1D$X8t]`q~:ơ K@87x D@ӝ@Sņor!$Gi#dsV+R CeѤ8&/G2Vlm|햭wؿF-dZpFi*:DT0^$:QBĒI!O` uK dI:>ulv tfS54ܬBs[ei몜u=dBl}A nE-=> endobj 75 0 obj << /Length 76 0 R /Filter /FlateDecode >> stream xTMs0WfZٖŭ_Lo4!d: ȉmwhNMly֓޾]c A&xl1 @}HF1PPpn`=B?c]>nl >G- #4u`r$ߔ6U1 _E P cXA"|]e*ںyB-UXZ_e];ďuM%kpB⩚A5f2g9+V1M $AR!J4$BS"}LKnmxƺ f%.įvFDZA7+_qC՜_b,)iF>^n5f[TQr}hci`'DDFIh2ylʢS3O/U9/$B*'4rm9/KCDH1r٦kڞ$:;H)LFwYAE=ggr\ K/C;CxE1mKY3z=1盯A.ɳ]-_ծ% endstream endobj 76 0 obj 528 endobj 77 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 75 0 R >> endobj 78 0 obj << /Length 79 0 R /Filter /FlateDecode >> stream xTMo0 WPlm[; (j6WI 4rj9G#m&0`D3)Kߓ+\&wF`$( QR!3{/O0ZvO8=fO$W׌0}7:^$; a|,gB1{6%A6 rb WGjߺ_-}VP|M>[*o..d?#:oKta]=eM @l d2ê˞!BB$.c?lH1QR]5ʻ څr4η:X?e*٭k1|iBkUsHa̠ZGL׫Pm\ 4ja Q|Ț CϧG?'<\l8&ʬyja-unj"Z RKj{SʦZ (ITrϲMŢ 0׮X25R<0bj0a]1+հTP[W{W4B_ endstream endobj 79 0 obj 511 endobj 80 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 78 0 R >> endobj 81 0 obj << /Length 82 0 R /Filter /FlateDecode >> stream xT]o0}z0)+Rj2 5bn~`Ғ6c߯s}+0X`# t:(IT ýa3 +nq{\J |W׌`<;ѻ /t/|Q!,\>O=$eι,ՐI\k:yWWmm5o˺אQ vׅ촣t,!ہ;v4(u!^jt#1HdRMn)30J*҈eΌpLec3쾁>f] ۦ)6MbK & %@5cQi}_ULlY\_;"&7uNt" 5:z,k%Nqβd:uRIaƸ}M <PFb2tKWg ȫwyWBvN#=a} [|>--e6:%>x,>3 n endstream endobj 82 0 obj 493 endobj 83 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 81 0 R >> endobj 84 0 obj << /Length 85 0 R /Filter /FlateDecode >> stream xUKs0Wfzزr+CLICAg@NlӤ+M3HЮv~8 =?h#` j !b"$f w~Ƕݟc3V6 \.@$<Ǡr^"!eaUGb&܌>O\ݢHR`-2D+xcNK~ejVtXB[u$dꪯmD0Zm?ٺR显1(8a}kŅbFщBBCy~b9h:ryyvv J!)4(r}ǥy7#f4UY$}KnGer*ۇ:Q8"4,1Js'۞}tթWʾt3.?T>|%>Gpa:chA7`Tll={Kb[-sBͻi]u}bvAlfo[%=gWR^lS& !MYJҧ0RavPQC ^Z߳.zdNu4]dm#+KꟿD endstream endobj 85 0 obj 581 endobj 86 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 84 0 R >> endobj 87 0 obj << /Length 88 0 R /Filter /FlateDecode >> stream xTMo0 WQ۾:`vh"K@"u~-'qd;xGROL{q%{JC J8w^؛D#+omaߙg_m@WlG79w B>J .sj Kr"ȗp}MO-_|Ʋ-ޡ6xB7H &ծBa CD%A..d598 (B&'B@c)!~2 wP[ѬW!l^I :(9Y>s'ibk&}WuY 5w&&kWV3R E}JiC$8D9m }Sxj`B2ׅTUrHH CUn@ǺN̈Đ$|boa0/Κ#sl5J!ʒߤ endstream endobj 88 0 obj 496 endobj 89 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 87 0 R >> endobj 90 0 obj << /Length 91 0 R /Filter /FlateDecode >> stream xUKS0Wf@ö(X li}W_1gݵ>O+)`@9wL8Sc 90ĢXHxa]׸9u=ئ]C3:0/F3Gp*oMaQXiCFJD> endobj 93 0 obj << /Length 94 0 R /Filter /FlateDecode >> stream xTK0WqQ;v8FU>v+P m=ZQ08lbkI ,K{ny~3{!,(a܇(Fq {-l Ž$Cn6[0YtiqoUg a|Nw(B:RQB)eIw1Hs|)Q d3Hi/ې7vY u-$jc'Dؾ:eȊ JD bV !Q^,[\8FCDjyx"bEĔ1q)@QAXb_Je3mK%=C yA*ZUy1vZ̒&{$?Lf:{4$Bj;1\sDu K'6K% IUyl9dQD d g"k(ٗ(}4[K2ﺃt̊q*F-zYCLkp5{wܵ5%ˢd*e9|8)G'#6E7is fͳz> endobj 96 0 obj << /Length 97 0 R /Filter /FlateDecode >> stream xTKO0WxǏvo=TiPIH4)q_8)M]N@o ga1N|zL1$2!8Z>ð۽!>V ]zGxXt7^^"rCXOp@juTJpIp}*wm9o7}e٨Z%;vׅ#1t,!Ӂ[vHtm5:DT=1d]ݵ_#9QlAK.BTa]l ri+~b&7 [AZ@Cмlb ePLai0՟RZ*m];O|Srv2; B%\ >vMEc]Kg*D h,ీRH@Ld|Ku!pCK~EzyM nh<D1̨ǰW'%s4 vt0J{$|cJ/ endstream endobj 97 0 obj 501 endobj 98 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 96 0 R >> endobj 99 0 obj << /Length 100 0 R /Filter /FlateDecode >> stream xUo ~_qlc_I]-&+~ivw|kdF=FA01DhLXb Cc׸Kt#CCA |t9 Mt=I_Un}J"HmL ͤY!#I0ȷp{֭^/۪fvS~ZN+[χa'v80$!;TXP""){Bsm~u9Eo1#rDjq:2'~ t$?9vhF*Ke=*p hfZ5RJo{V]Taaܑ2#i]ߺޙWy).eY}z:^/.*l湀23 hJ8 /_2{,g@zۖ7ޕ;tCهe:>d6t3NR}Vjf"bG'ՍiݠӉ*shIg6z(#O1OpH=9/_.a^`ً)u#Y endstream endobj 100 0 obj 577 endobj 101 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 99 0 R >> endobj 102 0 obj << /Length 103 0 R /Filter /FlateDecode >> stream xUMo0 WFIe嶭d5CS F"'9nn"除g!AHma!@C" ^po؏-d7w]Y<_AwDM冰>(B )29$3.n/>Vke]L |N唽Λ-0|(!р :fȚ JD1yGlO/V-1M dQH!N{C(s'{`L-IK} *ϕQި ^BCuVU \*c 3`Ph1V]T#%:"H $rg ӻPV{1KQ2/zq{s#"|ҵ9WI' q^& = ew̲*v6dQĨR) L`*(T]=z)_B( y#* c:db.cRwPVM~}X2hR D!~@/>ưki=ia$ٯ+Sdk endstream endobj 103 0 obj 581 endobj 104 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 102 0 R >> endobj 105 0 obj << /Length 106 0 R /Filter /FlateDecode >> stream xU]o } ۶0)>4d%ı`8M={'wn 3Xァ p ea_c{XǾl!+;ɻ0z⭷*6{xoo(O 8B,dW U_5Ժ g|>&r^jM|͔w h9h@D_ 2]cD0NBYiu9n>#rDjp -q( & ,{Ř%|RꝄ*%|b )iʪXK!ՠT+e*K]k/[-Xd0 F*JІbHba<,BesSm7ʻ*;쥪 &a䷲5("/~^WyiziBFE $\ q8cKl]MkIzp3;7^p\b:fcr#͛Z̟UTuγn|2:|;=$׳39g9Dӳ Kj?E_ endstream endobj 106 0 obj 580 endobj 107 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 105 0 R >> endobj 108 0 obj << /Length 109 0 R /Filter /FlateDecode >> stream xU]o0}WFZk0۶0+RjB!HCf{Z Q|}ǀ{!cB4EY84p{{iCC8 t) Mp=I_UnE> ^E@^ڐH)CB8bnC[۲fvczZN+[u_7eft>Q z}UXP""¬ 6뢩{aNɛ@EfCOIQS;dLL vhFAT2u绦QgRJ  tUr5;]Xb'8^淮jS*OD1&RX+,y+xtX>9 Za5nkfFI(>h_+KIB(wOB.ɛv>7!,ʔnJ3GF Ww]|8wlCOQ@mj?5GόĹN N(Wj3izt8(98xf{|;Cx|dL$Ξi֛ endstream endobj 109 0 obj 584 endobj 110 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 108 0 R >> endobj 111 0 obj << /Length 112 0 R /Filter /FlateDecode >> stream xTn0+)6M CBbJez8 %Đ#.B4b=  DŌ'Y8v]^`Xq߭5|l1 |U!wY*BȖ(ZR@סq6psmYYw~ C6Veλ-;p*h>:82}_<Q ,Af3]1uS9$p ={! _Sz^p vXKC7+BTqr s!$oŒ Ot B& ~_]F>" dZyIa1jq8$#yy۬c[w"h&Ӹ׫}_dJiHXK㊦C5Omȉb2%[F#@O Rܹ?pp!YG-r<k*d% oj[x endstream endobj 112 0 obj 499 endobj 113 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 111 0 R >> endobj 114 0 obj << /Length 115 0 R /Filter /FlateDecode >> stream xUˎ0wDj\8өEt*8 0@ڀ !vbS@wf!)SXt 0 Za6f]Buv-Agкswb~QamCXJG bĨdկnzUg|>$Ge.v hq,!р#at5dLcu(uK9zcQ0&fa \&oLL6aLALqN,)cvC+?w2_w尿mZnU=6;(R [) g ^UER{fDcS&2("[?2q[EUT)l*6v9YNqL̦ܼ-&J\Jatݘ}?,1"~ᲵQժ +k)Sq2[3T6:ܨ/C1A#^TCW^Wtʺ0:}av9nQF2I6`5%XUrSѡ+V(-c;É{r?_2/;a6F%[)LH endstream endobj 115 0 obj 605 endobj 116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 114 0 R >> endobj 117 0 obj << /Length 118 0 R /Filter /FlateDecode >> stream xUMo0 WF߽m:lt C[ٕu,ˎ4iD3)4p@gvIs&x10BԪZتjeNoa%8drʲ\v#藲.-vNYJ},{BΔ3r "9p`É<*$yFt@3je`1>CrT-4.%JA E4MQJdhxJ%IbyJߪnLei~ SjDd}t9jֵZݜܜ7c!wyW ef9K2.̾2YxhD;Uc {̡E#ƾ>s*)b8/{9焢_}Sv~yvj~-޳tWԸ^Sٷ^ (F9@ǀTQQ?\Zb}'hv<Sl|gǍsovvCaJ;m`#L0tJKFZᑙ#v?'GQ,a” endstream endobj 118 0 obj 657 endobj 119 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 117 0 R >> endobj 120 0 obj << /Length 121 0 R /Filter /FlateDecode >> stream xUMs W1iMiILGcc[31R܏_dxyy (}/]#$.x0 b!a[+ ^[جo[ | ,x?v6*6M> ^G@ڐH)CB8aCk^y/ttZN+;M_A݌%$гÁ!VWCRaA#f2kW-/M dQHCkm($6 1[/Svz_iVo|b YQ5UT@f(!vlL-U@`N8H8vo]&7< ŘHa>--Bo}Sm˻j)]s$qJ)t$!PvW,tI=QFBF>76706iq@.up9 dͪ~60i}kF ~SaL1y 6ZWjfy5c\J]/Qg@PtO1J`ϊs_$]<>yK0}b endstream endobj 121 0 obj 582 endobj 122 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 120 0 R >> endobj 123 0 obj << /Length 124 0 R /Filter /FlateDecode >> stream xU]o } [0)=4d%$`8lM>{wj 2X x(ea_ǽ}\Ǿl!+[sp{gЕ#ě`> TlC"d냴!%4I49$> ^|,U#4pW˦(A5 V){cܔ;q-$cLWay'̺d6SXR7F9"5k8I9#a`L f_+ V^\A\J!נTP(uTN*_~}JI$ql%7UYB4c 㾘%]iUݗjXL?7 v\֛NF R'a}+3VJPni˻zY e$d1Sm F1y7\|$MvOSvzGug*3-t4zb%WFrp$WY;&idp6xfwE{l1Iף3yfw IwO^,}'ԥ endstream endobj 124 0 obj 573 endobj 125 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 123 0 R >> endobj 126 0 obj << /Length 127 0 R /Filter /FlateDecode >> stream xTn0+voRn`-QFӿ/-EM$A83oyG`/Ҡ-ՎA)2LREc0D }iƏvoc 6#O-7 |U!l̀!i%Xk`6]ܜ}(}US>B|' _Y66dM[ͧ-8##WSu-"^u/lV{˝yN`S"eCHcBRb/(C@u0,װfYo\U]\oT In @T)]_B1R30T*uT@8!fCWm`0Ԣɾ}I> endobj 129 0 obj << /Length 130 0 R /Filter /FlateDecode >> stream xTMs0W=Tl}2p`&3d] iBk{,ϳv" 1;q?bA9D$X8 Cx_`q~8@8}l(Gqsbyr.ob d mDsjV*vbHvps,g W]۲ho!,>$j+vׇ17rn!Ӄ{u0J}X!?x!Y,U^W*ǴdR+8BgPa>?官!Nkvu@ɠ4k벫%OΊv?UBlrZ \*ʪZ:㝦َ+h+|u:sdRA5y7z@F,f$Dn]fMZoпSXFLԈdm`j=9z{k?v:pܨa_>9"^.D-ΎB=^Xp`1 endstream endobj 130 0 obj 477 endobj 131 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 129 0 R >> endobj 132 0 obj << /Length 133 0 R /Filter /FlateDecode >> stream xTMS0WR:3)@80I> endobj 135 0 obj << /Length 136 0 R /Filter /FlateDecode >> stream xTMo0 WlYm:`vh{%5ةlݿ4NaD3IzEXSSX:C@F pj5wVͯ=Վ⟕c ܱA}2Q,{BfMPgŏ9qFIEy wD!ф=S%4_?}|]CE/s_ PJp:`Ģ80b7rSp@KgYlJ/V7U^=;{.#iX}ԏjZvp*GʲrZ?>d Q`D_\:MÔ)i!FC?f[m'*GSX a!~u]2oSˍGnQC'74'5 endstream endobj 136 0 obj 495 endobj 137 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 135 0 R >> endobj 138 0 obj << /Length 139 0 R /Filter /FlateDecode >> stream xTn0+.%͍(lK$]D=4 sY>(" 3,6,I P9c0}a}pgU(VХ1PvJZIի!]=J&w 0>{[M]ho!ާl vzcukB`V|T!YjhzaV 6_r)35A$:El4P;as]/uS +hZ߳UeV4*Ϫ!Rg'Ӂ$u$Aq(u^T?!a%4ݗL~vGA&um$}D׉b'$f&|˻^T6xᔁXGLPOY}NUvq'Q -m1?4s>RntF||fI> endstream endobj 139 0 obj 495 endobj 140 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 138 0 R >> endobj 141 0 obj << /Length 142 0 R /Filter /FlateDecode >> stream xUKs0+J|+3n!΁l3' 0H~Z hd p%3p`;DJ8d v;wM o|W!lϡԺ@J™pwW_r]i=?oIw53 m-OKH 0u5fȈ JD=1랐Ţ'/1䳠w\^Tuj5e="5U4;ԓ\))Vg!NrŕWUeZ4]2(#.@yM+ςAe#bs\uzT6Z穮G먪8j}Zo2yܔ3{hmRt6I2T0wBEI~4KqT&HW^ f6Frps‰#)}{139#H_oL͵ endstream endobj 142 0 obj 586 endobj 143 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 141 0 R >> endobj 144 0 obj << /Length 145 0 R /Filter /FlateDecode >> stream xUKs0W-p@]IJgz gr9ੑmW >yW߷^=x;p`gG #ak+lOо؎5n=!| 2x^5f@]ņ>އ(B>RPBRD>3i/Fs]?\Js]!}O){g\|nKW;8q4;-!nϐyP"nN:K*9GF}Dj8o ygD X s9c|h.OU ]BUPo}Rj"߹}/[jmLXJ8(,%I2-[Sy T[DeUz3ǯoOHM6>N骼 %D %7~Bە@v_T,ҽU҆20Z۴1L" ݤv4fIϪ;EÞdwuq"im49u[ˋ_YT%I|ViqU"_=Ac)Z1G)QtI&*c,dD[A߻,焆|d2hU<)~Pgv=) BSj#C v|q#2qrSjW endstream endobj 145 0 obj 635 endobj 146 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 144 0 R >> endobj 147 0 obj << /Length 148 0 R /Filter /FlateDecode >> stream xTMo0 WFIeuݲ-/qcm(YN4vZk,RH5J 'qPdDNڐ3hXB¤4MMk&MQte;vܖw=[H9pLQ_+DKfeAU?jމsLB9[G.#}P :t9i+@[4il}*Ҧ. $Q8.Ɣ뺨{W}D1ӊ-DמeiBN~)my#D"$ZQ8?szѱ兙/Pv6%TN $K}IUmQuSy6ZSsO PgܖZ\g~_M>El٬/ 퉊B> endobj 150 0 obj << /Length 151 0 R /Filter /FlateDecode >> stream xTKo0 WFI~):`Y 9Jb]n?ɯ$N6,)#)>9мS;Au:B|.a[-h%FxBO6p(hХ=9q3979r>z@!.%4B>p& ͗\UZ%U+=y-:a){glɦvÁ! L]GȈȻfERdCpa#R"L.#yRi6bcYBQ?OU{-9ntD:@%'U^Ta>qgayb2Ubw˔{Ejʰ;SRUZ'B`- vW2-ldQDyI5L`0d_]: ei)u=e6e":OҸ:j3.Kl?xP+erp&VLF%fY2w2UIV/Iq*l9Mr 򥈕j%J "CsI[{mc &zY{;g^oH“67}M~ endstream endobj 151 0 obj 588 endobj 152 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 150 0 R >> endobj 153 0 obj << /Length 154 0 R /Filter /FlateDecode >> stream xUKo0 W=%QlY;j` qκQ~&ceX'}" ̷SI Iy W,l`#+6wl e ?A<<2`܃gڮ!;#|CX9C!\v*)d` |ᒱA]RD '"%oΗ(ZWvRW,kEY@%ت\W R͠ADfY 2}t9nIQr gP[dsҷ|=%}]#gI:6$m,ˣ,L? I.t4mvC(|OW.MM/)RlY֥ @χlFI_˚e*iw$z5VKvF9YZկ$IBDiuFD\惬b tڼHnLY|eF\ξSR896^ϙǤOEpt<*}<|eI  endstream endobj 154 0 obj 606 endobj 155 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 153 0 R >> endobj 156 0 obj << /Length 157 0 R /Filter /FlateDecode >> stream xTn0+vm=p# 8Ñm1H2}Ib9SQG;;##@?.¤Վ=v XE\nYOSx^`XЬ>|~n!_pCn> endobj 159 0 obj << /Length 160 0 R /Filter /FlateDecode >> stream xUn0+h5;\DuKCMBlJ&_Rmvzj"&ތ;w@1o]Qpy Q_n,?AwbS>c76v5ջ>u78o71_@ZA RΔ{D[}JMK̼LRS }唽hɺv.q 5سÁ! l]2dT[b-!WWY}<(xN`QHm0@>%K⹚cP@^< 5 6],Q)#h<4+U'( O>/ۧ'-VӇ|Um)KS_ [)C4 nGF.y]2(#QD#>Z'a$>=pwU;ؐzLiCZ,猅Qr//, %񻽿s֙eSnL̪_o~~U8ebFQeYzAF붠Ls O- vIX `49x}G^h)-G5C>İ>̯( ʔ/ endstream endobj 160 0 obj 607 endobj 161 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 159 0 R >> endobj 162 0 obj << /Length 163 0 R /Filter /FlateDecode >> stream xUn0+5;uKCLBd6_R%+S0'͛pP@sO%x[ga+OѮH9vca7OG;_{. oq:|SyEW%TH)E .bnSKJebr7KxKvV󫷬k'u͎KAnjY (mY\_D(~,(V$UiU)x0"R A HjFss@^2v_xTV), YtV&t$G7ot+3'dML4uN|o"&|]m.K $䦈j~ATB]ƓgUyɼ!x"]MRL[_Qj2gE4gfۀ0l̿]dQ (fU>|Soiѧ^eZ&z=ljfTVt捘h oLWۅ F!̬Y *\CFJ^x5M(61l;hz9Fq "GggWh; endstream endobj 163 0 obj 609 endobj 164 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 162 0 R >> endobj 165 0 obj << /Length 166 0 R /Filter /FlateDecode >> stream xTn0+19}\$MSFжr$Q#%vsJ" "1[f4tX {h1Fbˈ& 0z9vca7Y5 +%~&]x&F]dR2.jEbMb W҆KBϹܟ .w~^e/Oo!ƾJwvRW#16dh!S: $rCz-5ZDT0Vmgᖭ6)\ (dㄴj*~a*c#TP\ͶZ2`1"oqț&_oˬ'l!,0֐bsLO_Zk6b8_[Dlj֐%w/$\E&•"ۆuk)Ntv9VEJyMp05ֳE^@r*wN `3f4q{Q T1l+'5s4p% ?Y endstream endobj 166 0 obj 502 endobj 167 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 165 0 R >> endobj 168 0 obj << /Type /Action /S /GoTo /D [17 0 R /XYZ 72.0 720.0 null] >> endobj 169 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 680.124 180.554 689.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 168 0 R /H /I >> endobj 170 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.998 680.124 539.998 689.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 168 0 R /H /I >> endobj 171 0 obj << /Type /Action /S /GoTo /D [20 0 R /XYZ 72.0 720.0 null] >> endobj 172 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 668.124 205.685 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 171 0 R /H /I >> endobj 173 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.998 668.124 539.998 677.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 171 0 R /H /I >> endobj 174 0 obj << /Type /Action /S /GoTo /D [23 0 R /XYZ 72.0 720.0 null] >> endobj 175 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 656.124 200.66 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 656.124 540.0 665.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 174 0 R /H /I >> endobj 177 0 obj << /Type /Action /S /GoTo /D [26 0 R /XYZ 72.0 720.0 null] >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 644.124 228.44 653.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 179 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 644.124 539.999 653.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 177 0 R /H /I >> endobj 180 0 obj << /Type /Action /S /GoTo /D [29 0 R /XYZ 72.0 720.0 null] >> endobj 181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 632.124 221.2 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 182 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 632.124 539.999 641.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 180 0 R /H /I >> endobj 183 0 obj << /Type /Action /S /GoTo /D [32 0 R /XYZ 72.0 720.0 null] >> endobj 184 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 620.124 205.1 629.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 185 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 620.124 540.0 629.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 183 0 R /H /I >> endobj 186 0 obj << /Type /Action /S /GoTo /D [35 0 R /XYZ 72.0 720.0 null] >> endobj 187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 608.124 227.87 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 188 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 608.124 540.0 617.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 186 0 R /H /I >> endobj 189 0 obj << /Type /Action /S /GoTo /D [38 0 R /XYZ 72.0 720.0 null] >> endobj 190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 596.124 208.99 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 191 0 obj << /Type /Annot /Subtype /Link /Rect [ 534.999 596.124 539.999 605.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 189 0 R /H /I >> endobj 192 0 obj << /Type /Action /S /GoTo /D [41 0 R /XYZ 72.0 720.0 null] >> endobj 193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 584.124 232.88 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 194 0 obj << /Type /Annot /Subtype /Link /Rect [ 535.0 584.124 540.0 593.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 192 0 R /H /I >> endobj 195 0 obj << /Type /Action /S /GoTo /D [44 0 R /XYZ 72.0 720.0 null] >> endobj 196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 572.124 236.77 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 197 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 572.124 540.0 581.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 195 0 R /H /I >> endobj 198 0 obj << /Type /Action /S /GoTo /D [47 0 R /XYZ 72.0 720.0 null] >> endobj 199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 560.124 230.11 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 200 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 560.124 539.999 569.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 198 0 R /H /I >> endobj 201 0 obj << /Type /Action /S /GoTo /D [50 0 R /XYZ 72.0 720.0 null] >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 548.124 197.33 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 548.124 540.0 557.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 201 0 R /H /I >> endobj 204 0 obj << /Type /Action /S /GoTo /D [53 0 R /XYZ 72.0 720.0 null] >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 536.124 205.11 545.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 206 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 536.124 539.999 545.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 204 0 R /H /I >> endobj 207 0 obj << /Type /Action /S /GoTo /D [56 0 R /XYZ 72.0 720.0 null] >> endobj 208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 524.124 248.42 533.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 207 0 R /H /I >> endobj 209 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 524.124 539.999 533.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 207 0 R /H /I >> endobj 210 0 obj << /Type /Action /S /GoTo /D [59 0 R /XYZ 72.0 720.0 null] >> endobj 211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 512.124 200.11 521.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 210 0 R /H /I >> endobj 212 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 512.124 539.999 521.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 210 0 R /H /I >> endobj 213 0 obj << /Type /Action /S /GoTo /D [62 0 R /XYZ 72.0 720.0 null] >> endobj 214 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 500.124 215.1 509.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 215 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 500.124 539.999 509.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 213 0 R /H /I >> endobj 216 0 obj << /Type /Action /S /GoTo /D [65 0 R /XYZ 72.0 720.0 null] >> endobj 217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 488.124 200.11 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 216 0 R /H /I >> endobj 218 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 488.124 539.999 497.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 216 0 R /H /I >> endobj 219 0 obj << /Type /Action /S /GoTo /D [68 0 R /XYZ 72.0 720.0 null] >> endobj 220 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 476.124 222.87 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 221 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 476.124 540.0 485.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 219 0 R /H /I >> endobj 222 0 obj << /Type /Action /S /GoTo /D [71 0 R /XYZ 72.0 720.0 null] >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 464.124 211.77 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 224 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 464.124 539.999 473.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 222 0 R /H /I >> endobj 225 0 obj << /Type /Action /S /GoTo /D [74 0 R /XYZ 72.0 720.0 null] >> endobj 226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 452.124 195.67 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 452.124 540.0 461.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 225 0 R /H /I >> endobj 228 0 obj << /Type /Action /S /GoTo /D [77 0 R /XYZ 72.0 720.0 null] >> endobj 229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 440.124 211.22 449.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 440.124 539.999 449.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 228 0 R /H /I >> endobj 231 0 obj << /Type /Action /S /GoTo /D [80 0 R /XYZ 72.0 720.0 null] >> endobj 232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 428.124 225.11 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 231 0 R /H /I >> endobj 233 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 428.124 539.999 437.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 231 0 R /H /I >> endobj 234 0 obj << /Type /Action /S /GoTo /D [83 0 R /XYZ 72.0 720.0 null] >> endobj 235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 416.124 218.44 425.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 236 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 416.124 540.0 425.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 234 0 R /H /I >> endobj 237 0 obj << /Type /Action /S /GoTo /D [86 0 R /XYZ 72.0 720.0 null] >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 404.124 218.44 413.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 237 0 R /H /I >> endobj 239 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 404.124 540.0 413.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 237 0 R /H /I >> endobj 240 0 obj << /Type /Action /S /GoTo /D [89 0 R /XYZ 72.0 720.0 null] >> endobj 241 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 392.124 236.22 401.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 242 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 392.124 540.0 401.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 240 0 R /H /I >> endobj 243 0 obj << /Type /Action /S /GoTo /D [92 0 R /XYZ 72.0 720.0 null] >> endobj 244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 380.124 222.33 389.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 243 0 R /H /I >> endobj 245 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 380.124 540.0 389.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 243 0 R /H /I >> endobj 246 0 obj << /Type /Action /S /GoTo /D [95 0 R /XYZ 72.0 720.0 null] >> endobj 247 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 368.124 239.55 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 248 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 368.124 540.0 377.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 246 0 R /H /I >> endobj 249 0 obj << /Type /Action /S /GoTo /D [98 0 R /XYZ 72.0 720.0 null] >> endobj 250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 356.124 233.44 365.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 251 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 356.124 539.999 365.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 249 0 R /H /I >> endobj 252 0 obj << /Type /Action /S /GoTo /D [101 0 R /XYZ 72.0 720.0 null] >> endobj 253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 344.124 214.0 353.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 252 0 R /H /I >> endobj 254 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 344.124 539.999 353.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 252 0 R /H /I >> endobj 255 0 obj << /Type /Action /S /GoTo /D [104 0 R /XYZ 72.0 720.0 null] >> endobj 256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 332.124 214.0 341.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 255 0 R /H /I >> endobj 257 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 332.124 539.999 341.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 255 0 R /H /I >> endobj 258 0 obj << /Type /Action /S /GoTo /D [107 0 R /XYZ 72.0 720.0 null] >> endobj 259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 320.124 209.56 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 260 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 320.124 539.999 329.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 258 0 R /H /I >> endobj 261 0 obj << /Type /Action /S /GoTo /D [110 0 R /XYZ 72.0 720.0 null] >> endobj 262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 308.124 215.11 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 263 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 308.124 540.0 317.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 261 0 R /H /I >> endobj 264 0 obj << /Type /Action /S /GoTo /D [113 0 R /XYZ 72.0 720.0 null] >> endobj 265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 296.124 209.56 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 266 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 296.124 539.999 305.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 264 0 R /H /I >> endobj 267 0 obj << /Type /Action /S /GoTo /D [116 0 R /XYZ 72.0 720.0 null] >> endobj 268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 284.124 214.56 293.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 269 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 284.124 540.0 293.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 267 0 R /H /I >> endobj 270 0 obj << /Type /Action /S /GoTo /D [119 0 R /XYZ 72.0 720.0 null] >> endobj 271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 272.124 208.45 281.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 270 0 R /H /I >> endobj 272 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 272.124 540.0 281.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 270 0 R /H /I >> endobj 273 0 obj << /Type /Action /S /GoTo /D [122 0 R /XYZ 72.0 720.0 null] >> endobj 274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 260.124 207.34 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 275 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 260.124 540.0 269.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 273 0 R /H /I >> endobj 276 0 obj << /Type /Action /S /GoTo /D [125 0 R /XYZ 72.0 720.0 null] >> endobj 277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 248.124 209.56 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 278 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 248.124 539.999 257.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 276 0 R /H /I >> endobj 279 0 obj << /Type /Action /S /GoTo /D [128 0 R /XYZ 72.0 720.0 null] >> endobj 280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 236.124 227.87 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 281 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 236.124 540.0 245.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 279 0 R /H /I >> endobj 282 0 obj << /Type /Action /S /GoTo /D [131 0 R /XYZ 72.0 720.0 null] >> endobj 283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 224.124 201.22 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 284 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 224.124 539.999 233.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 282 0 R /H /I >> endobj 285 0 obj << /Type /Action /S /GoTo /D [134 0 R /XYZ 72.0 720.0 null] >> endobj 286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 212.124 195.67 221.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 287 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 212.124 540.0 221.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 285 0 R /H /I >> endobj 288 0 obj << /Type /Action /S /GoTo /D [137 0 R /XYZ 72.0 720.0 null] >> endobj 289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 200.124 240.65 209.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 290 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 200.124 540.0 209.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 288 0 R /H /I >> endobj 291 0 obj << /Type /Action /S /GoTo /D [140 0 R /XYZ 72.0 720.0 null] >> endobj 292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 188.124 216.78 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 293 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 188.124 540.0 197.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 291 0 R /H /I >> endobj 294 0 obj << /Type /Action /S /GoTo /D [143 0 R /XYZ 72.0 720.0 null] >> endobj 295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 176.124 192.89 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 296 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 176.124 539.999 185.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 294 0 R /H /I >> endobj 297 0 obj << /Type /Action /S /GoTo /D [146 0 R /XYZ 72.0 720.0 null] >> endobj 298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 164.124 212.33 173.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 299 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 164.124 540.0 173.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 297 0 R /H /I >> endobj 300 0 obj << /Type /Action /S /GoTo /D [149 0 R /XYZ 72.0 720.0 null] >> endobj 301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 152.124 228.99 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 300 0 R /H /I >> endobj 302 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 152.124 540.0 161.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 300 0 R /H /I >> endobj 303 0 obj << /Type /Action /S /GoTo /D [152 0 R /XYZ 72.0 720.0 null] >> endobj 304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 140.124 192.89 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 305 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 140.124 539.999 149.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 303 0 R /H /I >> endobj 306 0 obj << /Type /Action /S /GoTo /D [155 0 R /XYZ 72.0 720.0 null] >> endobj 307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 128.124 210.66 137.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 308 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 128.124 540.0 137.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 306 0 R /H /I >> endobj 309 0 obj << /Type /Action /S /GoTo /D [158 0 R /XYZ 72.0 720.0 null] >> endobj 310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 116.124 200.67 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 309 0 R /H /I >> endobj 311 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 116.124 540.0 125.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 309 0 R /H /I >> endobj 312 0 obj << /Type /Action /S /GoTo /D [161 0 R /XYZ 72.0 720.0 null] >> endobj 313 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 104.124 245.09 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 314 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.998 104.124 539.998 113.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 312 0 R /H /I >> endobj 315 0 obj << /Type /Action /S /GoTo /D [164 0 R /XYZ 72.0 720.0 null] >> endobj 316 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 92.124 278.42 101.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 317 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 92.124 540.0 101.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 315 0 R /H /I >> endobj 318 0 obj << /Type /Action /S /GoTo /D [167 0 R /XYZ 72.0 720.0 null] >> endobj 319 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 80.124 223.44 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 320 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 80.124 540.0 89.124 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 318 0 R /H /I >> endobj 321 0 obj << /Length 322 0 R /Filter /FlateDecode >> stream xOeEv9@x\+yh;S#,}w{[>𿿓/ow漺qO>\z훟?~?רooُv}2Ϳwe_~/OUԚ74WN:nTOP]R'Y&Y&YVdYɲe#F,;Yvd9r A,'YN,XC,!re9ŲbYX"eeeeeeee%JuY>S┸CC&x"8Ep8@0kO%1 Q@0 F*U6l"D`.]"8Ep y`  y` `"!!!)))UVl9|1o Ƚ)ǟʛy P~1 i־l#|ӹ)ZJ-uRݥ~jKTe#N,;Yd9r$IS,!re9ŲbYN,E,KRIJ LLLdYɲe%F,Yvdr A,'YNbX!qebX)qe"Q2222222ɲe%J,Y6dɲe'A,YNd92C,<2OS,,bE,ee%}>IsO'i4qս~oיܿw_/O[#Z{`.RPՍ)QuzHȲe#N,;Yvd9r$IS,!re9IJbYN,X"e)ddddddddYɲe%F,Y6dɲ A,'YNd92C,82NS,e"Q222222ɲe%J,Y6ldɲe'A,Yd9rebX!yebX)Y2Xf!K$}>IsO'i4Id(g}=>=_i4O|sBuzH}$:R_?Id9rb܄b܄zpSj LLLLdYɲe#F,;Yvdr A,'YN\qJ-ANr=)X9.b甚,,,,,,,,+YVdȲe#F,;Yvd9r$I,X='ԧX=b,,,,,,,+YVd8H6,(KM?5\~R\7Y?43v2RIuHT7ԃ,Yd9r: %XPR: %XPP\g& $$$J,+(F}dSk'#uzH}dNr$IS,Y(ruJj\guJj LLLdYɲe%F,Yvdr A,'YNbBI-,ԧXPR: uuJj LLLLdYùS]V{ꛯ#fvv>i^jڪUڧ)qڤA`.]"8Dp)-d຃l?>Ap@1 u"""""""XE`*M6"E!CN"8Ap]21+c^l?. .XCCCSSSSV"D`.]v"8Dp)bA b\A ; b  LL&e&2IɤdRf2=>}꾰GhszÖS~Ƞ<,oOʯWMu4IL夺NeQN\夺NfI^Hu͢TTTTTTTTVSLj3fTvS:Lu4iT'S[:%I夺nQNZMj5jT6SM0aTNS:Iu뢜T.OR]G('uKBxZMjU1*99_|ijQwʯayTvS:Lu0iTNR]('uKTA/IuTׁ/M5L5L5L5M5M5Mj5k[ϣV>)_g%ʯiyQ0iT'#b:&&I夺I^HuTTTTTTTTVSLj3nTvS:Lu4iT!3Iu4Ta3Iu8:tFVSᣛx1ًu1Y3Z}߿{׿|b4Ƶ1^|WS&'뜀A:' yZ)_$7iTהrR]S&OR]S&IuM('5eTTTTTTTVSZMj3fTvS:Lu0iT')夺LL2I^HuM(70004444jT6SmLj7nTS:Mu$5eTהrR]S&IuM$/Ljjjjjjjj5jS5_ Ύ]}};Y>)Oy|P~TSzʐrR]ORN)C )70000444jT?I8ΝIy/W<-7iTNR]ORN)COR]ORN)CIu=eHVSZMj3fTvS:Lu0aTNR]ORN)COR]ORN)C )70004444:^Tb6VzOuuay|R3Z>(:MuEUeuR}0PrS S S S SMSMSMSZMVM?KyX,?Oy|PxKiNS:MujAqj'F!(Tjjjjjjj5jT6SmLj7nTS:Mu$NrS:Mu$54TPTАrR]CCIu )7000444jTVSmLj7nTS:Lu4IkhH9'!夺R]CCM5L5L5L5M5M5M5Mu1{bVotx)ȫ1<-ߎqlaS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$ug夺 Tםa3LB0M5L5L5L5L5M5M5MS~Ƌ/o}՟De~ <(oLj7nTS:Lu4IvrR]ToץmToץZMץm^IץAץiNS:MuToץm'ޮKIv]NNvrS S S SMSMSMSZMj5fTvSMu0aTNSz.m''uiIvrR]R]jjjjjjjc/ƀ积߿~b_w O~9ۯJqJxNԏ#uPM,Yd9r0 j|  j|"!ddddddddYɲe%F,Y6dɲ A,'YNd9kcZ,k|?گ222222ɲe%J,Y6ldɲe'A,Yd9rI~-X)XXamE,Ok LLO>zbpU>}WWw}ٟ>_;kyX,ίmAy3fTvSMu0aTNR_I~~m#'T>R_M5L5L5L5L5M5M5Mj5kyX,ίmAF4iT'ϯmz?$T6rR_M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuFNkOR_I~~y!TTTTTTTToc/ƀ+o} _|T|R~СZ>(~Pwʯ:0aTNR-TA$rj9IZ Bjjjjjjjj5jT6SmMj7nTS:MujAqj'IQH5 F10000444jT6SmLj7nTS:Mu4IyjIyjTjRbaaaiiiTxQ~?o|ǑӘ9I9IyZ)~NR7'TvS:Lu4iT'DRN^I9DRNjjjjjjj5jRm V>)ojqX0iT'DRN^I9DJ^Hu rS S S SMSMSMSMSZMj3fTvSMu0aTNR]/T ")'HIu RBjjjjjjjj5۱/oo?xkS__ѧQTR^-_JN<,7jT6SM0aTNS:Iu죜T>OR]('uOB`ZM굩lohȯM%iyTR7'צjNS:Iu죜T>Iu죜T> }jjjjjjjj5jT6SmLj7nTS:Mu$urR]$?Iu죜T>IuTTTTTTT}OU9^ߨ߾bR{)>Iu$urR]$/QnaaaiiiiTVSmLj7nTS:Lu4I\夺QN\夺I^HuTTTTTm6[J-͖rO_yI}x[xaM[Z>(iy|:Lu4I夺΁I~:F9s`R](70004444jTw~>oiyI(WMu4IqjAqj'F!(TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5VSͤRgR?>=okyAJ/<*WS~mq(˛:Lu0iT'rRN륜z)'夺^)y!RNM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muz)'夺^)I륜z)'夺^IVSZMj3fTvS:Lu0aTNR]/夜TK9%?IurR]/唼z)'jsUŠ+ ~w/}{yϹ6j6NmεrS:Lu4iTsTsTsTsTsTTTTTTTTVSLj3fTvS:Lu4iT'\9\ORϹ6rRϹ6rRϹ6rS S S SMSMSMSZMj5fTvSMu0aTNSzsmzs}>?I>I>|^H>M5L5L5L5M5M5MfK9SUŜ|kYׇO?Wf'wj'wTA rj9HZNR-'Bj)ZMj5fT6SM0aTNS:I5RT 8I5NRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAyj'IYH5 f100044445yJ}1щOO߾Ƿo5[OSG G AS~TS:MucrR]wLI~crR]wLI^Hu1EVSZ/2h<-Y>)jNS:Iu1E9;('u夺crS S S S SMSMSMSZMj3fTvSMu0aTNSTSTScrS S S SMSMSMSVOUi/VۿW^8/(~KNyZnTNSNQNd'E:YD9Ejjjjjjj5jT6SmLj7nTS:Mu$urR]'$?Iu,T" Ejjjjjjj>>>>>־n}Zukڷo[k߷־o}Zckڏ[k?~};kDZq};kǹQv>GZZZZZZZZukڷo[k߶־o}Z}kڏ[k?~nYkU};k繳y};keg}ϭ־6S^kOܮV[Uߩv}mUszirQmZckϭ[k?w]ߨv]|ucQcQcQm}l}l}l}n}n}n}Zukڷo[k߶־o}Zckڏ[k?~nYv}YvչF竲Fuk׭o[k߶־m}Z}kڏ[k?~nZFFF竲F[־]x]ڮ9g_q|=,oOkZ>(oiyj7nTS:Mu$7@No6Tl9d?/fM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MufIq '>n6T7HNM$7000444jTVSmLj7nTS:Lu4IM$'&DrR}ly!&jjj͖fKi}<{ӗо<_$j~Xj7aTNS:Iu('5TxrR]1 ZM<5Nf˫qZ4iT'夺ccQNk)DN^-x"m'O;TvS:Lu0iT'Nz;DNNiy!ۉTTTTTTTTVSLj3fTvS:Lu4iT'Nz;z;DNNi;VSZMj3fTvS:Lu0aTNRHIv"m#?Iv"m''ۉDNnaaa6[J-͖fKiyċ[]?}ǟc~h#O;F7'FnTS:Mu4I rj9HZNR-'Bj)ZVSZMj3fTvS:Lu0aTNRT 8H5NRT$8I5 F!(ZMj5fTvSM0aTNSAyj'IyjRBYL5L5L5L5L5MfKiSbx3ۡ3by|Px;4iyvhfvSMu0aTNSZR-TI$rj)Z Bjjjjjjj5j8Rέ|R-y|P-yZ)_o<,7aTNR]:IuM$?IuM('5QnaaaiiiiTVSmLj7nTS:Lu4IkBG9 夺&tI^HuM(70000444jkBTE}1҃^LƗk3S~m(˛kKFyTvS:Lu0aTNR-TA$rj9IZ Bjjjjjjjj5jT6SmMj7nTS:MujAqj'IQH5 F10000444jT6SmLj7nTS:Mu4IyjIyjTjRbaa6[J-͖fKiDŽbB%pO~I`F^-oiyj7nTS:Mu$%p9/I~ FNK>R_jjjjjjjj5jT6SmLj7nTS:Mu$%p9/|~Tmzn#7000444jTVSmLj7nTS:Lu4IK6rR_$%p9/|^H~ Fnaaa6[J-͖fKK/fo/`?}1d 2QwayX,byTNSL2QNkD9!TאrS S S S SMSMSMSZMj3fTvSMu0aTNSL2I~2QNkD9!ZMj5jT6SM0aTNS:Iu ('5d$5dTאIBkDs]OU /?~`k'}٧AS~<,oOʛ6SmMj7aTS:MuzrR]OuJ~zrR]OuJ^Hu=IVSZMj3fTvS:Lu0iT':)'T'夺ꤜTSR]OuRnaaaaiiiTVSmLj3nTS:Lu4iTSzSTSzrR]OuRn6[J-͖fKiRl~)<ǧ__mM#_|iTpu AiyT6SmLj7nTS:Mu$5cT׌QT׌rR]3F #ZMjT[iyZ)ay|R>rS:Mu1RNkH9#夺fR]3FM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu1RNk(IkH9#夺fjjjjjjj5:^Ty-~[>Ѭ7|%^NhR AuzJf3PWԏ bקX>2Pc$_| d& $$$$J,+Y6ldȲe'N,Yd9rj|L]j|L\"y ddddddddYɲe%F,Y6dɲ A,'YNd91UZ,3Dj|S4j LLLd(OU/(!o_oѯooxS7'X^-TS:Lu4IkE9!'1夺YR],M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu͸('5墜TלrR]. YZMj5fT6SM0aTNS:IuM('5$5 T,rR]0M5L5L5L5M5MfKiXb,p3w1:{Ӏ`|*||*y|Pn><-O%7jT6SmMj7aTS:MuDRNk)IkI9AT rS S S SMSMSMSMSZMuUgǙWHw[u$˛Vɫ:Mu$5T rR]HIu "%/jjjjjjjj5jT6SmLj7nTS:Mu$5T RT rR]HIu ")7000444j^gH?x»?QnTS:Lu4I륤z))夺^JJ9J^HurS S S S SMSMSMSZMjɯay|R~m(ʯiNS:Muz))夺^J*I륤z))夺^JJVSZMj3fTvS:Lu0aTNR]/%TKI%?IurR]/%z))=U/hF~{W_ti~99_|OZ>(~ PwʯrS:Mu:E9ZjQN묖TY-M5L5L5L5M5M5M5Mj5z]G~X7'X^-7iT'Z:E9Z:%y!uVrS S S S SMSMSMSZMj3fTvSMu0aTNSjQN묖'Z:E9Zjjjjjjj55]z.?wF>4 =4OonAэ<-Mj5fTvSMu0aTNSzht#'COR?4TnZM緇F7S~{ht#˛CyTNSzht#'C9IBF7rS S S S SMSMSMSZMj3fTvSMu0aTNSzht#'COR?4эTnZMSDr~^bq߿_|Nzay|RފAy7nTS:Lu4IJNןB~R}UrS S S SMSMSMSMSZMj3fTvSMu0aTNR}UrR}UrR}!UrR}#BJnaaaaiiiTVSmLj3nTS:Lu4iTOToP$;T%'[T%'{T%7000U-͖fKi!*ȭ戟=c7g٧cy݃<,oO=ȫfTvSM0aTNSZR-TA$rj9IR-TK10000444jTv8vݓ<,oOvOj|m$OMu4iTs`NTs`rR]QnaaaiiiTVSLj3nTS:Lu4iTs`NTs`NB9M5L5L5L5M5M5M5MUӿ~ꟾo޾ٟ˼H>A<-O˻kByXNk"IkB99 夺(VSZMj3fTvS:Lu0iTNR]sIuQ$?IuQ('5GTrS S S SMSMSMSZMj5fTvSMu0aTNS(ꚣH~ꚣPNk"y!5GTTTTTTTTO09x|1P)pc}՟߿x6_~gO_զjTSwʯM5ayTTTTVSSkSMyX,_jʫkSMyZnTNS6ՔTK~TSNkSM9M5ZMj5jT6SM0aTNS:Ium)'յ$յTצZBkSM OU=^'yݯ}\> endobj 325 0 obj << /Length 326 0 R /Filter /FlateDecode >> stream xVKo8W̱Z.z1ݾvP$&"QH7ͿPo;ӽl*9 g᷀$C^zE,G(AW(6-(> Ց#&k.Fa a2Dp >x]~8x7ӵ_`!x:V0E{.r/!-)y5G&(R5ڸe])p&(ei Й$E-R ɱBxN>;SQ%t&n %q{,wVAU.hLd4y,]v>\< )Cl6J7N,I eO-YRn}{Pjpa~duEUHS„ egyw'!gFCjW[ma!1;լ릚fdc>TuQP~7v1j20D9JY4%ؿ|;9h-LcV:6Q\@%x8.\0xuMIbR' ^Ѥn^ !&¨Sy;u̼$E]Nj Z>,MX=2m™)aW&e;|zn;I鶙97L7MӘxK>TſY=;Ò%xʰۍ Ϩy[u%8 'CeO:\:gNecƏ54 "')_h#."W$=sE%!O, endstream endobj 326 0 obj 837 endobj 327 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 325 0 R >> endobj 328 0 obj << /Length 329 0 R /Filter /FlateDecode >> stream xVn0+ EknR1CL[D84ߡv˒SɰF#qyP/ 8Dx{b &AumE*_R3"Fe>km~YEuw5xjwu3J(lO õbCk3 |WOa<+YTYeyL .]z{MYV“*cHFX7˿ZF* X/!\ ԯ( qHjgr_qbsFv{+$\HG^&/)> endobj 331 0 obj << /Length 332 0 R /Filter /FlateDecode >> stream xVKo6Wb̭n P$֋Bh[,)z$ߡ(Ѳ,+{n13q^/Z|!:Z/Y9R_DڞҴ_52֗ȍ›!uc\`6#,B P6Gg|ɢ:ɳj6X7gڌd>*6Co8%>!<#SPJ]mQ&YoFuFR#4s'ٔ2k@c;gl-X{R Z./!jRM%UU(vVϤVp`#|J)[DioB;Wι8aFt~)1>GN1O/p1*["UeK4IdUj8o4=jIf5]7?Fc2[-2)Tew8*MD]1<˶KʃUBMjtt|RM危HGzOXBfelo𛡟I)eL /Y7ebYx}ez~)-&۪,L`n!vs>BvF]]~\l#06~V3g>@hM>[likA0U"U4/]Xitb@ua)n dЪ ŃIfHhB &SAoI}U ":_wq,X# aj7&F1i do zuHFG3:2< \y18c> %(:Wg Me9M endstream endobj 332 0 obj 977 endobj 333 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 331 0 R >> endobj 334 0 obj << /Length 335 0 R /Filter /FlateDecode >> stream xVn0+h5MR+s4 %:R#D5wͱc95 igH; (^3xBywZtx `>vF~.AtR5 ><8Aҹ (:bcEB(p!".ag]h[S&E=b'[wE_벭t[Ba ) 3SCYUVf%;SXݬL; g. sz1謍6XDRk("ۙ7Gc 'Dբ ,U*ݲ%&Uh邿h kj"[t[zxw91s/*)UaA@*uׇu7ʱCa8MaoB)YZkhӸ\MG}NE5? }s⽡$:`!5L{% endstream endobj 338 0 obj 949 endobj 339 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 337 0 R >> endobj 340 0 obj << /Length 341 0 R /Filter /FlateDecode >> stream xVIS0W#Uwn]3=P20c+/K}ۥ'$=X ('zhe |/b!EqE P3#gimDkl[>[׷(MP£՘˃@蛊ޝ(,W#,0lCpXfp}ȵc-\-na:[ek3Ʋ]IM} GNE( )v ̪t[\1p8̦a&3&k2; Qmp*8s pa|AQihܭF@\)E8uMlp|J<3*:pF=;mh"qsia0%er]eSF1/pGzvr!1:FxzT 6wXfQ QB)F~,GqI[ß9qƉnG Qb,6q-{AZնbR]Ӥ$20Ҭqx3EJ*&ɢoމQGN걸dhEyP9/Gi }pn֌(dx;ca3{;Rץq8C.N*w{[QvAJ {Qpe;z9Ʀu d/< ͉$*T uzi#]!/KGx$#ݩljmG#!Bѐ$Jh RRb̥1'[sFH8L̕QbpC,Ԁ%?]Μ­|RseRij3}yw{6ן2< endstream endobj 341 0 obj 843 endobj 342 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 340 0 R >> endobj 343 0 obj << /Length 344 0 R /Filter /FlateDecode >> stream xVn0+ EknR1CDD84ߡvےSɰF#qyP/ 8Dxb &AucE*_R3"Ge=-271xwus}WQXևkzfA"yVʿ%\WYTZ٣#S!PT[@vߕ~N[p 3A)B=@7d'~>v;4O JtF.E*bc u ^9wZ3Co3kT, Dcyr&L8Ħ XlTfe &2׷Cvm16eu[' OB42Ri@<0 ԯ( AQv('6g:][lK6hvXE:"d'*4I?Tr+G^jfn9ִbP> endobj 346 0 obj << /Length 347 0 R /Filter /FlateDecode >> stream xVKs0WJ73ph:(Xr-a IDth߮-?DN%/7у(] f)֋  EbcVm2\-Ec~D""St{=Ev{tySOQ mB1-ʲ,8f04m)zܣ뭘MD;ƔjoL~&96t;B!:1b0Wc`idI0K'e{iJf4&BG7@vGDM;Shh#І? 2qѺ /5mqx(+*0;S''82Nn#}U\P2XOR]-V3qBan^նԩдYecܾJ!ZQ`ju.WnuCOdQBҡ'xBhb*j-~/LNwL=p-ew$0*6ne-zt]co`,ҕ80ۮ+OHy]񖋅Ujݛk[ɜs\],^%wBXf 9=j!͖̥X/#ivbتjw1c-2ZRVу\<1 P/Mi=B;LVz/iBN,g}wKV' VZ}zeI7X6 endstream endobj 347 0 obj 843 endobj 348 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 346 0 R >> endobj 349 0 obj << /Length 350 0 R /Filter /FlateDecode >> stream xVKs8 Wx&!Rnvgz4gz{-:ĦT=_P/R|!|("]ڟ"c >f[0M̎S]٪H8/ zw|#{x J`)aE(ĜE挾J[Wi7E)͢okljMݏKH6ʁeJPFsˋlR3Ep|PcZG&LL2&| >.4 5g*Ȩ\i|S:vp 4rqP'Uhujov_oL8 =뺟N R z_ok㍣۩c#ªpPhOKY&έabX'VPqqJc7TlU4svT;,'' 8M^^j>i^dPnh^EVlVnKnb׳pxUPA %ҟ4g\B:njǫ6vӗWCTNx'&f2M!uQEAPNXBTU< -„魖ْ_H7nA93?Kh^ SjZ$b endstream endobj 350 0 obj 946 endobj 351 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 349 0 R >> endobj 352 0 obj << /Length 353 0 R /Filter /FlateDecode >> stream xTn0+h]EJ CCжr$i$%9=5 qC1Y0߰#d:(I[0XՏ؏-d?c_Go<=kl:J_UnK!g | "N1&K%d\ .O>8߹yS>+$^YӘ_ #OhB:{u$B~AD LUnʛV@ .H"ZEp|DSL=&cn]YY!a[ySí]Oa7DE淤yAnەۺ{yF”흖K?} NdijXǺ@i)tP-e'(>z^c !&}UQC|bOؔ <8du8bw|p.O1~?c؝ph/R{ dJ/4L endstream endobj 353 0 obj 512 endobj 354 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 352 0 R >> endobj 355 0 obj << /Length 356 0 R /Filter /FlateDecode >> stream xUMs0W1PW򧸵iәʄB1 woɩ fݕH p!DŽOpf wvǡݟc3V6=ryx$tC/Nu\Cw#GCsOw>pնGR(p!b#`u\Y%&˕=m5E,+M# KU,+D[C%"0ZM'i%̔x "r b %qkm"p"5LAS'֩Xmm4'09d*356lQ|$G,+GXtC*p nѧ`ACv!6]>/*ݰYW.P׭;ưÅ~\~ׅԍȢ;._j,}:[ endstream endobj 356 0 obj 626 endobj 357 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 355 0 R >> endobj 358 0 obj << /Length 359 0 R /Filter /FlateDecode >> stream xWMs6WhH ~;'7;S7g2 ɘHP_M=5<" } |V gk(e(L.M4N0l{A?~&iL5_zAϋZ=F煙9[Ka^@J{N)g` !%fk |'T˥af E 3B!+^8L)b,:0p (YۓQ̑W؟8j.`zhOgzb:!%%8IMJjynJ(PAĬnѻ}Snt4wBGjrw:"8fBsdP WyámmM=05e͌?rUJqe8bؕV ! {8jA MۢgC/g~-$%m4e,Z<_.&  6߈V-$P (oxf(HK g됮"̒x U+foΰ-FgK^6Z+<f^0u%ʢjr!-TW3C_H'ҫP8}mp/e҃mZ4 Mmz[gErc9z 6^o+Tƒ]Py}SLp ^f܏\".Źy FGhv J*TUs~*Ylʹ,up*ЌU0Uv7ؒh7J#d6,sMkFBM47O<8HB'8HB'mCfy2>M{1r/@\4uؼ꿄kYY\"lne)P5("p\{pqphO7.uě]R`m :(類Ql{Q`βsj-VJUoNw @){h`˴Li&L[#fL`v=ҟVlGuƇB}ɕy6/xͦ_:C^D;Ewc&kP v!-TnqMEoH:/Mý$W.&>ZRSR~킹~M6=6 ^\1 endstream endobj 359 0 obj 1251 endobj 360 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 358 0 R >> endobj 361 0 obj << /Length 362 0 R /Filter /FlateDecode >> stream xVKo0 WF,m]0hHS%1ةg$NOk RH~p@z`*xen+&4+-l_,Wc3V"l& $$Tś?6ym|F.3YkPBĤ0Z4)KWdZiWcE{]+]1$6L)l#A 3īeYpY~wKsJ0%"`@eU*b%̮ґUJq ^hI ^(w5.3k$]K_כΣ!'0dK Vlo,I_vy 0HSYyMus 5ij Ld|z)ԫ|8!rmY)k K;M;Elwi= .Q7)-N!4B s&Kųvz0\ ,Sw]% zHPRbFMP1 -(cL']\;䮃wKE!jVf;!Ȟܱ+.Tp/zw:GdBdP1ލ[m}f!QOK,KW0rK^gC`}GV8pN4}8ws*bhAm]ABu)?[ endstream endobj 362 0 obj 706 endobj 363 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 361 0 R >> endobj 364 0 obj << /Length 365 0 R /Filter /FlateDecode >> stream xVKo@+hWv@ڴKR!^۫b lwSjɪ9s\ouc&o<}REl(\pƉͱNWɋ0a g! N+_tgaR ޫM(REs;ئ |C AIA=p_x u&6l}i-8qkˉ`j{n -<~FJ7zΓ//,vs endstream endobj 365 0 obj 792 endobj 366 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 364 0 R >> endobj 367 0 obj << /Length 368 0 R /Filter /FlateDecode >> stream xV[o0~W7l[PZ= rYc!$^B9>~ ("pC -(R qyhDT`"3bG2Do <jQf ֩2,%$s1蟣 QnJӿN`.F06W5L4ֱ)@~I:[4ص굞%}eh[gbz,9"n2ԮNE% %pf{71pbbH' TtvCi4O"CXJDſa1۔z&`Rmfc.G.235G ĘC[ buBrB;Գ6.uSC:u>;\$C5Q|mM иT< t"΅ PǛYvI<h܎R%pN~겲R&o 'vAg|l#nK;s` 8:84IyƐ7r endstream endobj 368 0 obj 810 endobj 369 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 367 0 R >> endobj 370 0 obj << /Length 371 0 R /Filter /FlateDecode >> stream xUKs0+J=t&frH26 u!lBܞ}EzP|nP e<AD #`Ίnp Vܷe:DaW (| oC<]й /I"MFa|Hw!0 jV2$IH@LO!-ci~pޘKSB-V0v{׆l{O.[HgGDa_3K TĬzB*]Vhf$' JEyvLF\=pùcn4PnrS,5 AGl\jdؐp1e^%Q9^Tɔ:d F#(l}f4ն0Ivl}n ml},LH$Q4DŽ 7#Uu| '3Já+)`[JJۦ2: ꦬWZߍFsf͗}VyۓW}K WeleՈc QD4t 7;s;B],:>FNU8c-Dgcjⵯ֋EeSOͨfEi^-3ctoj}BqJ[;&}(^Wbp) % S`'ryv*I<ъFjG )'h2K2%=rRw)F;?\AnK_aGI|pGk)u h?# endstream endobj 371 0 obj 713 endobj 372 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 370 0 R >> endobj 373 0 obj << /Length 374 0 R /Filter /FlateDecode >> stream xTMo0 WFQ%嶯-bH'5mlݿdI:YOkm4E-l"&@ȴ H8)^# +V~0=7k/)nK1c/l6\kI%.Ɇ [٧c [7U7}c_^RvkB6CѼiItԑ@ȵ﫧 ڃef+I?e+̐$$I {Cs$8sk"} O9ntqܮsWôX|FE m%#Cd@Ĥv<$j/;Z;5p^ĺM# HÅ n9f>T @T]QcM|=Tu]:{I08aʟ8G}; 755GOW4Y endstream endobj 374 0 obj 508 endobj 375 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 373 0 R >> endobj 376 0 obj << /Length 377 0 R /Filter /FlateDecode >> stream xTMo0 WF}Kvj`I $r;['rRNZ1Q||$@`Ga& c`8݇$*v&U7v&+M:K29 o’|  ![쥕2뜳ZxqpuuX dȗ`e;i5!1iILWO KM"$" 2WZn0CZr&YHbZ㌢P=w:S=]\!0*>ۢ_61qnö@Tk6_WEչjL5m"$xUo)0Dz5m!% Pj+3_?vjhy#u F2s^6},˩SꊚjZC%XnEiowӢ$Q.1LF٩zd&R;];z æ endstream endobj 377 0 obj 508 endobj 378 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 376 0 R >> endobj 379 0 obj << /Length 380 0 R /Filter /FlateDecode >> stream xTn@+R^6[Fi!h%h'd~CnؖzHg/mLWsqdv4H 5D={[[C><¯'?{Bg'ӵdp~ɗQ60Uqc5ä0Z]k{ pӐg}t0M;JVtiV hp(!][v$dtj-"ʆyCH_0Y/jrQl@ &D4 Pr)(F Եmaz&%»P2-LLuDFeY$Ci}Tej1cV2af}e7/wn˔)&fm'ǙVR2դ*_r9+ ^L/W Ooo#82.eoiUHEc '&<:؟GLN!P> endobj 382 0 obj << /Length 383 0 R /Filter /FlateDecode >> stream xUKo0WqsWW i` w7{6Ax<>?ޑ0O cW E ~#+6권X3p· +x wM0$*7Ui|Vڐ3cHB̤00e5냛gΥ;~N\j'y~yȜ;~SH &^e ̲d̆τKBDDz:JL.ʰ(D]3unyvlkި6ۉtq鿄b>yl루! UEϖ!$ dkL)!R54Ƶ>-KsL=$찷-g/kg}{_,ii_I^[m>Qz(è%QKYmBQ7 ]FʮZId.r vuƐf endstream endobj 383 0 obj 595 endobj 384 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 382 0 R >> endobj 385 0 obj << /Length 386 0 R /Filter /FlateDecode >> stream xTr0+2)[bMgc`$π`Aӿ̮ H>}M(`qіl̀6D*Y;h,Y+3J\#{S%Ip8u OU"$W(dVPB(pf`雇ۍ,wL~&'n9eQY_ MJ%cC3Lu-"yMpXqE>N׋c<0iL켩4WƹgLwTSMv6ywa;]nҦ `&("1 <"+W{X4 Wa_r/ϗD$ipnWSHQe:s'R3S|Ϧa'6iۛ<UL> endobj 388 0 obj << /Length 389 0 R /Filter /FlateDecode >> stream xTMo@W1rkӦRoB` ^; 8&6b|36yPM3_?sVrź)K)V hؖ*;2Ez*5"ʚyM`'y9.*/S3Q spg!ǐFa= Mjl:1 `DEDx, ]ȣ6y7 C .Q]]'WffW돋2`>rn[ءL9fakH>8yjfd#6mbON]oSs7$qmq">F?N>v@ataY%x8Mnn c/'.!6{M[O6 |k[>a9لWͯH.ȢWdJNЃ endstream endobj 389 0 obj 553 endobj 390 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 388 0 R >> endobj 391 0 obj << /Length 392 0 R /Filter /FlateDecode >> stream xTn@+23vMTE" 4gF\>׈{ ((\6!Keu}-!Wd#ãGOTѨ~V$rE, JhN$p`:~g.l~IcZN'vTW,OB@T(SFD^srΞfUIN Fr9)+Be+y)c `lԅmu0!OW,~ޙzgI[($RTf/yסh'YRuWvf_P˶JЉXNg/aڅylye5nʴ-|(OH(o.㿙|M_ D˸ Gc\+(=.4x76&H+.+iç 6+b*ah^9[q啮$U鐾 endstream endobj 392 0 obj 528 endobj 393 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 391 0 R >> endobj 394 0 obj << /Length 395 0 R /Filter /FlateDecode >> stream xTn@We"靇g<운Eb 64gu30@ц|C^+ Tb&)<\Fam<L`XާX~G~G.<Rdj?Uo+r;!_#`Z(1SM8L6puܾpsr! ʟm^<f1|8Џ("V?,=q\ i:?pf3 endstream endobj 395 0 obj 530 endobj 396 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 394 0 R >> endobj 397 0 obj << /Length 398 0 R /Filter /FlateDecode >> stream xTn0+1;$%QICM;l*(7ؖD4ìOp@(-`^ .ģxDDp!XUއ~6@<<:'.ԆDk&t Wwu}ig.mq{ڙVrɦUU%+z4JHU "]2D@!f2=R> endobj 400 0 obj << /Length 401 0 R /Filter /FlateDecode >> stream xTKo@W1v]/&m*@!DXumWnMlXy8 ݽ`0]E  XWLQ = {[[Cؾ<ïG?GBg'ӵhp~(rGw*xbMIa%`O4#~FGi%lA_UҎa] ܲ#A 3}hQ6BOVO& (9@.& U aԥ@ʕLr(}.Viɲt<2/x1ȴցSWKm=AGͬ!i4}ѵ_l*3~.cp_ᶝP'Z-Ӊ֐x8S7;2 ֮(rd\,|(#ާGpd [st!\)ƸPPN+Ä|r9'/,G+6Ű_!h}\3痻!M K:Kݘ[) ?A endstream endobj 401 0 obj 532 endobj 402 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 400 0 R >> endobj 403 0 obj << /Length 404 0 R /Filter /FlateDecode >> stream xTM0WIlsV òZQ0H쒰w [w͋geH/Xnȸ (2\Ea=BbS>cV6G[pwO~U&pL:D]qCHOma>JrƵ1F4Kl wϙ+k{,{}ZJ.Y_Y􎠏b&m <#A SS" Yׂǹ-+RB:IUC$i Cy@e[hi ~C_~9::(dq{ToeOy7BcfY,fAiMKso:\F,DNv;;!6E:4Fe8w.OʾB>*YdwҼV=?mumGF'|K*dBƨ1Lh"pڶZ`>He7)F?ƒ6;cwوƉ%V8zχ5Wmbϋ[Gȑ] ){;2" ӭ9ƒ/R endstream endobj 404 0 obj 549 endobj 405 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 403 0 R >> endobj 406 0 obj << /Length 407 0 R /Filter /FlateDecode >> stream xUn0+1;uK^ zi[M%Z_ߡvyQzj"&ٞG{lcqܠq?1\Za=`?Fc_αK~:A&܇gtWΜQ"rC:·8|RqCT2W({ sl2MnVYttyZwVȯYhGOB@Ӿd6 IU!* TVl*B&Tg>6e-9Gr`JƔ{CFBylLgP`Bnhkl&u%]q"A`췉(M8LI[ *z/ίa1z=CN~jrL$+RSؙ/?=2k1!Y!?4trk{q>TiE$zp=5zxF0pt(SjDJ3oiyvQcX5v$YLyI'eW:6t›(KZ=xL Up W{8и*EѶ\ê {.;IYIuƔ/>k endstream endobj 407 0 obj 605 endobj 408 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 406 0 R >> endobj 409 0 obj << /Length 410 0 R /Filter /FlateDecode >> stream xTn0+J{m'~WG",JUehit~<i<>t/R3Xl pхh$E]?Foخ5~&@?8 p, U*wPxy6*LA]i6Mq{SVU)+0д+!Y{v80$!g*7,B&":7+<&UM90kZݩD9_3&rf6=|&5D8Y%2m|5S#&)ugx(NuwP0Uz9G$DtUsHBSQg.ct<3O6mj˭Nh/n0?&̱wFP߄mU0\C:oZyIsUttD`>%Կ9>aҞi3Rl7} {b.z鄁DuF‹3)?RI endstream endobj 410 0 obj 531 endobj 411 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 409 0 R >> endobj 412 0 obj << /Length 413 0 R /Filter /FlateDecode >> stream xUo0~篸 yu&Mʂ"HI1h3? mڧ?q@ܠb{h1J B> 7+t;vOx;Bׄk^|)އ{wGH6'i}xqJ${|MpSrcw|>%h%o,y_mA?KHQ +D[1"VM+lfu#cF &D93 HEQB1_"]VPkZ _!HZ6%<. EG2(da:Tc`# p YBnEv.' }b[w{I{,F=7֢qV]kAG $$VѧJt)8!Poyuxwwz!! e^u m)*6ۚ-*-L.ށ`!C6hQx E׽öuJ_ϙEhpdD3%u?$ endstream endobj 413 0 obj 565 endobj 414 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 412 0 R >> endobj 415 0 obj << /Length 416 0 R /Filter /FlateDecode >> stream xW[o6~lHꞷnK[4Z.Yb!T^$QiD|}7?.}qJQ^/-FPLM!F 6VkFTz+i {q[|]ox%0_^6Du1R$i&ϧP Do;˲b\\'dtH=w(Ş@)kp`G{1+!b}KLa m?6˙a G1j^pЙ0P K]ˑȄ`}_ Nf؋HwO9R 4ĦyW&rz9Cߴ]͸zAԋ Mc7;%G|&HLmyP}R`M0=h# #>T6rVmV8P9?ܵʉz`qk{WݎyɽA<ۦrD7Ğ}{p6[?~0,U jE:Ж9 Dilg2`wV7rmBP4wM2PϕњͱhhXXO`-f{L-"jx5 xm`#ԧQ:#lxixtHO'$o1-L&E ڕt0zp8COLمF}dYaeiM.y&- &y9;Nm}i,4Ϥ9Z]l:duj"v>cdˁstT t_7/Nn墫*(,=%e`J硒Ξ!>,.)I|*>E7M+fJ :3癮ms }F '/ABJu'V 洛eVdEQ)-ֳ7VLw] .LTa+Q&dLsXyp |vg^1l%%sGa$ ={A endstream endobj 416 0 obj 1001 endobj 417 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 415 0 R >> endobj 418 0 obj << /Length 419 0 R /Filter /FlateDecode >> stream xWYo8~:@%;o=Ңtꢐ%:);OA43fYPD{QPV-2"XDQF EԊRdxgQ/z 9tXs$KFjQV[O1$Cc0嫦Do:ESOhfu[_lw:>R;.H -:bGPWc`i„l{@ž-jY4{4La#aF=B( dlXMkF{ncXtS@_ۦEyt 'HpIA i=p;hJ^Ljܡ5[ҜgEh48/a?q󚋬-n  ](NXOզ)IʦyXZȊ-+*ꙵW>zgz]FvF6S! p quEz6 4柀 eùN"Luᄑ Գlӌ&<,2} SǮIDQKnYԹÖ_;1{޺L8wuVv9MQZN+nl P@! (} Nw[K:W͚ߤ3$hʯ<>Uw[=j0`Xhnw {VN10Ƕe 3\JNR/߀n{(fCQیVBvL{V_of6P\ @~*rPkrEZU7n>4۪Sm>YkQX'ۥ4Mhm#]*'m>Ѱr@y-ԅ2׋WݾR ō]YBvh RaJ0޾_ݜ˝;~ g fNuGp|;'fdH; endstream endobj 419 0 obj 1109 endobj 420 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 418 0 R >> endobj 421 0 obj << /Length 422 0 R /Filter /FlateDecode >> stream xWo6_9Ñw޺-:l؀dw")v$7Ok ;wyAu% eⳑQ1䅧" VdA&F] ZDb^ .>~i`x;KPeM(AO1$CcIah]_ZLM->j=~jT~*V twBZt<\@5aB 0;͍8E-Og  3ByHԃņd>pٵ52Ѯi#ok^4[.h6<r|C 0 {X"nH$HP$ Yl҂fe[q\};'|>tM%HpIA(;zv))Wc!,D4YQ%,5Лǘz?q~"kC7Q}F B!-ӑ̷MYdl0P;^lXQQ>_LjEw\n!`5ss3[>RJ9]Fz68=j?C zfo s]M $nԸwwxu!^f+Gi#QTEhخl>"gMP8M3G6!˙5Ռ"9UKQv,umX˹Bi'p b$˦`H]&q5]?ɁW(n/Ձ8vMW:4[v֟YEõws<vSmS%g5nM7Ҳz0t&qbSHF` _ձ(KlG5A3K/P1{և*_/f\1l>r)6Wּ;%騨GԲ%OզY3'oN۸~}ZlBt'H3,n&xPI*]yԪ[HK9ʲf u/AԌ_xw׷iu<]#}H^CNK4gKɔ!>/x r#Jx2bneٽ%3?%8>;C endstream endobj 422 0 obj 1117 endobj 423 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 421 0 R >> endobj 424 0 obj << /Length 425 0 R /Filter /FlateDecode >> stream xWo6_9@̐V޺--:l)؀dȔ#Ru(R"nƁ}w$4g~Cfdd} #D ֫Dh.M_-"#F/_AZ(DN4[}S_$Xm$y9ћ;۸5Y=%x8hCmU fvstN:IG0 *)L/-߂nW fEfwuXn̄a=qYVLsYA?2)4Fhx!4ҺX>X[~<-<mlIvkun1AzJW:. uCa]'v6ձDR>RdN0(~?on/mo]B)$uu=G1~ACу7O}-o,!P}L!0`v: JC; Xi05െze6m,Ǫ.jsUhQ6ND\М+EKGspJpLǨ9wfϯ.Ыp&sv0~* )? QِýbZӪz\65?Ո[ဒ%d eW;vykT (v|"ueѴi^>$AP4TEZѢDW\d{Ş٢E7Z,\jڼD9T)eXw5D[2{r7r+%ʈyW"(0 O0T endstream endobj 425 0 obj 1217 endobj 426 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 424 0 R >> endobj 427 0 obj << /Length 428 0 R /Filter /FlateDecode >> stream xWmo6_os|붴谥Kc`b%:WHl^?Ļ{>y>"?IFQxFG1CL#0k/b~ "GjT&Woz}{:q| AO/K Zn4˲4PE}Xڵ}Z~- |AS)UPK*JѲ Jpu5e&`!Hf$\ųgS? ć\tcBtAV&%oεz$ C߳V s0]63 $4QIXr /m7 >q@4q瀇[`W "Jx hfE0(#i.g20}%@mٗdE5˲g3>70)$t/j'RQD b=h d_,r+fUa u=;¤(`K|>3D۪غ.Z9bBvV\Dgn7Y?j *F2繚N"LMϝk(h;Ln/DT3SdRnzZUU-FkQQ4Z65(rSoV:(;;Hx۶B{Z̮g)$ǜ&efzKԢIX*=-BՕ ܖVnrhZ)iM7[Ô ePrp;;j/f&7qS`Ti,dB}|}ٙh﫺vz2VGҝh E|k&M&f34&TZ.R܎ҽaՂjS:뛪ͅbeO!)xQN\̠<\-怀,<"@-.TX?_|wҠs]C;* G30p˨޿[]:0~ڣN]RcX~}"gP@~!Z.X^[>pmQH.\jGA62 ɻs](#8=xJ/=ߙR a endstream endobj 428 0 obj 1109 endobj 429 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 427 0 R >> endobj 430 0 obj << /Length 431 0 R /Filter /FlateDecode >> stream xW[o6~Hݕnk[46.Yb!"U7~"EҎi.e5JdsTP`v d2L( 4v:٥t~L*CuJc_Uh8o,/()I0 UQ~c<﫽d%yÁG e BA)ZfvoʭaoeŌŎ9^ mj}0ZٕUvUs\na- sg[v&"6bk$j^pPD#) H8f> endobj 433 0 obj << /Length 434 0 R /Filter /FlateDecode >> stream xUKs WўI('4!AI z[ݞX|b_ 湴C($bB np ?!`;%+zX@oAS4:z~Wa9·+v#D(p!B.eGa]puΤP;Xwu }g^.ڡK((F1Cfih@1v[b-!q2GnEœ.4ʽ 1ZyCi8U 'ׇJ@W b Hy +sh7/] Rrm42Ʉ ,)aEReSe3l z hh~U.n͸{jw(}L>CA1g{^YrsZ6UE MBR"D\c/P@U%y`wW[Y ps{IeE~Y4[YPɦ6N9zzv*ym3>-lG֣X\Gf'GB !}NVLj"ӊaWIyz1J7yuތDA6s5eY m,#TcbUkm* 3n0a NUȶ o=B*a"ܒ-+{d-Jy:L>sb|)~ϫNv0:~loL}_E< endstream endobj 434 0 obj 726 endobj 435 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 433 0 R >> endobj 436 0 obj << /Length 437 0 R /Filter /FlateDecode >> stream xTn0+o]=p#8( WT"Hۯȉ՞H3;*!XӘ_ #5< h:!]=e"EGdR7wwrR(DAuup&=017C!+q}W>_C̣A%W > endobj 439 0 obj << /Length 440 0 R /Filter /FlateDecode >> stream xTMs0W19D]IoJgzfz3b6 pО C}Vq'8, c $!FCwV8L^_q;- |!7]9i{_ҩ 94 1jl3 `k]#viO2Vtԧ>hBѷ8ưΓ S: GWԏ? endstream endobj 440 0 obj 522 endobj 441 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 439 0 R >> endobj 442 0 obj << /Length 443 0 R /Filter /FlateDecode >> stream xTr0w,^=@Ȼҙ.:㆙.LŲĈJlnWM:HtOR1(H<C4N bwV8L^_ q;5L%s1> endobj 445 0 obj << /Length 446 0 R /Filter /FlateDecode >> stream xUK0Wq9Iz6R˪ 88q^,О |fl?ީob#`ZC,@F#]Co]={Ǯm :[KH~r>7&B(kc$h&d7s[+;eM!|NN\hgɺvbV촄Ց TWChjLAD nuUV0ՠ\"r <zO\3-)T/s!1A\#@M(e| !ZY tH,#ȫ7?ۼpYO5g1SEB}f~38!Sȩ4eޗ>&= 2&ir5~D)u2+|ڮ\0%8b؉l3*?"eZJ;StY_,]xf*vQv jCz*a7  W9*V/P#]E5 hTxe߷Eb1!ά9si 'ׄWԿH endstream endobj 446 0 obj 576 endobj 447 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 445 0 R >> endobj 448 0 obj << /Length 449 0 R /Filter /FlateDecode >> stream xVr0wi$$NK.,6 uү]5ѽёēCR=˜¦t@H UxRp PXYpVnw0|s6z9:7B t>\@0,Z q.Dȥ(,K}`|#7{X~w.u }g޴)[P QKc Ң("$MC1Ʈ&3,K&"LG%.D61 :JQHrWc`b_s;x]* ,k[$Mk4]_€F* 6v«&$(%eX4v5S5,J>05?}ɸ2&*cD^?zr:)e DHWb k6uqSPQM"C3\Y­̿xRZiM.O;!˴o> endobj 451 0 obj << /Length 452 0 R /Filter /FlateDecode >> stream xUMs0+J|W: 3=$9P[b\'6nOMbyey(=nb=6 B>ak~Ȫϱ]kۓ Ż{zxBMiCX{bM!^HJ"™t>ڨ'7{0i߼I7WݲfT 4?m!Q;a!{DDj *Tm̘0Mb 5#Q* wE\3&vߕFAu;l+H`VPeI,˘E6a:pB 9!ou+Ӳ(D +/dQ~g)Rr"fYnO'Ay@|SVi 2F/R]/c009"e("|YoI"ݹnB235KZ W]P7UU"[qR ]x#s^HM<{>F=A@'™iٔl$pb,+UKr2ixa4x|a3(|1_O #Wt endstream endobj 452 0 obj 600 endobj 453 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 451 0 R >> endobj 454 0 obj << /Length 455 0 R /Filter /FlateDecode >> stream xUKs0WfUĭt 39,S[&)w%?0ў >kWo?^["s^AA|`.µmLco>mmg v(|s`Z{g:(O3ÝlyeRy82x}umJr]`:;ڭ`vjKZp hz,;8%N RlLl*M9Gq.' Jn]tLDH!O]95mZ+0K2.ٳ* _"Q,I)aH!ro e_u)5g`'2H}6ӣbRVEW d=&> endobj 457 0 obj << /Length 458 0 R /Filter /FlateDecode >> stream xUMs0W1$J'~h6._ohnsJjC,ðQ{uT]e@5jNz[;</4P4mO1?4W=9/A5rycJ,} endstream endobj 458 0 obj 609 endobj 459 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 457 0 R >> endobj 460 0 obj << /Length 461 0 R /Filter /FlateDecode >> stream xUKs0+c|I<|+憙-Lp@_ 6=5%-ZiZēG}m .,ޓ(p~ԇh  ܰ- ` G^>c[6 yC?ti^3\Kf!!O&XG>g^ -_}.njBUH~x_j}jgz:;84G` 7:ut;cVΐz٪t+c!`QEw$jr^!DRKz#QJ`&UVUR-p~KrYʪj[XlgxÑDQdl/UYG#P&vFs97.3_Y Ӽ0uP?$R]7rJ;!FƈP(&?5zv;1Fb\s~.@rc?cB}$X_d(ǥL1H(bnrL 0Fʶ>"7t@lr'h:c7y·*t'^G>Ֆjo_ԍ|&TPʝgbZ;X;Gz[wp^89~DўyCw SvbpyĽg,olNg endstream endobj 461 0 obj 605 endobj 462 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 460 0 R >> endobj 463 0 obj << /Length 464 0 R /Filter /FlateDecode >> stream xVKo0 WTv6`úءsCb-?8Nk (~"v#huB ,U?!kuC+Xj롌g­N`=h\}xrZs3 0,O3õ,"\1*EarY} ecg8JN WLq׋?WޘRs]p endstream endobj 464 0 obj 747 endobj 465 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 463 0 R >> endobj 466 0 obj << /Length 467 0 R /Filter /FlateDecode >> stream xUn0+ ;\$Z[ F@q`l EG;ҞXH=qC6&8h2ڇxWL7V /ѯX֫w؍ dA | cи o^"rCU!=S81&$L  >e\mmQ]C-U+xe^!kkV z_BH4j!Z 4([bf-!áK㴘d+zLpȩs>q5JXPlM}$ =_Y>k1y=.4(<xTuW9R<LjM2DAtˋh7[]ߓ2d 9 oVYQnG be&v\<f`ms:91y{>]9pMtYYXʥ%ȧui*`4h< it)J6mQFF&Y5) b1d=sS>-Nț3[۞E^Qt$9/bNKRĸ%fBU/MGl=nOLig}} fzAdN4~9}zaJ endstream endobj 467 0 obj 627 endobj 468 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 466 0 R >> endobj 469 0 obj << /Length 470 0 R /Filter /FlateDecode >> stream xUKs0W1JK6M;t0 @QA\ًC"7jgy5y%>eU;kklF@S 8$D]3!YuLFVϿ2y6Z&> endobj 472 0 obj << /Length 473 0 R /Filter /FlateDecode >> stream xTn0+ΐH.)Л=$AȲ-Ԗ-]$%9D2L|fό{mkcZE1"rpapzwA8L +{pbvM҆`&BH/*d&`?5]|*&M[M^$ؗd$΢}P;}44 vu[hQ{C&nΙcP 8AeP*wP/'sH2lrA 6=48OQnH؄1V,L/=CēUY,/nzo$#\}^WvVSqDHdylHF}1sX7U6)s5(m9*䟫A+Aѐd0 TYVE28N뼬fE0v3]/(~- }pӗBnF(!8UĠ endstream endobj 473 0 obj 507 endobj 474 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 472 0 R >> endobj 475 0 obj << /Length 476 0 R /Filter /FlateDecode >> stream xUn0+0;uK C,BcI!.ߡkID2D=> HR HCq` q?1Za?`\]q߬c?/G->tZw፳%/*76r^_@RaB\% :ջ"_\yReEnw}r>Dj].^X&&dA? xbL RIBD#fZU5Ne)CET8Yr7dȒB?B KRC5qM뤂blƵ勐\-YٺLo c$"쒢kpgrlGa. BO)Ii>yцЌZItV}Pp<~#Cf`K&अiU|gs#RjzEdXݒģ$\1v0SDx3N~:+jjXu"SB͢)$e l*ft}/|>h;ǰkes=jϗCCZiGqxfV?y endstream endobj 476 0 obj 583 endobj 477 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 475 0 R >> endobj 478 0 obj << /Length 479 0 R /Filter /FlateDecode >> stream xTn0+vIJ|Mތ! Ce!H4}z8k&ah/L{$kcǐ5˘B@X{a_d?# cر.@c!!&a_ocHpasV+\I /U~{ݖ/|'UB~j6e;~ 4i; $rC}!:jtzc!7Otm~sd R(DA]=UD+K#{$ȃ#@y \MUЇaY0 K鶮î2EQgסJ|!8 ZL6M Tw ;C3f\E念tηk*l/QC.j9gZ^zSb>}iC1 :İ0^Mlj9}@NNbjx~U endstream endobj 479 0 obj 474 endobj 480 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 478 0 R >> endobj 481 0 obj << /Length 482 0 R /Filter /FlateDecode >> stream xTn0+II$}kCMBc;[{j" &7z8W&kcM!F .C;~W8dXn#KCɺpw҆/1t@7k֚HJZIpvYUM/ȫGxe;olkGңy[@i Q kmh&"IzCflYs`R(DAiC` R%z %SW\8iY4Ȗ.$s% Դ2Q>oi|?4(~;/6UV T{J-DטӇ3MC(^˴YSNq@Ihydk5LN{o1SU͢MQ.']+W-lkTI!y b8g*JW7e^[|cCŰo{9~jOh=LU endstream endobj 482 0 obj 513 endobj 483 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 481 0 R >> endobj 484 0 obj << /Length 485 0 R /Filter /FlateDecode >> stream xTn0+II$}CMBc;D֞HI=< @ņ=-A%SH ˘a  nC&k $<7l'ߔ6w14{6\kItˢqnEE}yW9d|c;}'ڑh|ZBGwHj!Z c٬y?6_3@$ QPik$I ҵeA[ +zQ[_ G #)㰝:!TTi`ޮ+:6#<'psx՞"*0>y?l endstream endobj 485 0 obj 512 endobj 486 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 484 0 R >> endobj 487 0 obj << /Type /Action /S /GoTo /D [327 0 R /XYZ 72.0 720.0 null] >> endobj 488 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 227.33 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 487 0 R /H /I >> endobj 489 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 487 0 R /H /I >> endobj 490 0 obj << /Type /Action /S /GoTo /D [330 0 R /XYZ 72.0 720.0 null] >> endobj 491 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 227.34 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 490 0 R /H /I >> endobj 492 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 490 0 R /H /I >> endobj 493 0 obj << /Type /Action /S /GoTo /D [333 0 R /XYZ 72.0 720.0 null] >> endobj 494 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 250.09 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 493 0 R /H /I >> endobj 495 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 493 0 R /H /I >> endobj 496 0 obj << /Type /Action /S /GoTo /D [336 0 R /XYZ 72.0 720.0 null] >> endobj 497 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 273.97 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 496 0 R /H /I >> endobj 498 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 496 0 R /H /I >> endobj 499 0 obj << /Type /Action /S /GoTo /D [339 0 R /XYZ 72.0 720.0 null] >> endobj 500 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 283.42 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 499 0 R /H /I >> endobj 501 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 499 0 R /H /I >> endobj 502 0 obj << /Type /Action /S /GoTo /D [342 0 R /XYZ 72.0 720.0 null] >> endobj 503 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 232.33 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 504 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 502 0 R /H /I >> endobj 505 0 obj << /Type /Action /S /GoTo /D [345 0 R /XYZ 72.0 720.0 null] >> endobj 506 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 232.34 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 507 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 505 0 R /H /I >> endobj 508 0 obj << /Type /Action /S /GoTo /D [348 0 R /XYZ 72.0 720.0 null] >> endobj 509 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 227.88 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 508 0 R /H /I >> endobj 510 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 508 0 R /H /I >> endobj 511 0 obj << /Type /Action /S /GoTo /D [351 0 R /XYZ 72.0 720.0 null] >> endobj 512 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 223.43 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 511 0 R /H /I >> endobj 513 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 511 0 R /H /I >> endobj 514 0 obj << /Type /Action /S /GoTo /D [354 0 R /XYZ 72.0 720.0 null] >> endobj 515 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 223.44 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 514 0 R /H /I >> endobj 516 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 514 0 R /H /I >> endobj 517 0 obj << /Type /Action /S /GoTo /D [357 0 R /XYZ 72.0 720.0 null] >> endobj 518 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 211.21 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 517 0 R /H /I >> endobj 519 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 517 0 R /H /I >> endobj 520 0 obj << /Type /Action /S /GoTo /D [360 0 R /XYZ 72.0 720.0 null] >> endobj 521 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 212.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 522 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 520 0 R /H /I >> endobj 523 0 obj << /Type /Action /S /GoTo /D [363 0 R /XYZ 72.0 720.0 null] >> endobj 524 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 241.77 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 523 0 R /H /I >> endobj 525 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 523 0 R /H /I >> endobj 526 0 obj << /Type /Action /S /GoTo /D [366 0 R /XYZ 72.0 720.0 null] >> endobj 527 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 216.21 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 526 0 R /H /I >> endobj 528 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 526 0 R /H /I >> endobj 529 0 obj << /Type /Action /S /GoTo /D [369 0 R /XYZ 72.0 720.0 null] >> endobj 530 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 223.44 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 531 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 529 0 R /H /I >> endobj 532 0 obj << /Type /Action /S /GoTo /D [372 0 R /XYZ 72.0 720.0 null] >> endobj 533 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 226.77 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 532 0 R /H /I >> endobj 534 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 532 0 R /H /I >> endobj 535 0 obj << /Type /Action /S /GoTo /D [375 0 R /XYZ 72.0 720.0 null] >> endobj 536 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 214.55 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 535 0 R /H /I >> endobj 537 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 535 0 R /H /I >> endobj 538 0 obj << /Type /Action /S /GoTo /D [378 0 R /XYZ 72.0 720.0 null] >> endobj 539 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 214.55 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 540 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 538 0 R /H /I >> endobj 541 0 obj << /Type /Action /S /GoTo /D [381 0 R /XYZ 72.0 720.0 null] >> endobj 542 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 227.33 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 541 0 R /H /I >> endobj 543 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 541 0 R /H /I >> endobj 544 0 obj << /Type /Action /S /GoTo /D [384 0 R /XYZ 72.0 720.0 null] >> endobj 545 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 234.55 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 544 0 R /H /I >> endobj 546 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 544 0 R /H /I >> endobj 547 0 obj << /Type /Action /S /GoTo /D [387 0 R /XYZ 72.0 720.0 null] >> endobj 548 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 252.33 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 549 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 547 0 R /H /I >> endobj 550 0 obj << /Type /Action /S /GoTo /D [390 0 R /XYZ 72.0 720.0 null] >> endobj 551 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 245.1 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 552 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 550 0 R /H /I >> endobj 553 0 obj << /Type /Action /S /GoTo /D [393 0 R /XYZ 72.0 720.0 null] >> endobj 554 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 230.66 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 553 0 R /H /I >> endobj 555 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 553 0 R /H /I >> endobj 556 0 obj << /Type /Action /S /GoTo /D [396 0 R /XYZ 72.0 720.0 null] >> endobj 557 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 230.66 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 556 0 R /H /I >> endobj 558 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 556 0 R /H /I >> endobj 559 0 obj << /Type /Action /S /GoTo /D [399 0 R /XYZ 72.0 720.0 null] >> endobj 560 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 231.77 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 559 0 R /H /I >> endobj 561 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 559 0 R /H /I >> endobj 562 0 obj << /Type /Action /S /GoTo /D [402 0 R /XYZ 72.0 720.0 null] >> endobj 563 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 231.77 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 562 0 R /H /I >> endobj 564 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 562 0 R /H /I >> endobj 565 0 obj << /Type /Action /S /GoTo /D [405 0 R /XYZ 72.0 720.0 null] >> endobj 566 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 232.33 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 567 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 565 0 R /H /I >> endobj 568 0 obj << /Type /Action /S /GoTo /D [408 0 R /XYZ 72.0 720.0 null] >> endobj 569 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 239.55 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 570 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 568 0 R /H /I >> endobj 571 0 obj << /Type /Action /S /GoTo /D [411 0 R /XYZ 72.0 720.0 null] >> endobj 572 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 257.33 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 571 0 R /H /I >> endobj 573 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 571 0 R /H /I >> endobj 574 0 obj << /Type /Action /S /GoTo /D [414 0 R /XYZ 72.0 720.0 null] >> endobj 575 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 194.56 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 574 0 R /H /I >> endobj 576 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 574 0 R /H /I >> endobj 577 0 obj << /Type /Action /S /GoTo /D [417 0 R /XYZ 72.0 720.0 null] >> endobj 578 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 248.98 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 579 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 577 0 R /H /I >> endobj 580 0 obj << /Type /Action /S /GoTo /D [420 0 R /XYZ 72.0 720.0 null] >> endobj 581 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 231.22 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 580 0 R /H /I >> endobj 582 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 580 0 R /H /I >> endobj 583 0 obj << /Type /Action /S /GoTo /D [423 0 R /XYZ 72.0 720.0 null] >> endobj 584 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 231.23 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 583 0 R /H /I >> endobj 585 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 583 0 R /H /I >> endobj 586 0 obj << /Type /Action /S /GoTo /D [426 0 R /XYZ 72.0 720.0 null] >> endobj 587 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 253.98 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 586 0 R /H /I >> endobj 588 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 586 0 R /H /I >> endobj 589 0 obj << /Type /Action /S /GoTo /D [429 0 R /XYZ 72.0 720.0 null] >> endobj 590 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 236.22 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 589 0 R /H /I >> endobj 591 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 589 0 R /H /I >> endobj 592 0 obj << /Type /Action /S /GoTo /D [432 0 R /XYZ 72.0 720.0 null] >> endobj 593 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 236.23 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 592 0 R /H /I >> endobj 594 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 592 0 R /H /I >> endobj 595 0 obj << /Type /Action /S /GoTo /D [435 0 R /XYZ 72.0 720.0 null] >> endobj 596 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 203.44 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 595 0 R /H /I >> endobj 597 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 595 0 R /H /I >> endobj 598 0 obj << /Type /Action /S /GoTo /D [438 0 R /XYZ 72.0 720.0 null] >> endobj 599 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 223.99 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 600 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 598 0 R /H /I >> endobj 601 0 obj << /Type /Action /S /GoTo /D [441 0 R /XYZ 72.0 720.0 null] >> endobj 602 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 236.77 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 601 0 R /H /I >> endobj 603 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 601 0 R /H /I >> endobj 604 0 obj << /Type /Action /S /GoTo /D [444 0 R /XYZ 72.0 720.0 null] >> endobj 605 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 226.77 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 604 0 R /H /I >> endobj 606 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 604 0 R /H /I >> endobj 607 0 obj << /Type /Action /S /GoTo /D [447 0 R /XYZ 72.0 720.0 null] >> endobj 608 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 212.34 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 609 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 607 0 R /H /I >> endobj 610 0 obj << /Type /Action /S /GoTo /D [450 0 R /XYZ 72.0 720.0 null] >> endobj 611 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 216.22 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 610 0 R /H /I >> endobj 612 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 610 0 R /H /I >> endobj 613 0 obj << /Type /Action /S /GoTo /D [453 0 R /XYZ 72.0 720.0 null] >> endobj 614 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 212.89 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 613 0 R /H /I >> endobj 615 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 613 0 R /H /I >> endobj 616 0 obj << /Type /Action /S /GoTo /D [456 0 R /XYZ 72.0 720.0 null] >> endobj 617 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 227.89 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 616 0 R /H /I >> endobj 618 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 616 0 R /H /I >> endobj 619 0 obj << /Type /Action /S /GoTo /D [459 0 R /XYZ 72.0 720.0 null] >> endobj 620 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 214.56 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 621 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 619 0 R /H /I >> endobj 622 0 obj << /Type /Action /S /GoTo /D [462 0 R /XYZ 72.0 720.0 null] >> endobj 623 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 221.22 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 624 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 622 0 R /H /I >> endobj 625 0 obj << /Type /Action /S /GoTo /D [465 0 R /XYZ 72.0 720.0 null] >> endobj 626 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 205.66 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 627 0 obj << /Type /Annot /Subtype /Link /Rect [ 529.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 625 0 R /H /I >> endobj 628 0 obj << /Type /Action /S /GoTo /D [468 0 R /XYZ 72.0 720.0 null] >> endobj 629 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 237.32 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 628 0 R /H /I >> endobj 630 0 obj << /Type /Annot /Subtype /Link /Rect [ 530.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 628 0 R /H /I >> endobj 631 0 obj << /Type /Action /S /GoTo /D [471 0 R /XYZ 72.0 720.0 null] >> endobj 632 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 242.31 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 631 0 R /H /I >> endobj 633 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 631 0 R /H /I >> endobj 634 0 obj << /Type /Action /S /GoTo /D [474 0 R /XYZ 72.0 720.0 null] >> endobj 635 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 218.44 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 636 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 634 0 R /H /I >> endobj 637 0 obj << /Type /Action /S /GoTo /D [477 0 R /XYZ 72.0 720.0 null] >> endobj 638 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 232.32 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 637 0 R /H /I >> endobj 639 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 637 0 R /H /I >> endobj 640 0 obj << /Type /Action /S /GoTo /D [480 0 R /XYZ 72.0 720.0 null] >> endobj 641 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 242.88 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 640 0 R /H /I >> endobj 642 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 640 0 R /H /I >> endobj 643 0 obj << /Type /Action /S /GoTo /D [483 0 R /XYZ 72.0 720.0 null] >> endobj 644 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 221.22 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 645 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 643 0 R /H /I >> endobj 646 0 obj << /Type /Action /S /GoTo /D [486 0 R /XYZ 72.0 720.0 null] >> endobj 647 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 221.22 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 648 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 646 0 R /H /I >> endobj 649 0 obj << /Length 650 0 R /Filter /FlateDecode >> stream xO}=^tο,S*UY8fU. %A.;ft}geK(⡀>ogyo~lhk{7~壶_p{_Cۯ7loǛۏyy_?sv~Ԗon(sǷ/?~~z{?߿}~?o`w/+o?~d?I?/?}w?~^~bQ~G^/Kw&qH$"qXN X6, e`A,K*Ukz6C&K)S'`l ;`Q@g!  LLL"XE`&Mv"Ep!CN ` ;`YD0D0D0D0E0E0E0E-y^j^ǟ3ix\.}^Ս)}^Wr$)/cZ,_X 6k|l.E,_F5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN9P}й^bytXg222222ɲe%J,Y6ldɲe'A,Yd9r}Z,zXWu5YYYY&Y&Y&Y&Yqjx߽O?i2ؿƿ}B9 IuAuzB]n_J]RbYv,X"e)bY YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YNM,c2v],c2XF(ddddddddYɲe%F,Yvdɲ A,'YNbX&enbX.e"Y2222222ɲey"x>}xӛfɋRwo_dIT7Է/To_dIMAIIII,+YVldȲe'N,;Yd9r$)?IX&ebX.Q2XF! $$$J,+Y6ldȲe'N,Yd9r$)enbX.ebE,eBAAAIII,o9յ[E?|Ĺ_6K}[Y꠺Q=,uzH}[YjLdYV~ȸRO[R=;IuzlTd9r$)R>1ԻXK-P\',,,,,,,,+YVdȲe#N,;Yvd9r$IS,}br}Xj\'>ddddddddYM/ӛڧP#N/gF+CSTwF5YNbY6,XM,.e˲e)bYX"eeeeeee%J]ԏ']+CC.Iu uPM,'YNbX&ebX.e"Q2222222ɲe%J,Y6dɲe'A,YNd9r:RZu˵H-kՁZu& $$$JΩ<9̱+<uS3.ԕ!cꤺKx؅,'YN,XM,&e˲eŲ,E,KR222222ɲe%J,Y6ldɲe'A,Yd9relbX&ebX.Q2XF! $$$$J,+Y6ldȲe'N,Yd9r27M,s2w],eBAAAAIII,8Gu[QwN'Q~s?78y٩NԷSQT$IS,׃H r=Dj\"zddddddddYɲe%F,Y6dɲ A,'YNd9r=Dj\"z r=Dj\",,,,,,,+YVdYɲe#F,;Yvd9r I,XH-A$PbD"X@]r=Dj LLLLO:Ͼa_OϺoYxwS6f˫[nTNS:Iu]]D9$I~z?HrR$VSZMj3fTvS:Lu0aTNR}9)rR}9+ziAyAB/'AnaaaiiiiTVSmLj7nTS:Lu4I/G AN/ AN/ AN/ ] )VSϪ=Y:*Ͽ{luzO+p%yX,Jj| W0iTNRW}|'p%9އ+I>\InaaaiiiTVSLj3nTS:Lu4iTÕz I>\IN BJrS S S SMSMSMSMSZMj3fTvSMu0aTNRW}TÕz /z$70000444jk:Um2\8|y)#Zߟ|i%P>(PwfyX,wSMu0aTNS67Iumn鷺67Iumn(7000444jTMus.V,nyZ)aS:Mu('յI('յI^Humnjjjjjjjj5jT6SmMj7nTS:Mu('յQNksT&y!յQnaaaaiiiTvZy+~i{Y>)j(+yZ)?~ 8oR Y>)? !'_Mu4iT'OT'_IxT'_M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu 9O=IxT'ȿR= !70004444jT6SmLj7nTS:Mu$ rR= !' rR= z^HxTTTTTTTT NUkOmӇ'[_oB9³-Y>)?dx!7^rS:Mu$MrR=dz& 9o2& VSzB>)?dx!7^N& yXnTNSzBNǛ _wR=dx!'MT7^M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IxᅜT7^IxᅜT7R=dx!70000444j˩NyQjQ(߽/k}Dlɇ_䷿bNy,˛^,7nTS:Mu$յQNkM|'յQNkMTךFVSZoyy)by|PwN,Mu4iTךF95MTךF95MBkMTTTTTTTTVSLj3nTvS:Lu4iTךF95rR]k夺4 5rS S S S SMSMSMSZǓ'#nv^#څ<-F yX,F vS:Lu4iT'G 9GT#څT#څT#څTTTTTTTVS=hIaDWBw#څ<,7aTNR=hrR=h;G 9GBBnaaaiiiiTVSmLj7nTS:Lu4IBNBNBNqDjjjjjjjj556hw>~~6Շ/qvNy,˛Q,4iTTFe#RZvR-TŕTTTTTTTTVS7rݩ~%oay|RދA-OMu4iTc#H56RTc'I5 F!(zK)S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5M5Ms޷'3S|yVqflgj ^ nyZ)ay|R>:Iu=IrR]O|'$AIu=IPBIjjjjjjjj5jo,|!O;o,_f yTNSFjl;NjRBQL5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muz 夺$(NIz 夺$HVS=,AO5h<~{:6'X^-̓So<('յyPNk(:Mux('յPNk硜T#y!յPnaaaaiiiTVSmLj3nTS:Lu4iT D9HTD9-rR]kZMj5jT6SM0aTNS:IuD$IuME$/"M5L5L5L5M5M5M5Mu]#sz>/{6=a.:oENa.Ia.WTNR=ErR=ErR=ErR=ETsхTTTTTTTTVSLj3fTvS:Lu4iT' 9TsхTsхTsхTTTTTTTVSZMj3fTvS:Lu0iT' 9TsхTsy!\t!700044445^Ew>>~EoN%O|P~S~Y>):Mu:rR]'H:rR]'H^HuCVSZoVmS7f|˫:Mu$u夺N࡜T <:GBM5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu:rR]'H:rR]'PNM5L5L5L5M5M5M᮴Sy7:7Mu$ղjHlZvR-;TK!RHR-TTTTTTTVSEO[Z>(iy|l:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5VS= G'Q|yמq~uVy} ˛/ǔW_)O˻0!Iu&D9Ä('uTaBjjjjjjjj5j_kފ畼mIy/Wc<-7iTNR] QNa鷺Tb:LrS S S SMSMSMSZMj5fTvSMu0aTNSTaB鷺TaBR] Qnaaaiiiiu<|G=hӌo^AyZ%_kay|R˫夺IuVSZ'LJ.^f Wj|얧:Mu4IkT^wR]kzЕTAVSZMj3fTvS:Lu0aTNR͍Ts#H5wR͝Ts'I5 f!,ֈS5'kD 5|˿ƨ:=B(%yZ)_cay|R^ZMj3fTvS:Lu0iT'\9\9\9\t=/rZMj5fT6SM0aTNS:I~z T:IN $'Njjjjjjj5jT6SmLj7nTS:Mu$NB'wR_$9/tjڶ-mKiRڶ-mKiRڶt+픏ؾw.H(˛夺&IuM$R] ZM5sl۾y%oay|RދA-OMu4iTDB9DTDB9rR] ZMj5jT6SM0aTNS:IuM$H$IuM$H$/&M5L5L5L5M5M5M5M0QL$}Nϟ}/Gۯ@ʳ8m_)~<- f|4IQazT;GQNQaR] TTTTTTTTVSLj3nTvS:Lu4iTף('0Iu=*rR] zTZMj5fT6SM0aTNS:Iu=*rR] |'0Iu=*rR] TTTTTTTNՈ'{^~:mK< "N}.<,oOʧNS2AN/s|'՗rR}T_"M5L5L5L5M5M5M5Mj55ůߧx=_siy|EI$4iTsz$'\$9" "M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu}.Ts;"I>INHrS S S SMSMSMSz蔏)J^-?^~%OIlZ6R-TNe'ղj)Z baaaaiiiTVSmLj3nTS:Lu4iTc#H56RTc'I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'Fjn;NjTjS S S SMSMSMSMSI5ړI|yΓI Pw_yX,by|P>wrR}Yt '՗ErR}Yt '՗Ez^HeсTTTTTTTTVS}&BxM<,oOIWפ_rS:Mu$H56RTc'I5vRBQH5 F1000444jTVSmLj7nTS:Lu4IEGrR/:z_t$'y!#ETd89l[|s.<,oOkZ>(oLj7nTS:Mu$յQNkϣTמG9=OBkϣTTTTTTTTVSLj3fTvS:Lu4iT'=rR]{;=rR]{夺y)_U<,oOs%s%7aTNSz?8JrRN$'Q(M5L5L5L5M5M5Mj5Q%.QW O; Mu4iT_T_rprpQjjjjjjjj5jT6SmMj7nTS:MuQQQQB/GAnaaaaiiiTtu|2]8$>]oz[ 5ΛfyX,~ͦZ>(MyZNb$Iu]D9('u1THjjjjjjjj5jn+y,˛^,nyZnTNS.FTH鷺.FTHrS S S SMSMSMSZMj5fTvSMu0aTNS.FTH鷺.FTHR]#Qnaaaiiiik9Us{8eyW8 m<,oO{Z>(iNS:Mu꺺rR]WI꺺rR]WQN"M5L5L5L5M5M5Mj5û nB^-M\Ną<,7aTNRTc#H5vRTc'I5 F!(ZMj5fTvSM0aTNS.TE꺺rR]WI^Hu]]DVS=<(5~ ?}Ӈ"u2b"|i.~I|]K%y|P~S~rSMu0aTNR]WvQN.Iu]E9+$/TTTTTTTTVSLj3fTvS:Lu4iT'+('ue;+('ue夺TTTTTTTVSZMj3fTvS:Lu0iT'+('ue;+('ueTו]jjjjmKiRڶtTr߿4s=e&=3]NafIafWMu4IǙBNǙBNǙBNǙqfjjjjjjjj5j03]f03]ȫt!OMu4iT3ӅT3NǙBNǙBNǙBnaaaiiiTVSLj3nTS:Lu4iT3ӅT3NǙBNǙqfjjjjjjjaf:>):Lu4iTFe#ղjHZvR-;Bj)ZMj5fT6SM0aTNS:I56RTc#I5vRTjRBQL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujnFj;NYH5 f10004444յ[ٟV'V=Vݭ>|{K3֞|i$%jS~+(Mj7nTS:Mu4IB4Iu]&NB4Iu]F9 (7000444jTVSmLj7nTS:Lu4IB4Iu]&NB4Iu]&y!u!ZMj5fTvSM0aTNS.DTׅhrR]I^Hu]Fڶ-mKiRڶ-o(__fKw2[rR]QN9Iu"'y!uZMj5fT6SM0aTNS:Iu"G9[$Iu"G9[('uZMj5jT6SM0aTNS:Iu"G9[$Iu"G9[$/nTTTTTTTkyDdP_?>|/_{J擏?-ϊj햧Y7Mu0aTNR]夺&,IuMXꚰ$/&,M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muꚰ('5aIꚰ('5aQNk¢TTTTTTTVSZMj3fTvS:Lu0iT' rR]; rR]TׄE&Soyj~1N}_4'受}^ɫ>iy+NSZ6R-TNe'ղj)Z Bjjjjjjj5jT6SmLj7nTS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4IjnFj;f!,TTTTTTTk<)Gy|P~K.T%2DrR]H^Hu]"CVSZMj3fTvS:Lu0iTNR]PNwR]PNIu]"CVSZMj3fTvS:Lu0aTNR]PNwR]PN Kd(70004445}'3Jr?~o/pz_[wfyX,S:Lu4IkTE9-rR][TEVSZMj3fTvS:Lu0iTNR][夺(wR][夺(IumQjjjjjjj5jT6SmLj7nTS:Mu$յEQNk|'յEQNkڢ(7000444յE}'[Trr_^٢N/[ԅ|P~آ.iyE]f|0aTNR=nQrR=nQrR=nQrR=nQT[ԅTTTTTTTTVSLj3fTvS:Lu4iT' 9T[ԅT[ԅT[ԅTTTTTTTVSZMj3fTvS:Lu0iT' 9T[ԅT[y!u!7000444յE}/߽7/ooQs{x3//tߪGo?v˯s_~h?soo?ۏ׷~}zOf{77}{vfob[}7ÿ$~c/?sq endstream endobj 650 0 obj 14801 endobj 651 0 obj [ 488 0 R 489 0 R 491 0 R 492 0 R 494 0 R 495 0 R 497 0 R 498 0 R 500 0 R 501 0 R 503 0 R 504 0 R 506 0 R 507 0 R 509 0 R 510 0 R 512 0 R 513 0 R 515 0 R 516 0 R 518 0 R 519 0 R 521 0 R 522 0 R 524 0 R 525 0 R 527 0 R 528 0 R 530 0 R 531 0 R 533 0 R 534 0 R 536 0 R 537 0 R 539 0 R 540 0 R 542 0 R 543 0 R 545 0 R 546 0 R 548 0 R 549 0 R 551 0 R 552 0 R 554 0 R 555 0 R 557 0 R 558 0 R 560 0 R 561 0 R 563 0 R 564 0 R 566 0 R 567 0 R 569 0 R 570 0 R 572 0 R 573 0 R 575 0 R 576 0 R 578 0 R 579 0 R 581 0 R 582 0 R 584 0 R 585 0 R 587 0 R 588 0 R 590 0 R 591 0 R 593 0 R 594 0 R 596 0 R 597 0 R 599 0 R 600 0 R 602 0 R 603 0 R 605 0 R 606 0 R 608 0 R 609 0 R 611 0 R 612 0 R 614 0 R 615 0 R 617 0 R 618 0 R 620 0 R 621 0 R 623 0 R 624 0 R 626 0 R 627 0 R 629 0 R 630 0 R 632 0 R 633 0 R 635 0 R 636 0 R 638 0 R 639 0 R 641 0 R 642 0 R 644 0 R 645 0 R 647 0 R 648 0 R ] endobj 652 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 651 0 R /Contents 649 0 R >> endobj 653 0 obj << /Length 654 0 R /Filter /FlateDecode >> stream xTMO0W 8`fjY[E$nIKm+|R Hzy~y @~O`R<UM%R 7,O1Xԫϱ#܈B >0‹huk1JL\d2BȦo&$yV>> %(\0/+3Vfuv4G \wZ="֘ik`՟QEسd4"VՀȆJLĽEۄfyCݫ $S9i1D9G:/ttC9O[.YƘmz]-ʧj^uTB#Z,bvwfz-S q۪za#Pzi\4ռuguwn6L<C1)a{>P}8_'f}f#PM1{w}$ endstream endobj 654 0 obj 463 endobj 655 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 653 0 R >> endobj 656 0 obj << /Length 657 0 R /Filter /FlateDecode >> stream xTMO0Wc; -z@%*,Ic'Y6EO8͛?1H,LI J!j )a 3 ;5sx3/u+6"œge !H.sj+#![E⹅˕۲-d_lE;⑱v$KDpP]m*D[ U/̬d2iwsEɳOd R(DAH'rFJm@P@JG=4#M/(Ux.y;2NLr;5_ endstream endobj 657 0 obj 497 endobj 658 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 656 0 R >> endobj 659 0 obj << /Length 660 0 R /Filter /FlateDecode >> stream xTn0+h]R"EJ! Ԗ#H}zؖ證dĈ;% @~`:xi1#A>D nBbUޟc76v' [p~M.&↰>M$IZkPGd w%\W-|뤷[Ev\Kޑ36иo!S[uH}/5 ZDT0i+hi:4S9P I x/g@eK M\5f X$Sr@j x] ۇ[1g$Kb7|S..P kmZ-~lqz>7IDm,:ܖs:B+Bǡ=T'2>1mK78_4AGK7OY8>ZܫzZ&I(H/mR}iYXPQg U_7* endstream endobj 660 0 obj 535 endobj 661 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 659 0 R >> endobj 662 0 obj << /Length 663 0 R /Filter /FlateDecode >> stream xTMO0Wxg${caYio6MI~4-?͛?1t0[#Pd2(N".b, gWMGiF7pwh'lj9|*O!zt1 endstream endobj 663 0 obj 506 endobj 664 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 662 0 R >> endobj 665 0 obj << /Length 666 0 R /Filter /FlateDecode >> stream xTn0+ΐH-z "$0GZMC-D2Li8||8{m%LB@*G,9c0Y߂FwХ7{D]qCu6҆$XkM%$$9]|.\pݸi|{59"N{kl#Ek] \@m8T3hQzAFzR瓗,[=-^cb\%[ C"f*a{)~="\?%3(VOYQBp$ŐўHEqŪj#jj_,MOB_oߜHE"DbC?&O]&ŔMhfS%89b\e3aUd|W5F_BۥV2[ys$)BIPdq{oAM骶,l7Vͽ\n>~9ν_߫(37(1h Ȝ/!fƪ/M endstream endobj 666 0 obj 534 endobj 667 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 665 0 R >> endobj 668 0 obj << /Length 669 0 R /Filter /FlateDecode >> stream xTn0+ΐߺ@oFAʶPrߗXSI'ᛍOp6S(BN!J$Px?zwA8LV-—ޡϨ37o|Sч4zw!Hc_ ^|,mjີYSk9x+1oA_2wbR##Sv#*D}`}@f`,Bs,b8 DrnCg`SL)塁;>A#@!ns(8o?(O_!2V߶E=P %3ʕٺ˻ M/Db$Wղ8G$I\ޮ ӧuSY۲p}Q^ '6OyU\p,愘 KWE C@7meä.܆HIÎ x#zEbþC7,'A<JD'Wi endstream endobj 669 0 obj 498 endobj 670 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 668 0 R >> endobj 671 0 obj << /Length 672 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒ#]C-=%x ߼s@!N_ IuY %$+TM򻁛M1o/ |G*,i˯=ɯmM%dZpp]*[ U/L 24YQϒ,_tB($HZG}Ki s/H4&Uf ")<͓  (T1(^yS:SwDB-ٕ`T忩Dą;͊ra&GDNh:gxZhOYX97L|un>'׾"Ε$)B˼JMUm<7chEvL♖}} v?yގxBaGw,> endobj 674 0 obj << /Length 675 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒwű$ O73|Ǖ0_=F`$(=(@Ý~+;ݻkaA | ]0s7="!,q&BiCdsV+BI .>yuV߂/(ZEE;mG#5-鸄L nQ Q]xa!I{A&1˫YdNc[#9:[KhQӡ{);AtUI&|*)![$y/j (D1(^9*SwDB-zU`T uS!wz].5L6tpvdўUukK|un>'ռ6 U$)B鍆ƫL̫6iһd,o5~K♆}} f?wގ{xBaG7,:y~2/# endstream endobj 675 0 obj 516 endobj 676 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 674 0 R >> endobj 677 0 obj << /Length 678 0 R /Filter /FlateDecode >> stream xTn0+ΐH-z3"$0 [Ɣ#J]6/ݞH(> endobj 680 0 obj << /Length 681 0 R /Filter /FlateDecode >> stream xTn0+ΐH-z3"$0Ɣ"]v{j" "yDH!_E/=F 9t$Og{ o,q˯e[;?4/!قupdծBFD 3>nRNS+9$rt.6$$4$䱋A|.s3cb^94K 2 B\@ ,MӠe 7LK_f)W=D>z.* LH$,F|_/+Ն'rKYbn7s뼁,|W)F"|uqy]T.'bNɐlY8sL6ͺM6CZc[im!3g+inkM%1^ߢ_b؏09?|e0!djo%g+?B endstream endobj 681 0 obj 536 endobj 682 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 680 0 R >> endobj 683 0 obj << /Length 684 0 R /Filter /FlateDecode >> stream xTKo0 WQGn-"0%1ȩG&i6,H}H9^A[Uc!))q+;ݻsaO&wgҹ o|Wu|ɀ#iSθ%0)l|+TjfMYpKE;nG#Ӭ-~ ܪ#A TW VMED 3"0us%%`ِ|Y jljI(PSWִixw*K̍c/?tWȜn:pdfsN67V5i endstream endobj 684 0 obj 537 endobj 685 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 683 0 R >> endobj 686 0 obj << /Length 687 0 R /Filter /FlateDecode >> stream xTn0+ΐ%z3"$0[ƒ#J]{{J"&yό{mLWv!JPE. %qWO<8f Y/֥ox+n 1cnR l"mB( Ka# [ŧ54Ŵve/ ƾd;Jq˯;"|4o 4޵n:r|P8hQ{AF~ҸY'1 $  9@!}^ lC ,/j7wa[Ρpd1 c„ziO\)]?EH턊[<鉄gSY,/"m/̈́d`>uhV @rekuK]A̩fZútaDk 'Ils[Gs Al< *m=]y ww3ig&_P3-1y;2/TCٹJU_' endstream endobj 687 0 obj 507 endobj 688 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 686 0 R >> endobj 689 0 obj << /Length 690 0 R /Filter /FlateDecode >> stream xTr0 +pLaRIߺ3y'ud[SrtEvsj"yD<0OF%x( n^߱nvα[ .@3x]oxL↰ >$!Y(a$L۝3d7_yV}@k! 48F{2#ZjNX ?2Lֹ[]vzoR""qBwzj`ŜFhEV&VsR5v]9e1+W3.|Jh[7r^d[J$ĨdЧiUls䮡ո`h6-{E?U♪g}?Pv-?tzdN7cMZw09x_YU endstream endobj 690 0 obj 527 endobj 691 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 689 0 R >> endobj 692 0 obj << /Length 693 0 R /Filter /FlateDecode >> stream xUr0wiwƪ$Jg.Lbl3A8mWaf<t=:\=ϙc 9p  \Gv@F7M۱h{^Q#B<^ #"Mq>Fh}g) ("hwOE^*9IC j[yOgBҁ:8%}WJ5T4¬A*6~2ͫZs+9LPʰN2߮4Œs9@M-gTPBY>ikf0i!) j!묷bo2ӆ33-f!W z=0oժLMH^'cU/mqåߪJwr D012ZwEY3Ol% \E^i# ~DmbѦ'@ <ƯGGF|w4=ͪ endstream endobj 693 0 obj 594 endobj 694 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 692 0 R >> endobj 695 0 obj << /Length 696 0 R /Filter /FlateDecode >> stream xTn0+.HW fD@Il)Ezؖc=5q]>GWa DAt $3J<ܳp<{aSzC8N-—ޣ '37@)mCN#d˝1g\iU*@1A:\n/>)~5pڼ1u}>gh7eW;ɺOKHvLw/Ԉ(c!Y?Tf;s_11(NСoY#"!A#@.˼p̢Yr T-),?pA"K4 ]o~۲rƍT}$v)XJj1SiWwᵟ^] "6|_ڍië8"$,UJۏE)ƃk6o*o*Ÿ_bopymPʆ88b21[6 uѴu]ws2? &]$3m1;CCC -ty=1OS(ʮΡ[ endstream endobj 696 0 obj 511 endobj 697 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 695 0 R >> endobj 698 0 obj << /Length 699 0 R /Filter /FlateDecode >> stream xTKo0 WGn[-ڢ(2'1ة-w뿟WZ۰"#'FfkaZTcbq{~@ÊUz{BO ;/zk6!‚}Iا!J'c5JRp HpsvY.g.+[2V`N~͖Mht\Bu$նB~ED 3LCx)"IDa`FBqE~OTVk O@L!SfVu G ЎR*h[/y7'Tj_^J'"_ܞvzo$c!<~.:@8$\Z뤱{/i}z`Sd775 "ۺV2ۄ*AG'4s, ҁ2uuWM 'v=y65q':_Q =-w1?t~d:r3:JIU _, endstream endobj 699 0 obj 505 endobj 700 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 698 0 R >> endobj 701 0 obj << /Length 702 0 R /Filter /FlateDecode >> stream xUYs0~G J!dA8̴Ӑa2&`z|c ~oWnqKqpH d"8aa6@m[瘍 >pk?p ~86!!,g#x"&g\l IKuDnET .9q$r)"!WTJ=l. uZ J2۶uNh;7.'h3סJiMɴw!\ZDNՙlmDqB2[PļrG1Hv?`^ nFj\0SpD+;ԡ!l5}x<-Nr/)|fIആաMuG?vK,+f%ɤ_ucYډHػ |ݬ{uiY/=oSWxvnOvElmu`Z$ļX&^9)^b6/Z9r4#S).+gU{ endstream endobj 702 0 obj 627 endobj 703 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 701 0 R >> endobj 704 0 obj << /Length 705 0 R /Filter /FlateDecode >> stream xTn0+HW fD@Il %G.%=5q]> * ),:ۅ(̀R{Ɓ0+ +sca,q{~~H=!!Ň\Nً I9iR+.n/>֕/~y^W_U{yW9߉Vzcю;}_v1+n ܸA4\WRàCD=3 cޙcZHT8Aa")gpX;>A#@(/q 崨|9+ED:,J{&YL^eH脙t+SvWzTWO/.t*$a|6:X!Mz:vYohAt~OE;iU(sUHDb/b@SuS}cjcJ叢|;=43M1/(vly=1R(s] /TF endstream endobj 705 0 obj 506 endobj 706 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 704 0 R >> endobj 707 0 obj << /Length 708 0 R /Filter /FlateDecode >> stream xTn0+ΐH.)Л=$AزM4-]C-nOI$C7of$0`O=F`d QER w,VEtASe%y~yZ,f8H)Y`P&I,0ݖbSj&D^_C̓"_ޞ2H2B 7,͚C`N&6rpݨ_cWuj;JMm>gլS5HHb<0] ʁ22 ?uYuq'ǟQ 1Źvb&PgO endstream endobj 708 0 obj 505 endobj 709 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 707 0 R >> endobj 710 0 obj << /Length 711 0 R /Filter /FlateDecode >> stream xTMS0WR:Й@8d' G I{*Xy֓vA Y`F`h3(6@T1- Ѕ- ~\ |wQ1 ?TlK%b d"mD Njå Y"ӧΊ:Z|KjR,q_dŷC ܩA PˠGD lފ"%iDRw累X~CD)7~+W)?e:ÏK(0zZ.6e1K@LDiO7yտ<޲r]H|qޣ"_N&_t,#$d7r]y]b/ce,,VsN".jVfeTd1OVYnCyl+`rPd;pqOcؕ9~@!npq=Y endstream endobj 711 0 obj 482 endobj 712 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 710 0 R >> endobj 713 0 obj << /Length 714 0 R /Filter /FlateDecode >> stream xTMo@W1vfnJhzH!``M}w114&cΛ73FaіaZ@3HՇ(Q@ a # ;ح \5 :e49oJ*8_$@ژkQlÇaO+.*7/70}o,IYuM-kpF}_=uo([c!q%lj@̂I"Ob }G"fA*S9Y)|Oj렋 >dI] *Wd+.@6+l]]:2LhJuv B%ݦش5a5%LD仵=CNW0 "BZ;湣Kgn>BX氭-~hcOl>|݇œ"&1bҕjy'ѽbIg 4%ĸ0vè?u^O[V 0XQ_Ӧ endstream endobj 714 0 obj 509 endobj 715 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 713 0 R >> endobj 716 0 obj << /Length 717 0 R /Filter /FlateDecode >> stream xTn0+5;CR\|C-;l*6eGDEᙏ3fOߓhaM#F95(U@ a vo%.A\xt~%q=297u>K^@ $FZkmC-t d_O ZAE;kkMY[@a ܫ##Ӿ+jZDQUd:m>߭;a5 9$1Ά'TS5 Nk^7;]&mjWиX| JN~5oGйӑ$REʻzQP1})nk"L7[_n= $R&|Ű>xFH-SFZ}Ŵ> endobj 719 0 obj << /Length 720 0 R /Filter /FlateDecode >> stream xTMs0W챙iJ-)7( !a84&$JNm~=+1IDk{,vyHXlQ [W); eZ$.|SZVη]}@Լ'BDZFL~ٮH6č"B7+1dzv '1;.#"'6I_rkSq!&GD:4F8">RDbw.kx}t.ǹ5)=q<$K{ /gC6]38FhQgߣ{cش%hXGtV># }? endstream endobj 720 0 obj 554 endobj 721 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 719 0 R >> endobj 722 0 obj << /Length 723 0 R /Filter /FlateDecode >> stream xVKs0+xQڤLͤqCfb Ǹ$`NOMǬ}]Y<9N-"ESM9Mb=ccfml [c t0|q7Q~NoaX9·K%g"FPo8C@u}ˤlaO\^.DNXBRg ]U. )Q'Zt[֑ήTQ9ʖ{jڍQ/K?~-D]-z,69Թn Aj;v \ZN Zk[j:Q{4782kS,iˬ]?":NMqkE<#)IˣR1 ڨFUkWn) zR]d7}Z=g)!U{!T2ڊm@զs=D7yIx}Ǚ$QM2a#KjYm<и/>lhgc7W#uҦ%:*+Qڠ=<9fCnp ?{#x=2o@ƒwB+vCw endstream endobj 723 0 obj 771 endobj 724 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 722 0 R >> endobj 725 0 obj << /Length 726 0 R /Filter /FlateDecode >> stream xV;s0 +0ƃizgס4wP,E$GÀ4CsؖC/crp}`>hhEt 2H7JSXwsubsޯg8"8KPI-4|nVlae?tt_Ba'qSb]B1큹loVVXl! g. 8юf5ayxh3 ɪ;ضJ mZ6ꤹFqM<,!%AXB;&o$oB*f2,;kK̩9̏Iyqbtf+)^1[/^l>fڬ 9RXBJxyhLk51..Mhd:K\EJ\:{qTҚ}"3GvP&Aq]Fp%Zh0f$kFL-G~ز;3eO?fB̔xnU6Th\ 27{v?l;cf_oa,b]^() ݾ#v֘'Jmx<bZ+ I ;Gz-(6Q0&ٌ"@wxucptRpdV%*kҦY~.G)K6\ = poV^c3XtObYa˯X! E`,+($(@ b`|14 ٻ3'l/ C vvƄQ]H?y {cT& endstream endobj 726 0 obj 858 endobj 727 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 725 0 R >> endobj 728 0 obj << /Length 729 0 R /Filter /FlateDecode >> stream xVKo0 W"޺Wa5=%OߏCy4iwZEqa^ymX Q{q@}BEYot{|Gy!y}ʻI(,3o1FaXC0’4Mȇyf[j/%;pǤ#6NS#6B)Y ,هo'2;΋amKD9w|t)A j B7$RTBFhhL6x3:ߖ v )BK\=HU7"4ɐF N >',2$T/ۮؓG( ]$M'/kVW?l(E32BYQ,FV,{`T{]8_`7z5Vo:,C($ a}{袶{qp2[a2v%N; 2'sSfm=.`GqyEӈ4st}nݎT-n5uNvvʼn;8b5“C@ T}Q XB. CN|||_(#ldɇ1n4 &)-q56D9ðqN'Mcϲ.  k%ngʴ88-[bc]SFa a_H'y5Y@o ٝU]035bQeL"L&%q*V%H!rLwVg&#[;w€>q #9[FI|vQ_V endstream endobj 729 0 obj 855 endobj 730 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 728 0 R >> endobj 731 0 obj << /Length 732 0 R /Filter /FlateDecode >> stream xTMS0Wܠ:&(g,{J8 iOcz'=3 ,v shR!JPECO8 ~!\>X6v;"ܚ-[p\_V( ({a I?v@" H!}&t-PpR3!.໫P4Ups ~MUΝC2&*LȓvȕRQM}(7>R :xK ,&)8Z6kWZLbhijpOb;ޥ*Ċ[P:$Al{ Bq)hm&x=b|r~?w_0o|:Ry$ś; endstream endobj 732 0 obj 479 endobj 733 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 731 0 R >> endobj 734 0 obj << /Length 735 0 R /Filter /FlateDecode >> stream xTn0+h5\J"[_)Л9Aش"=ڴ__R;rl& #9;܇{ 8H!CF[36؏-\6@\8t~r=27 ! >΃pzomWZk PL| ףOc]VYn ̿_h7lGf sG!:JjD1ΐl#)֙c*Eq-DLz=/!A#wSՅ~cp[[c+HJm֬i>fR~/$8]ˬc+T]}Mnȶe \D,D[CNpDEYBgO-:6=+zo_CXb\?nle+BQ.՝ɦ6I4b1A&YA"3n\h+N_.lpw) i=C :zbN7a)_.Ɇʮ/7S endstream endobj 735 0 obj 535 endobj 736 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 734 0 R >> endobj 737 0 obj << /Length 738 0 R /Filter /FlateDecode >> stream xUn0+5;\зn)K@IP6m DK;.v{j"&y3=xB-`ujC(@CpńOpe@ݎ}?f l&;ٻ#tM^1#"!l aUHk"&vn.>$67O9\vlj&w}Z \h%ȲvBV|XBa HBB5$P#Ԃf>t[IsL`KDNaAkƅfZљBn|3yZhN:82f֚582M ҅-"rGrȂ pr_61G40R")Ն?s [g 9j]P˂8kDJꥴ'3۵yd '(b\'JW>l.%*Hp~:*pL%m-9Z=-qibkIŹY?3ir[=z8ޜw>8ՄF4RW3ȵK^f6_Q1u+Y~92?:3ȢKuª~ endstream endobj 738 0 obj 587 endobj 739 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 737 0 R >> endobj 740 0 obj << /Length 741 0 R /Filter /FlateDecode >> stream xTKs0WPWo[_Lo2l鿯dˀ О%goWDa0bC"pz1Iʕ;+!|VՇs~߉#_ͭG=32="oŠ|Hɻk !]Zh ܆Cs ׍[E骫[H Zvklkж2-SGGj|]*ZDQed2i֥[.ۮ:yN3|(|@dgʤߜc0/97|f&w5dh9Q3[7y$;R ZUL{ەUQ 5Id䯁0\7^Jdl1eNƗNk&PZ^^úm?ND#mS^-cʥBSsSZ?]\Hl6H-hmPxڋ)NP(/1?Ȝo&0ɠZ>d_Ypbx endstream endobj 741 0 obj 510 endobj 742 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 740 0 R >> endobj 743 0 obj << /Length 744 0 R /Filter /FlateDecode >> stream xUr0+0ST=ҙhtpA ;ݴ_C8@jb3HHG>:z`slp cb ,>H  Xk `?vơq:w=| dSpwoЍ#x r6X .x D@0,!A$圧11EayBVW7\Wy!˓2B_nMPKPS@Jw(1u;d&cm cQ8gBH% cbvq߳c(5LR4k"ZI ^jVSh\lBQS6ijW9`DZu$qO-R纣3>#bi2Wg\W*$lPBP)vɷjWz%F)Gqrixc|5tX)"̎ܭAK[jBJ0v),f.2)?j`X[m.,2)F3ßU#o]S!l]뗙F#ۊ-0AI@&PЅ{ :[ */]MYY?Ѽ} =Cj\Τ,<߽mQˍ3xd.L)BSF!m`c g8"V'X (=9 /쪽)E endstream endobj 744 0 obj 677 endobj 745 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 743 0 R >> endobj 746 0 obj << /Length 747 0 R /Filter /FlateDecode >> stream xTn0+H6M CL;"menOM$AFO= 2=  )Dqq{g8x =0㱛C8~<-s 31d}x a>u 6DRp H XjuY N$X.n;?wZL-:p\y_+*D0Am(W%5D 8Ň>FRrPBCBtWU;[CmU-s@emQ!~12.J(IIToWnnw["vKY^,/<ɘGHީCզ-ks}DG(otP,iI?yWΪ|zxnA!!c٦7oB`Qդ|v#> endobj 749 0 obj << /Length 750 0 R /Filter /FlateDecode >> stream xUKs0+h$$ʭtLq )HxNOMA`s%fʻdb ~/"a$@44^ žϱQvx\{wsk#͍A ]ņa}Zy.C Vm@IcIC|EaUpيLR-{_W{l:]PĨk;CQl9Bfkl c ie(1&&Ye赝1ȱxAR{Mi|@O)OF@4\)H5l.`kCx}(w楛4cFM&89%(" J;~VU GŦ" ᙫᢔb^~]C`buٶڅ`!d(Jb28Zpv{[ r%- *b=RHD|%`/PSԶANu%`u\6%P" UTuGn=~Mˑu?sVLNt}4tU R6K4 VfӨm+t4>3?1”Z2wlL4͙tuɌ)V6ɩrdݗa\I51R<*XTr=3*U*@WpdJ `>G|zJ YZ`b* o> endobj 752 0 obj << /Length 753 0 R /Filter /FlateDecode >> stream xVMs Wpg ۷~x8B&J@B%76ǰO ^& ؕγ0 pc$5 uT/(ZauPy? ͹h*q#:7Dл i|F`Yi= qq .Շu +&W ۉb|yߝٺ޴CC/mP؂:.  IP1B5dFժeD+3o< vr3t= |C7c{~P  ۪ KAYMAAe H$iZSa7!W͞D*H *UO<5ơ,D&7dXqQlY,VE%˿']z˲5!?L<&RcD^tZuv!)Z jN/A "]ċu/IUƹr"@`nyr`ֹ76}m5e,)jˉ;af}(9! 5x/GVQPo)nI "Z&mpOCfZ/,T4|lC[Ŗkh['G*f -xGv/r\ :{6$[3}wD2Skv4<:uo 6N޼NhE#hAKS mU,C^Rۯ\S&Ff|[îITifߒWύ`=!_|(Vw sUu{yc{mp"up2p8d|`vVU}i伂 endstream endobj 753 0 obj 832 endobj 754 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 752 0 R >> endobj 755 0 obj << /Length 756 0 R /Filter /FlateDecode >> stream xUMs0+J|W: 3=$9P[b\'1nOMbyey(=nb=6C!P5 nqStWdخ5~xC=Xti^]K'BMiCX{bM!^HJ"™t>ڨ'7{0i߼ [Nv^nY_A[HT`Dؾ:v^*,(7ƬCf}]9o>#rDjCXH._~ߕFAu;l+H`VPeI4˙E6ez@B{>|WeKg)E"iHʩe=]fm|_[M8#%$|)m:Z#66.ĨFzO\å&bQĠ-j]&0Hr킺ڨwŸ'ЅM=1IEun1/Ȧu<4 M+Φd$qGfX EeZJㅉ=nS zb_DQ(h >t^Uw endstream endobj 756 0 obj 602 endobj 757 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 755 0 R >> endobj 758 0 obj << /Length 759 0 R /Filter /FlateDecode >> stream xUKs0WfUĭt 39,S[&)w%?0ў >kWo?^["s^AA|`.µmLco>mmg v(|s`Z{g:(O3ÝlyeRy82x}umJr]`:;ڭ`vjKZp hz,;8%N RlLkLR&Z8 wr>:K&$&=RSs΃{~j[h ̒LAcm ȗADž*KJx,=%zzWoʤlMB 0RMpU|d"9v 6SX΄I⇮ڙU/f4Ԛ(Vo{ פgK;Mmp8 _8":I񍝰V{ `Ȥǜ]ƶP19]U\z,5!FJIu`.f1aGsśY5 endstream endobj 759 0 obj 642 endobj 760 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 758 0 R >> endobj 761 0 obj << /Length 762 0 R /Filter /FlateDecode >> stream xUKs0W1$J[_7rp@L(wS C+}7gsc/H )̈́Cp@ Ix@M6poi HpvVs\xgD]qCX[Bí!\9~+gR# LsK/ҋ2t1y5C溮k{ٶ.4I< C.iQ^ϯ itw"\:FNNmTgB9İmjoGk3!8ycU' endstream endobj 762 0 obj 610 endobj 763 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 761 0 R >> endobj 764 0 obj << /Length 765 0 R /Filter /FlateDecode >> stream xUMs0+>@[iono | lta!z9 &"!OMa8I8w1nsLlf&/=Gu˖SβT-+02Фo!Y[u80$X!;U`f2V۬V放1Ffq5EQΈd05~Ƙ%̾T`(*H2|_2`RH|Jb@$"}QNCjPH""7kSj5rƛvG'ByHRkfɏjL,T„DHiSܮg2>ZټSJoR|4 Hždz^;Kb(b>_ #V roQl\Au1m6tw:d#˶"{D?#mYe;x.L tqT3Ԯ2Y~z,c+km^Mx|æ IP~ZXUw` endstream endobj 765 0 obj 610 endobj 766 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 764 0 R >> endobj 767 0 obj << /Length 768 0 R /Filter /FlateDecode >> stream xUMo0+渑mJEE!ʁl@Zlfϯm0UMZ7ǀh8P419ba, 5oLlŸ)-Hy_}I)dmpFxSJߪU؁O U޴8BRw/Є!0c $z LTyQ2fP yX> endobj 770 0 obj << /Length 771 0 R /Filter /FlateDecode >> stream xTMo0 WF}YVn؀A hC*XNmg$qlaI|"D1AiI<ŀ!PAtpnp{b[[?c76v 6@;fx a|(B:HL"R!"i13̔2&Urrs|/;]ܣH]B"R5Á!QkL5"VU+lvuh2@0(wO0{{(ޚ2!#7SXC'"O$aT weZvT=Őhiu鮫6bwK"kwPUyNU*5 #rg^Ӿ("/B7OLtOC"Nx0+Lua}at__͙+_#,[&E[=md-(Le>uF|6)̲jPo^ &JHWԔPFDJg?{bض=NrVBDGM b~eUP endstream endobj 771 0 obj 538 endobj 772 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 770 0 R >> endobj 773 0 obj << /Length 774 0 R /Filter /FlateDecode >> stream xUn0+hXzPE=0" 8dZ#1]aKD2Lr\g6"s1`1?#xѮA6ZumӮm u2wCqvNssDʍ;n}`Z#>)e !qydqWeY%n:#?o`.l:zZ=E$j sR,[B&t}J&` 3ƕ\M'a9^ǘq.%\תы*R/R:nEA=hk)Ձ$a> endobj 776 0 obj << /Length 777 0 R /Filter /FlateDecode >> stream xU]o0}Wܷ`ۦ0*R" ނik>BlOk!p1x_F{0B, (7_Q7bٌ>Ӿm!?pwl6]xݎwōxn`^Z_l f=4=4l>>pJ$:kƔRf r}Ofzu,"pи3)ͱdB?™Et$DŽs9u1U%9Je*\B(HC ~ASl$ ClgN$Q> endobj 779 0 obj << /Length 780 0 R /Filter /FlateDecode >> stream xUn0+hX>$QE=0" 8dZ#1]Gl&a#r8,=ȘCVx@r!ĂOxpE׸f,}ڷ-DN(|!kw}W(,/6F!> x@) DD=]NܮMVkkGH~xߒ ~ f=4H6ࠏNDgkS%1Tt;AFl~ʖ6ԉsBd?9C 1G'RL8.;Je*\B(C ~/흻HIINf C|BFC(CuS`f1B])Cv)?uL=0A'1 #?%E<p,Ui3UU쵃B?P"۔_UzqNqsFiПmkD0kJUKμw{ yQka!^7]nnXXckktcUZj82ӂGZtB9o}麆"B lz^TF׹6N-OᗞϷkrPBUJ]=Jۑ9I."Gg/7Vս endstream endobj 780 0 obj 638 endobj 781 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 779 0 R >> endobj 782 0 obj << /Length 783 0 R /Filter /FlateDecode >> stream xUn0+hXDɷm P ebk1]qܞHIpzP\#cY=!]\ngv:9zƣݻGtx[K7x#"]q$ާd,/HJYCD|CRE Uid-9د;.ٺOBCS"YT`L){i Ii~?4:'TN8Qhə#ďpe1\gSU v J[̚E@+X'e|e4wpI#) I#%nvn*=ѐ2G=1uY.zgо})G*H &a$X8\Փns)mʖxP[(UQDXwjq򫪲RoAι3Ng 'Fģņq4cw}tG莾w`9sN? 4 d{mG5FgGvh-6ijpY#̛tyExQe sUoU f[]@:8?_z.AKI Z(uU?h_C|Qߎ!B%燉?& 3 endstream endobj 783 0 obj 641 endobj 784 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 782 0 R >> endobj 785 0 obj << /Length 786 0 R /Filter /FlateDecode >> stream xTn0+.I[6zs#8 Dc)M],+&a #jvvL}%,rbe! KMpn! . ㎧z3vka_`kxeMxæ=!!,ٗ} ǽ*ZjD84ۋ4CY \*[?ط(_%wZ?Ywu M:Z="֚֐!<*ܗz:ơR(2y# 4qvlwXpg&~|;'+XI *-=?,rcL6nMd/poFV]g<ڒZ> endobj 788 0 obj << /Length 789 0 R /Filter /FlateDecode >> stream xU[o0~W }۴uUEC[M8 @bd{Z Qq=@ 𘢬 N !`\4`Qt=k٠}5x~{λ%*7@kS}  HPCQR$/Eݤݴ2kJ֗(}Iezo]Pk&ha溳iU@j z-_>+S4ͺPFpBH^;x3自2QוB]4UlƜ)FږJxewtնmr 8Q4Uz]TrpprQR,$qquWtf+)!Za?>:S֜չPS'\dJ4NړĬdNNh|e.͋WE=QmN"TL;ˬ !ԟѱG%T+e.H 2ۨJ/bwl{f'YÒM[_9{8ޙVsrJY5N^ ]}ibO#tpFGVTM.JmF :W+tFȖXベlg^Ù73axdNߖܘ=Ir^|cVx endstream endobj 789 0 obj 661 endobj 790 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 788 0 R >> endobj 791 0 obj << /Length 792 0 R /Filter /FlateDecode >> stream xT]o }W@6mHQ=mRSMCK1NmGSI^ˠcr;}2ҜuACXDp¾@Ì]3l'q+6\O"Q"rCؐO p)!$듴"KD&h* $$mU{< W@|I.%p*Xh14j>8RP#?Uy Ywf[^bw=!t!3m#IMg"q%jL0?l l*nUA_`E7#\p#a80 }u}u0O0Ficb3`+fy<LH!},7ܺzL慳/XMkDViC%ӈ3D!f&ևUPo- "> endobj 794 0 obj << /Length 795 0 R /Filter /FlateDecode >> stream xT]o0}Ckc;oNCLTSF|$Omat:(!]1PDnACn]= & udi慳/5e"LkViC#riې z @iC[_,<*^F8!?c؝W8&%T!Ճ)'SY ?mi endstream endobj 795 0 obj 499 endobj 796 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 794 0 R >> endobj 797 0 obj << /Length 798 0 R /Filter /FlateDecode >> stream xTn0+pEZ)ڃ#*Z TmX2}I-vjNIHA$9ۛGEX}h"Bb ɸp+⁰w{~F7]x\ߨU ^E#G]>чK. W$Lp4/lUܹKW@=YƿdS=5%4n=?82+1GADQLV=Orqe3NScU,)buTO9Lwr J]f/2[a9O&:bD#8Э֫Wn|πy˜ŏaҭg@B1qգi eXHc/FlZ:kIHiZ϶ʶ&p '$'Dg ]هw[WAN&p_JHwB1ݣ}7]3",FRd+|cVL endstream endobj 798 0 obj 496 endobj 799 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 797 0 R >> endobj 800 0 obj << /Length 801 0 R /Filter /FlateDecode >> stream xTn w,B/`]6UiWXa⇪}Iܮˠcq&9d11r a ;ݏ8b߉%G7t+$o*7wB=Q+"*DdR@Bp}慩үS:W0]![p*Jh5j#?8R#UyP#,;Sמ'>lz!:J 3{FQ(Ys,)mȳU&svSA`.ň@O;6!F!8QU~A?ØjhO? wg'2rֳ`R8V^8Yђ2Dhs94 Q}Hy4uS ;נ$::GgD'qS 쓻yT!MF${Y G` endstream endobj 801 0 obj 500 endobj 802 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 800 0 R >> endobj 803 0 obj << /Length 804 0 R /Filter /FlateDecode >> stream xUM0WqWflqR!M֐&]7e6IU;~7G;rk(H<8 ,l Ȫ݇slv^!|-:g>%{#|CXzc/ziOTp g{kxZmd]ȷ>Gr^YʿdU=$Jhr\D;}80$V֡Fv`f2ԋV0gCa[mP;HNS2ʠl=.:: j$Ϲf`3R H$( XXOcyrz3qblyg˫RS Hjhߊ\0$?y65zt EJ|($.=bT3rI;,3}wdt2ctV(N,l?D @cvr|d&@blA!F3]Ba -$fO^)XwܶJ$l+:5r?$G k(+{]/C Ic~9g._EQ(܋ ? ~ endstream endobj 804 0 obj 608 endobj 805 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 803 0 R >> endobj 806 0 obj << /Length 807 0 R /Filter /FlateDecode >> stream xTMO0WUKVDEw7*q8_;fYҞ8xޛ<%08) /t QwV8LSa_0w5J\# C%I:wU2??Ulk|@勴\$"4ćAVIV7w..o~&߳_N';oklW"R-ӇCBekD4^wT]vPB`QL&\@cgI'Lhuǂ1uh r[%;WyW/\nᾪ IQ zv;{)1J2G}ʭ'G@$iyږ5 ҐT cT(r?NӚP}>MLԁ2"Eٺ0jlfm?Ɩ dtvE,NTq?İp_5 EGJf`U endstream endobj 807 0 obj 491 endobj 808 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 806 0 R >> endobj 809 0 obj << /Length 810 0 R /Filter /FlateDecode >> stream xUn0+Vh!%jɭE=0" 8dYJ6[D2Lq7ѳE{e/`sQ5jah, DH_[-i!|58՚$|W!l/E#C8㈔a0 EUখq%,|mY&e=L<ҴbD^xN9ҢD;jҎLQSsgFmMh 3B]u_ZY2MK p[竤B.LI%&PBQmh`6K'xH\.RJ1K]`3l9{ Ay"5< QU2oOmnq!v2ʈ("nv"BLlu=ýLpz}t8s%U'mig$X廨r_i+ȣlV^"`T$Fl/HrNFj Ï()fO1c/FG3*?|PxcVhq endstream endobj 810 0 obj 612 endobj 811 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 809 0 R >> endobj 812 0 obj << /Length 813 0 R /Filter /FlateDecode >> stream xUK0+DjR+Ef"$i_G4I{.D187vCIu=0v`oZlj3vcar:O]܅ӄ(|S!O'j .s! b8\Uon*Ӫ>A ){cKaZB<Á!S߀!"򖚴%vxsEFjh} "8eΘ?vp9._t *VVj-N] uBݖe٨tĎ<ˎ߬pPz[fG63lPHa豠\C" /j5̧ρrFmjKU]-% DF<۽VV B,"r^[QFnWh#Av:f) 0핸g.kp7RmqH`07rtU$kabMm\djՉsi EV^JeJOY mca>%6vl+}O(M??%s E ]> endobj 815 0 obj << /Type /Action /S /GoTo /D [655 0 R /XYZ 72.0 720.0 null] >> endobj 816 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 236.21 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 815 0 R /H /I >> endobj 817 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 815 0 R /H /I >> endobj 818 0 obj << /Type /Action /S /GoTo /D [658 0 R /XYZ 72.0 720.0 null] >> endobj 819 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 243.98 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 820 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 818 0 R /H /I >> endobj 821 0 obj << /Type /Action /S /GoTo /D [661 0 R /XYZ 72.0 720.0 null] >> endobj 822 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 245.11 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 823 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 821 0 R /H /I >> endobj 824 0 obj << /Type /Action /S /GoTo /D [664 0 R /XYZ 72.0 720.0 null] >> endobj 825 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 216.78 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 826 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 824 0 R /H /I >> endobj 827 0 obj << /Type /Action /S /GoTo /D [667 0 R /XYZ 72.0 720.0 null] >> endobj 828 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 275.1 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 829 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 827 0 R /H /I >> endobj 830 0 obj << /Type /Action /S /GoTo /D [670 0 R /XYZ 72.0 720.0 null] >> endobj 831 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 220.66 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 832 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 830 0 R /H /I >> endobj 833 0 obj << /Type /Action /S /GoTo /D [673 0 R /XYZ 72.0 720.0 null] >> endobj 834 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 235.11 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 833 0 R /H /I >> endobj 835 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 833 0 R /H /I >> endobj 836 0 obj << /Type /Action /S /GoTo /D [676 0 R /XYZ 72.0 720.0 null] >> endobj 837 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 235.11 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 838 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 836 0 R /H /I >> endobj 839 0 obj << /Type /Action /S /GoTo /D [679 0 R /XYZ 72.0 720.0 null] >> endobj 840 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 230.67 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 839 0 R /H /I >> endobj 841 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 839 0 R /H /I >> endobj 842 0 obj << /Type /Action /S /GoTo /D [682 0 R /XYZ 72.0 720.0 null] >> endobj 843 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 230.67 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 844 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 842 0 R /H /I >> endobj 845 0 obj << /Type /Action /S /GoTo /D [685 0 R /XYZ 72.0 720.0 null] >> endobj 846 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 228.45 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 847 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 845 0 R /H /I >> endobj 848 0 obj << /Type /Action /S /GoTo /D [688 0 R /XYZ 72.0 720.0 null] >> endobj 849 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 230.67 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 850 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 848 0 R /H /I >> endobj 851 0 obj << /Type /Action /S /GoTo /D [691 0 R /XYZ 72.0 720.0 null] >> endobj 852 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 277.32 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 853 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 851 0 R /H /I >> endobj 854 0 obj << /Type /Action /S /GoTo /D [694 0 R /XYZ 72.0 720.0 null] >> endobj 855 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 228.99 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 856 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 854 0 R /H /I >> endobj 857 0 obj << /Type /Action /S /GoTo /D [697 0 R /XYZ 72.0 720.0 null] >> endobj 858 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 216.78 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 859 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 857 0 R /H /I >> endobj 860 0 obj << /Type /Action /S /GoTo /D [700 0 R /XYZ 72.0 720.0 null] >> endobj 861 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 220.11 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 862 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 860 0 R /H /I >> endobj 863 0 obj << /Type /Action /S /GoTo /D [703 0 R /XYZ 72.0 720.0 null] >> endobj 864 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 222.33 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 865 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 863 0 R /H /I >> endobj 866 0 obj << /Type /Action /S /GoTo /D [706 0 R /XYZ 72.0 720.0 null] >> endobj 867 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 214.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 868 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 866 0 R /H /I >> endobj 869 0 obj << /Type /Action /S /GoTo /D [709 0 R /XYZ 72.0 720.0 null] >> endobj 870 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 216.78 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 871 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 869 0 R /H /I >> endobj 872 0 obj << /Type /Action /S /GoTo /D [712 0 R /XYZ 72.0 720.0 null] >> endobj 873 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 193.45 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 872 0 R /H /I >> endobj 874 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 872 0 R /H /I >> endobj 875 0 obj << /Type /Action /S /GoTo /D [715 0 R /XYZ 72.0 720.0 null] >> endobj 876 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 215.66 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 877 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 875 0 R /H /I >> endobj 878 0 obj << /Type /Action /S /GoTo /D [718 0 R /XYZ 72.0 720.0 null] >> endobj 879 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 215.66 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 880 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 878 0 R /H /I >> endobj 881 0 obj << /Type /Action /S /GoTo /D [721 0 R /XYZ 72.0 720.0 null] >> endobj 882 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 222.88 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 881 0 R /H /I >> endobj 883 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 881 0 R /H /I >> endobj 884 0 obj << /Type /Action /S /GoTo /D [724 0 R /XYZ 72.0 720.0 null] >> endobj 885 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 205.66 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 886 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 884 0 R /H /I >> endobj 887 0 obj << /Type /Action /S /GoTo /D [727 0 R /XYZ 72.0 720.0 null] >> endobj 888 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 226.2 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 889 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 887 0 R /H /I >> endobj 890 0 obj << /Type /Action /S /GoTo /D [730 0 R /XYZ 72.0 720.0 null] >> endobj 891 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 213.99 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 892 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 890 0 R /H /I >> endobj 893 0 obj << /Type /Action /S /GoTo /D [733 0 R /XYZ 72.0 720.0 null] >> endobj 894 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 195.67 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 895 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 893 0 R /H /I >> endobj 896 0 obj << /Type /Action /S /GoTo /D [736 0 R /XYZ 72.0 720.0 null] >> endobj 897 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 216.22 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 898 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 896 0 R /H /I >> endobj 899 0 obj << /Type /Action /S /GoTo /D [739 0 R /XYZ 72.0 720.0 null] >> endobj 900 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 223.44 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 899 0 R /H /I >> endobj 901 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 899 0 R /H /I >> endobj 902 0 obj << /Type /Action /S /GoTo /D [742 0 R /XYZ 72.0 720.0 null] >> endobj 903 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 241.22 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 902 0 R /H /I >> endobj 904 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 902 0 R /H /I >> endobj 905 0 obj << /Type /Action /S /GoTo /D [745 0 R /XYZ 72.0 720.0 null] >> endobj 906 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 227.33 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 907 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 905 0 R /H /I >> endobj 908 0 obj << /Type /Action /S /GoTo /D [748 0 R /XYZ 72.0 720.0 null] >> endobj 909 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 226.77 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 910 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 908 0 R /H /I >> endobj 911 0 obj << /Type /Action /S /GoTo /D [751 0 R /XYZ 72.0 720.0 null] >> endobj 912 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 208.44 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 913 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 911 0 R /H /I >> endobj 914 0 obj << /Type /Action /S /GoTo /D [754 0 R /XYZ 72.0 720.0 null] >> endobj 915 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 221.22 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 916 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 914 0 R /H /I >> endobj 917 0 obj << /Type /Action /S /GoTo /D [757 0 R /XYZ 72.0 720.0 null] >> endobj 918 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 217.89 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 917 0 R /H /I >> endobj 919 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 917 0 R /H /I >> endobj 920 0 obj << /Type /Action /S /GoTo /D [760 0 R /XYZ 72.0 720.0 null] >> endobj 921 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 232.89 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 922 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 920 0 R /H /I >> endobj 923 0 obj << /Type /Action /S /GoTo /D [763 0 R /XYZ 72.0 720.0 null] >> endobj 924 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 219.56 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 925 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 923 0 R /H /I >> endobj 926 0 obj << /Type /Action /S /GoTo /D [766 0 R /XYZ 72.0 720.0 null] >> endobj 927 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 226.22 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 926 0 R /H /I >> endobj 928 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 926 0 R /H /I >> endobj 929 0 obj << /Type /Action /S /GoTo /D [769 0 R /XYZ 72.0 720.0 null] >> endobj 930 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 253.5 218.864 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 931 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 929 0 R /H /I >> endobj 932 0 obj << /Type /Action /S /GoTo /D [772 0 R /XYZ 72.0 720.0 null] >> endobj 933 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 196.22 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 934 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 932 0 R /H /I >> endobj 935 0 obj << /Type /Action /S /GoTo /D [775 0 R /XYZ 72.0 720.0 null] >> endobj 936 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 240.66 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 937 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 935 0 R /H /I >> endobj 938 0 obj << /Type /Action /S /GoTo /D [778 0 R /XYZ 72.0 720.0 null] >> endobj 939 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 237.88 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 940 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 938 0 R /H /I >> endobj 941 0 obj << /Type /Action /S /GoTo /D [781 0 R /XYZ 72.0 720.0 null] >> endobj 942 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 232.88 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 941 0 R /H /I >> endobj 943 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 941 0 R /H /I >> endobj 944 0 obj << /Type /Action /S /GoTo /D [784 0 R /XYZ 72.0 720.0 null] >> endobj 945 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 237.88 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 946 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 944 0 R /H /I >> endobj 947 0 obj << /Type /Action /S /GoTo /D [787 0 R /XYZ 72.0 720.0 null] >> endobj 948 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 252.32 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 949 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 947 0 R /H /I >> endobj 950 0 obj << /Type /Action /S /GoTo /D [790 0 R /XYZ 72.0 720.0 null] >> endobj 951 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 225.1 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 952 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 950 0 R /H /I >> endobj 953 0 obj << /Type /Action /S /GoTo /D [793 0 R /XYZ 72.0 720.0 null] >> endobj 954 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 252.33 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 953 0 R /H /I >> endobj 955 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 953 0 R /H /I >> endobj 956 0 obj << /Type /Action /S /GoTo /D [796 0 R /XYZ 72.0 720.0 null] >> endobj 957 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 249.55 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 958 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 145.5 539.998 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 956 0 R /H /I >> endobj 959 0 obj << /Type /Action /S /GoTo /D [799 0 R /XYZ 72.0 720.0 null] >> endobj 960 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 244.55 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 961 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 959 0 R /H /I >> endobj 962 0 obj << /Type /Action /S /GoTo /D [802 0 R /XYZ 72.0 720.0 null] >> endobj 963 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.55 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 962 0 R /H /I >> endobj 964 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 121.5 539.998 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 962 0 R /H /I >> endobj 965 0 obj << /Type /Action /S /GoTo /D [805 0 R /XYZ 72.0 720.0 null] >> endobj 966 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 206.22 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 965 0 R /H /I >> endobj 967 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 965 0 R /H /I >> endobj 968 0 obj << /Type /Action /S /GoTo /D [808 0 R /XYZ 72.0 720.0 null] >> endobj 969 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 236.78 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 968 0 R /H /I >> endobj 970 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 968 0 R /H /I >> endobj 971 0 obj << /Type /Action /S /GoTo /D [811 0 R /XYZ 72.0 720.0 null] >> endobj 972 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 245.66 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 971 0 R /H /I >> endobj 973 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 971 0 R /H /I >> endobj 974 0 obj << /Type /Action /S /GoTo /D [814 0 R /XYZ 72.0 720.0 null] >> endobj 975 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 242.88 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 976 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 974 0 R /H /I >> endobj 977 0 obj << /Length 978 0 R /Filter /FlateDecode >> stream xM$u9~EڹZCGXv܈;"q Dh0EW濿EdW5N># [~SWʛ߾Vތ&K7%v~ӣ׿;v/߿o_}x_>_t}?~}#Qw_ޔ8Qʛ6o?/w|sO?|ßW(oJߨ_:ߤ_߼_,7,oso?!qH%^*qxB)1z`- X ` X6l"N]7'ijH%Kq` ` QA0* q``````&Mv"Ep!SN"Dp<@0`Y@0+f"""""""۵qQY>y~zw?8F<>aH}<:T/ϟiR7'&XC,+?ŲE,kZŲV LLLLldȲ8F IzT՝%T7r"%qebX!Q2XF˨bU,eeeeeeee#F,;Yvdr A,'YN\dr<2C,e"Y2Xfˬddddddq1l3rrn30X-&^q>ߨJݨRoTN{iBZ,E,bw'˽=ueeeeeee#Fvh7AuzI}QQ=>ߨJT"E,X r/V@]rVH-{BjReeeeeee#F,Yvdr A,'YNdr˽w!X X ro_@]r_HMAAAIII/0r!C R9||å$uPݩ^R/@R7 I5YNd9r"EK,b7d.b7d˽!u˽!#5YYYY&Y&Y&Y&Y6ldȲe'N,Yd9r$E,XHX roH-{C*{CFj LLLldȲe'N,;Yd9r$I,Y.\b7d˽!u˽!#X roHMAAAII-rǙR=Sx7p!g^?r~xǫި7'{~.8$&Mv"E!CN"Dpv&n icn\@Ӿ?mK܎AӮXCCCSSS6l"D`.C"8Ep%K~Z৅qOc q7 iv,!!!)))/xK9/WxyoΡ8~>&z|S9/RR՝%y uzJ=r$E,Y.XC,!e-bYX*ebY+YYYY&Y&Y&Y6ldȲe'N,Yd9r$I,Y.C,82XF(bE,eTJAAAIIII,Y6dɲ A,YNd9r"%yebX!Y2XfˬbU,eeeeeeeǨ8&:8o?[8T)PFz!:r垡H-{u=CZ, Ej3222222ɲe#˗7ߨ/oDQ7/oDQ'C7ߨjdr82C,e"Q2XF˨ddddddddȲe#N,;Yd9r$I,Y.\bg(RebXf,bE,eVJAAAAII.>S+gaʟ{9Ly~9LQ7/)7zHrrrer0er0F-aʍ,,,,,,,Y6|9LQ/_Snԍ)aʍ:Rܨjdr0F-au0F-au0FMAAAIIII,Y6dɲ A,YNd9r"%aʍZ,/ÔX^)7j S^X^)7j LL|9LyKaJ9^9/q/O(SFJM5L5L5L5M5M5M 1/%L+G~?2 zxߞIЍ<,//y|RLu"$FNIЍT9^'AT6Smz_&A7[(LnIet#OMu2eT9^'AT9^'A7rRNnLj3fTvS:Lu4iT.S]H: uz^H: uz^I: jjjjjjeҞLkͯg}yaW{jy|R~<-?)˻妺Lu"ɔd OMT&K^Iur2Lj;UZXayX-_jyT.S]z夺?TrRL9VheM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LueIuT/SN)'˔jjjjjj'U)(_? ;/ )G4i t#˻*ЍY>)_LuuFNU9^Wnz]z=z]jjjjjjjj3fU*Ѝ<,//@7f t#OMu2eT@7rRRI t#'*ЍTTTTTTT6SmLj7nTS:Mu4eT^Wnz]z=/z]uuFnaaaiiiUd^9l??߿ݏyHow1ٳ=^A[(?Q,7444fT6SM0aTNS:Mu2ED\Iu+y!}*.夺ŕ>rS S S SMSMSMSMSmLj7nTS:Lu4iT.RGRN\IuK9s%ΥTTTTTTTCU|rm_9:ï=p&S|d(oOw?ayT.S]oTm2RݷPN6+d(70004444fTw{&w?i|OyX-_)o2eT_Tm2MrRݷH^Iu&C6SmLj7nTS:Mu4eT.RݷPN6 d('} 夺oTTTTTT۳d4^91q9ގW|+vXwZ,byZnTNSLu"=TJB{rE9ɕTrS S S SMSMSMSMSmLj7nTS:Lu4iT.Rݓ+IuO('=TJJ{rE6SmLj7nTS:Mu4eT.Rݓ+IuO$/'W\QN{rECUdr5_9Oy['O8-Jay|Q~|P,OS:Mu2eTA }Tmt꾍rRݷQnaaaiiiTS8_Z[W˛Q,O<,7iT.RݷQN6: ('}Tmtjjjjjjjj3fTvS:Lu0aTNS]Lu꾍rRݷQN6:IuF'y%}z9k!/<ᮿ9w cnW˛}9U2EsIsiNS:Mu2eT/TIrNՍ圪;9^ΩWRSu'70004444fTvSMu0aTNSLu"8HrN՝T/T ^Ω圪;9^Ω6SmLj7nTS:Mu4eT.RSu''9U7Bsz9NNsIUj>\o8:4>jOpK~Sw;IN6SMj7aTNS:Mu2eT夺$/('սF9}7M5L5L5L5M5M5Mj3v3Z,byZ>(aNS]LuwTT夺$(70004444fTvSMu0aTNSLu"սF9}7IuQN{MJ{ߍrS S S S SMSMS‡dX_>Qy= GDO8Z/M7'Ki|i<,7aTNS]LurRփT&-Z ?-'ZM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LujAQH5 F!ըTjTS S S SMSMSMSmLj3nTS:Lu4iT.S]AyjRBYH5 f%լTTTTTTmqPڟ̹^#s2纑7'9׍<-_\7TNS:Mu2E9׍Ts9^\7rRι^+^\7rS S S S SMSMSMSmLj7nTS:Lu4iT.S]zsI:z=/zsI:纑uu#7000444fT6SM0aTNS:Mu2E9׍TsB9׍TsJ9׍TTTTTTmqP:̹^~sow??=緓s>yR|Q~~P,rS:Mu2Eh1Iu-&y!}夺>ZrS S S SMSMSMSMSmLj7nTS:Lu4iT.RTb>ZLBh1Iu-F9$S S S SMSMSMSmLj7nTS:Lu4iT.S]TbRGQNh1Iu-F^NKOL/?1ӻ{0](?=QY>)Q<-_(Fj7aTNS:Mu2eTA zj-Z BjZ+jaaaiiiT6SmMj7aTNS:Mu2eT 8H5RBQH5 F!ըTjjjjjjjj3fTvS:Lu0aTNS]LujAyjRBYH5+f%լjRl)mq*u=_w?qyo><óqay|Q>I,妺Lu2E{\D9qTrR"Iu(7000444fT[[#y#_jy|R>i|:Mu2E{\D9qTrR"+qLj3nTS:Lu4iT.S]EQN{\D9qTrS S S S SMSMS㢇8.ڇ|q\|_>4?l:++nW˛ʆrS:Mu4iT.R$RND {)'}OT=jjjjjjjj3fހ^G;yeCyZ>(?l(˻ʆf.S]HuߓH9{)'}O"夺I'rS S S S SMSMSMSmLj7nTS:Lu4iT.S]IT=R$RNDIuߓH'1/QLow_fOp5~a oO?yZ>(x? a6SM0aTNS:Mu2E zj=HRTk!ZHVRTk50004444fT08Jd0}?ay|QYnT.Rc@Iu)'=TPJ{ H6SmLj7nTS:Mu4eT.Rc@Iu%/ǀRN{ H^ƀyd q~}Qm5'6¢<,/=:7'rS:Mu4eT夺GXR#,Iu$GXjjjjjjjj3fTvS:Lu0aTNS]LuaQN{E9夺GXWR#,M5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LuaQN{%y!=¢TrR#,M5L5L5L5M5MœD<\o~ltudM|ӢAz@yX-_7':Mu2eTy`>LB<0IuF9(7000444fT6SM0aTNS:Mu2E<0Iu&y!}夺>rS S S SMSMSMSMSmLj7nTS:Lu4iT.RQN<0IuF9$TTTTTTTp*OK7å/ .c'y6F|R~Ae~#˻Kzj=HZ BjZ+Jjjjjjjj3fTvSMu0aTNSLu"8H5RTjRBQH5*F%ըLj3nTS:Lu4iT.S]AyjTjRJYI5^n3{K'wa|CbW3(?Swzʛ妺Lu"E,'zj=HRTk!ZIVRTTTTTTTT6SmoōE7'X2eTAqy!(T/GI5*Jyjjjjjj3fTvSMu0aTNSLu"(? rSLu"սlD9e# e#Iu/I^Iu/QnaaaiiiiT6SM0aTNS:Mu2E{وrRF^6TTzJ'ӢA/E__nN{xuy|Rފirэ<,0aTNSLu2E׃nz=9^>6SmLj7nTS:Mu4iT.R|t#'GTIzy%G7rS S S SMSMSMSMSmLj7nTS:Lu4iT.R|t#'G7rR|t#'GTM5L5L5LfKiu!/1iÇi_~ݯF/n;||㐩Y>)y<-NwTNS]Luj=HZRBj-Z+Jjjjjjjjj3fTvSMu0aTNS]Lu"8H5RTjRBQI5*F%ըLj3fTvS:Lu4iT.S]H5R̓T ,TjRJYI5xRXOFQ3.Reu#֓?ΖiT<,/Kʛ:Mu4eT.RTަަT6夺(7000444fTKV(?/U(oOKAyByXnT.S]('սM%y!սME9m*+m*M5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]HuoSQN{rRTަަTTTTTTT*y<\Ϲz\Çe=ҹ//#y|R~Aes#7eT#9^G:T#9^G:7rRtnLes#__F:7f2ҹHF4eT^G:7rRt^ ^G:7rRt^+^G:7rS S S SMSMSMSMSmLj7nTS:Lu4iT.RtnzI:ҹuz^I:ҹjjjjjjl'??:y69/BZ;/*FOpI^P-_!7'Ei|4iT.S]ZRփTk!ZHRTk%ZIVS S S SMSMSMSMSmLj7nTS:Lu4iT.RT 8H5RBQH5 F%ըTTTTTTTT6SmMj7nTS:Mu2eTAyjTjRJYI5+f500044սfPOFQN>Ocv3ay|Q~9>F,_ϸ妺Lu2E zj=HRTk!ZIVRTk5000444fT6SM0aTNS:Mu2EqjF!(TjTRJQM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H5R̓T \0000444fT{=r^ {E?[f|ߟ-yZnT.S]OTRݧSNtpIuN6SmLj7nTS:Mu4iT.RݧSNtp )'}:Tjjjjjjƚm擼d~5|L?Lp(?6SwfʛS}夺>HrRII^Iu$E6SmLj7nTS:Mu4eT('}夺TARWRIQnaaaaiiiT6SMj7aTNS:Mu2eTAR>HJB )Iu$E9(700044=EyJ)J;|ߦ(wy~C͓xA^Q<,/rRCIu]$/.H^Iu](70004444fTvSMu0aTNSLu"=tTЅrRCIu]$.jjjjjjjj3fTvSMu0aTNS]Lu").S]ZRփTk!ZHRTk%ZIVS S S SMSMSMSmLj3nTS:Lu4iT.S]AqjRBQH5 F%ըTTTTTTTT6SmMj7aTS:Mu2eT i|%IuTPNCd('!2jjjjjjj3fKՍ|QޫI(yX4eTTH^Hu 夺?DFJCd(70004444fTvSMu0aTNSLu"ގ

yg3n|V˛U,OIuh('=TrR3+ Lj3nTvS:Lu4iT.S]Huh('=PN{FC9 Lj3fTvS:Lu4iT.S]Huh('=PN{F#y%=TTTTTTT*m<ėoͷ_sF'l0"7'X`T`DB{0B9夺#6SmLj7nTS:Mu4eT.R݃IuF$/#PN{0B6SmLj7nTS:Mu4iT.R݃IuF$/#H^IuF(7000444Տ͵z6(m>~9!ycv{9<ㄤ[(f|!PN{B9 夺*WRM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LuPN{"y!=PT@rRM5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LuPN{"y!=PT@EJ{BM__W.G<ތ}Ûo+}o_=y>_;v~>~7/߿o_}8?ί7է^~[O_)Ǜ1joRwz endstream endobj 978 0 obj 14802 endobj 979 0 obj [ 816 0 R 817 0 R 819 0 R 820 0 R 822 0 R 823 0 R 825 0 R 826 0 R 828 0 R 829 0 R 831 0 R 832 0 R 834 0 R 835 0 R 837 0 R 838 0 R 840 0 R 841 0 R 843 0 R 844 0 R 846 0 R 847 0 R 849 0 R 850 0 R 852 0 R 853 0 R 855 0 R 856 0 R 858 0 R 859 0 R 861 0 R 862 0 R 864 0 R 865 0 R 867 0 R 868 0 R 870 0 R 871 0 R 873 0 R 874 0 R 876 0 R 877 0 R 879 0 R 880 0 R 882 0 R 883 0 R 885 0 R 886 0 R 888 0 R 889 0 R 891 0 R 892 0 R 894 0 R 895 0 R 897 0 R 898 0 R 900 0 R 901 0 R 903 0 R 904 0 R 906 0 R 907 0 R 909 0 R 910 0 R 912 0 R 913 0 R 915 0 R 916 0 R 918 0 R 919 0 R 921 0 R 922 0 R 924 0 R 925 0 R 927 0 R 928 0 R 930 0 R 931 0 R 933 0 R 934 0 R 936 0 R 937 0 R 939 0 R 940 0 R 942 0 R 943 0 R 945 0 R 946 0 R 948 0 R 949 0 R 951 0 R 952 0 R 954 0 R 955 0 R 957 0 R 958 0 R 960 0 R 961 0 R 963 0 R 964 0 R 966 0 R 967 0 R 969 0 R 970 0 R 972 0 R 973 0 R 975 0 R 976 0 R ] endobj 980 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 979 0 R /Contents 977 0 R >> endobj 981 0 obj << /Length 982 0 R /Filter /FlateDecode >> stream xUn0+Vh-m  VklS0ɧ١潲2Hr( 7n `bXα[;A?.6\x,& a|7.P(=RqH],(Y岬|7JLr7K4:/썝wlT3?4%߀?T)G7`&$>&fsf`Qn6G +-3ASJS(eS ZAdɮ~WBKnlD:Gyoޕ@Dx =t9gāaD)PmcsbP7$^ 7UӸj%a %7l>2)҆2"Et{!MfM 0B @\ Kd?>ZU a9do̵ҕVYr]\dj=N. ,\|<>&e`m"K+Xj/F%,gd 61Q+B#)]O-nzɼ|օ" F7śYo. endstream endobj 982 0 obj 608 endobj 983 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 981 0 R >> endobj 984 0 obj << /Length 985 0 R /Filter /FlateDecode >> stream xUn0+VhX.(֢MCLl-R_Rv{j" 43y8oC I漴Ncx>Qoo܍ -|wdе=88MYLo*7 S|`ҞZ"zA E!qLeRI)*O}sD2B~u~zy8%#n5ȘrcRt3|Z~RD 3T\ M/qCOkp_e+N!I h.@+(\ W 3, Ԇ%z8F[zxQ}!Otg G!ЧALbf9[ar11m}7U&Ty&)?pÐnZX-i(ϢHr %`u制T&V'Q \UFNL5S~2F](7Zmula4w82tL&PwBN}KYę|,>6e`mu.V<QA[ ^ic٩Qx.)ZGql.G}d.1ܺÅaʬ7I endstream endobj 985 0 obj 613 endobj 986 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 984 0 R >> endobj 987 0 obj << /Length 988 0 R /Filter /FlateDecode >> stream xUMo0+ ƹWW[Z=U$A n o{"L~7s > endobj 990 0 obj << /Length 991 0 R /Filter /FlateDecode >> stream xUn0+.I}+zsb$EX#H]^H)hp@`$; >ĕ2nB?c}~l!+(O+x t}m0= "2 >]+VZ2%"W"&Yw,Okkʢ|loiïYqa&2 8#A 3]h!"줙wL&U?=֮\.Y>: LpIjvm!kPRuHlj0f,nh2Gu".:MʂyYA ~SK!"RHdiD](u6aOQ3k"k:ZtI1YtR*o3R9ٹZlp%"tLG uV5:1Qĸ-*[{oJpBU_כm*rϹnWAAe!(#O,1X,T^ED[%T|,9dJRMU7Vj:IT#÷(&(1hGȜ?ȢӇkyygU endstream endobj 991 0 obj 571 endobj 992 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 990 0 R >> endobj 993 0 obj << /Length 994 0 R /Filter /FlateDecode >> stream xUn0+.IQ$}+zs"$ EX#H]^H)`p@$; }xȄ"~  U3{Y¯~w>%h~(nK|VVZ2%"W K@Eif7EⲲ/ |+`6%z4k,47nA &gjDS5e'ͼd2c%NJB$64yJ 8Ͻ0@ W[ʐPIY6/+@ߏ"Cq4(8M~Z:'10%UbqQtR*˷ qX|ܥ\-6yZ9AIYZMNjgiNE a7v1KOh :wŘ,Q%Iݦ*:@ToZb|ʺ+" CmW"RX9x*JQ:H6UEXB;koCP!ߢ;<İk#s>#3{G³G;?kb endstream endobj 994 0 obj 563 endobj 995 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 993 0 R >> endobj 996 0 obj << /Length 997 0 R /Filter /FlateDecode >> stream xUKo0+۹+-m=U Hc!ögf7q@ݠ0 !UgB\{a;mXC% ^:\x͎↰̽O7 8|K+}BJaRXw 'p?ITd74,,-a>Wr;U)ӬjٰtvH4u֡F&"lY5LyX>e{YiHtFj߀/Ԧ@;CE: >vcpK (7TgSH0ϊ(RXe9,#ԮJ:-!)FYN#]g{M]w3p @]'ZLY~$eیTGNI%"t,0:sy/՜áUcnƷuoQ5XG ./8j {Wg8 (|;˺_/ʨ' 0MP*9ۋͲ34'}S3n_;$%|GmfGY~d.~ڹpdfp@]> endobj 999 0 obj << /Length 1000 0 R /Filter /FlateDecode >> stream xUn0+[Ͱ0ɎD#ߗED2LIo`q@߄XE=C )ĕ.)7,%`{XÏE} Ѥ'ߕ6U)>)`LBJ@p$9_%YVnonW,\)HG_zwVWϰ&MdjpBf|g{?5(Zk!ޠf2wucЀ2I^bƣ@fO!afDOct03"J'uDmUTQ3kbk5mj]<Y]Y IO۠.O QXZk|ԼC N1Dn3.i(_jQf۰cB$k&C>'I9hr.2+!C W!$q 2/8Xw+ʱaJ4ha>hlLj ,>9@7v5ܿ endstream endobj 1000 0 obj 538 endobj 1001 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 999 0 R >> endobj 1002 0 obj << /Length 1003 0 R /Filter /FlateDecode >> stream xUMo0+ꝱ{ۯ(H{h*JITH D󑄄{"~ƓK@|: ,xi1+A>DBjv~3؍ ~y#`q A#NɉPV8t!*ZjD "88͒g[*?qϯ"Nj}uHYQФ_DQ QXTˠCDզf&6GxWu<RHRj2({.ixu4te&=%1Ly!Ùh}ʈitߢ0x1}72-;KhsFF|ήy"W+!E5\vYW{),d@vDsu/V4Ĩ!gpE&ʷ\XH"۶zNkd.(c Z$*)I$|O̐Q!21.KH+xڰ|SbW\oNJԾGAP-Lbv|XO!Q c/UI endstream endobj 1003 0 obj 539 endobj 1004 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1002 0 R >> endobj 1005 0 obj << /Length 1006 0 R /Filter /FlateDecode >> stream xTKO0 WȜ}"BJk:LhG'c;$ Ќ+CRcpp)<Kg OVŮx-'%W#Y45_;9>Y bG05G6f)rZ6&KÐGQf/Qebe.8/$t6T ' IYSXزtsMg]RIU"lL~S=qBZ@{`+*78z'dz\P@v(JT|$B˅ZWִ\>h9ǰ?}> endobj 1008 0 obj << /Length 1009 0 R /Filter /FlateDecode >> stream xXKo8WHY>dIn .1C],hʒG!)D{{6 rIی"/# %ٷ(bV{K{dP&Bv,~ 8u#G/AOߖW:jyysb̙? -2+i'mNߗg!s~?̔f1YEQd",!M5PBxNGbxb0('B>[d{J))EB:5^1 5ȟUYJ%EPBP$;uv^Tr#יBYWƱ.kX ;ajv";)/UZuCb!B[#Ewuc|EV~;4&tv"oy]>5{}4 `+r݇fV%*4nd 2W>rN0 @p4Oۍ<}J(?Ĩ1 -VoUAkx&6o~Li2;SR#:;9NNvfUV؁l\zBdMnUfѭ,&9Ȫv ƅ,)a;s3cD㘑Ju(Udid pvi?bV~xW~Fݖžm\F4ugN՛,Jɪ/IaݔN؈\ڄ[W?A&6Yt \S/ TC08,@]#_>5̧s΁, Wa.<R[tNAO0PiW/TZåF2K]6֬oN{JU氾}hm%[)nuKF(y`:0 3a69<9PPԃk<(*!Y.ء@M6yrEǟ-/Vys,/V^u;A}2ʧwFXgφ6/g i(.~ɬv& endstream endobj 1009 0 obj 1594 endobj 1010 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1008 0 R >> endobj 1011 0 obj << /Length 1012 0 R /Filter /FlateDecode >> stream xVKo0WH+oio"TU&N+׎@- |3S+s9> endobj 1014 0 obj << /Length 1015 0 R /Filter /FlateDecode >> stream xTn0w9#5 ήoJPu2WQ4<&afF8>G}w;b!@} , (ُqU7ʢkp &ⅷ:(Tm[cE6rp+%9I8Sbp2EnvuW}D9eoU__7 VsKā!\eS"QIss-M > endobj 1017 0 obj << /Length 1018 0 R /Filter /FlateDecode >> stream xTMO0WǎpkJ["q`Q."QX6©G<D=C 8X8u8.Yk8> endobj 1020 0 obj << /Length 1021 0 R /Filter /FlateDecode >> stream x͔=o0w!ΝجJݢPu2D$>JU 4Jg=_ԌXڠBq(^0G$ ipc0\ݑ5G8.Rxc%Cxf۝%|ܘa3!xSڦ<7sG:;s˕>b'ϵaBt .B !'H4sؗ8vefU z1E%ΪLNZcH^,S6$e%]-9Ekwp_hUʦrg8Hy3_•ߪ?F! endstream endobj 1021 0 obj 305 endobj 1022 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1020 0 R >> endobj 1023 0 obj << /Length 1024 0 R /Filter /FlateDecode >> stream xV;s0*Š$w8dR.0'Lx8Y:;&1ܜ]iA|%(}\e.?A1F'7*u5;84*Fޣw`){g%bxlFqG`S9Bo豄D=qaF}B(` FSCa9^ĔG1t% P6j*: Y  <'8" xiN҆&)p¡"2;ݹT}N\C iR}C-5Wo&8$c,FMZ98מ ^e[୾aQBBiQJt:>*hfou'Bðz)*z%v,I"zQG%Uk>XcZ!PFauW %$6p\FPZ\ˆR2H<7H/T* o|Sg8Mbi u(eݵqfN2U3]m~e]:&Y59do\Ė-Um+64)x=g&Wq+'sXż1u%8>> endobj 1026 0 obj << /Length 1027 0 R /Filter /FlateDecode >> stream xT=o0+nlHtlV5RĐ"%1$_;mǂbO绳wob9Dٵa!f;n30'hVj6vINbѕ8 |#!xUluSƯNWoYך!h]. 7S3y}b_8dom% p)LGm)MӃ2kHMR&BP8̒UB}HkBm})WRdI!ӰCw{YX-$\˟Dq$=Ѿ(к#Y+T^I^:ViIhMZn` Q4<=Űmau r„0Z gPpVK endstream endobj 1027 0 obj 399 endobj 1028 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1026 0 R >> endobj 1029 0 obj << /Length 1030 0 R /Filter /FlateDecode >> stream xU]o0}WFZ=|>IjmU1)vF=(>pxb YtFN!F@DC [/0fǦ=q?ZF?{xR!={\x-F7!`HVGjQl.G>E!)Vus$JfO|>%'Jm~mV7Tjų8kAnj#55dGoe5?~GjWe<].gU?WRXvPD1ѕ\8Γ3)ec|jTyFLa]4Slj-Aհ/T^v{ ("} 5Ȉ-QE-fz+ ٻ8(rאI@֜=(D;YJQ)d"0FiQ~&˧"ptIh-`mSU?7U[H.+Q07%> endobj 1032 0 obj << /Length 1033 0 R /Filter /FlateDecode >> stream xVMo8WfHY~3]6m,@u6m (UPDIqA4yJQDܢ]}0"x8h"clHČcw 8>~tx=|ΈߊAGϵU(A냓1#Bcs1̋EYKoדJ9eY-vʶoEmiD-8(#8C#Їwi./Zwu1fB f$5Gi6EɅB{$&=:_B-ng1TOgDahdl(tMΨ@I(Nf\fYDŽ(O(nR9C)HpV6n"L΅[Y`kA@΄?PcLy'6_Uii䩮baQB~yITF+A0EK̾ze%kPht >T8ض,rp6%̟mV?14+zLl??IDyzr@Y~{m^\8osy 97Ǚ,o˛ňG5!|F#4J 8JyL]!SHĚ7.ͬ-x}17nnG=Mg3⩣)QܓN>Yu@3rLTwm!e~hT! pN5Qn+p#O.R%+v-2ߧY(6p$*ӲǁͲ,>S Pݹ Exw/7PJC;7^B֓ƀ#D튘ɕ}id>ys%.|dBL,t<9(U5Q endstream endobj 1033 0 obj 873 endobj 1034 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1032 0 R >> endobj 1035 0 obj << /Length 1036 0 R /Filter /FlateDecode >> stream xT]K0}ϯ`Iڤٛ °3 m_M?:|s&7rNN o0I[ 0C" .C/  5v[e =<Bx 9ޱV!jC^ 0"CBэKbxQkv:UBNu}uZ7>k 15fFDnHSVC%~TKtM$ԥO=ɇkɥPZ kW*1[fAse ȧ\ IcaP͓dTnR-uKʓ # +1ȵ֞Ӥ[eL@ͭ2j #bg y4;+feUDDhk Iv3דZBa{4_(zm vWgxGh3s`V&eh` endstream endobj 1036 0 obj 447 endobj 1037 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1035 0 R >> endobj 1038 0 obj << /Length 1039 0 R /Filter /FlateDecode >> stream xUn0+̒Bѷ])`D@I`m (G ;bKD2L3|f0|P|f.`{}0pڊf0Kjvc vrߖ(}B܅?V5"Cqp֧.0 *N#<ͥy8 ܪ$\G~Z߂^6,uů:?AYGTE8%knJnDٗzWD^NA"EC-И>8pfS0y/P3a28s14 (3Cu(DH!c2>XA?(}o<}ߝuzʣ5#B0)|)=7h _)bKʰ|ןC(]\!J$H)*t1_eUFZBa>aWdjd8Rm).fɇ:z{,&Ű9 Ô98_5IpAu]TtT(y7g:LUOT|2 7tL5K s:R}!FL_{˜0LrcBN^sשׁy0 endstream endobj 1039 0 obj 606 endobj 1040 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1038 0 R >> endobj 1041 0 obj << /Length 1042 0 R /Filter /FlateDecode >> stream xVn0+ViXZ(֢ P@!fPr;D2̙'pAԝ#}Ls`7؄x; @sq[ڼk t2><8u69_Um·y!&9]*R%!J|ͤ Q*L9)uzZW-YFOJ߇|qoujkDBUq^]э j98M2 xNsHY(d2hp,5`Ôk=Pb3_[@[zJnJf7==Ll(~mo?Í6JAY|S7K!uzelT+"{S•kJ{`;&e{Qc!í 2}'9- ~gO)=&}ڎtjj '{T޸EǤ(;H )JqsNuA(;xsCl<}b;( Wof?b>[2 endstream endobj 1042 0 obj 725 endobj 1043 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1041 0 R >> endobj 1044 0 obj << /Length 1045 0 R /Filter /FlateDecode >> stream xVn0 }Wm j,[V6 ENeeIqEDPN"y1Xv(,$ gM^PuΏfM lb*FB)zp1@Ҁ o4NA?$Q7Bu17ƪ9DpFi`B't5YJuZαj=RkW\lz|֘57{XN^ӯ}/a)lhSMjso׋] 7bI^A BMN`$xrvo.Pn ΩfΫFycF֬wNM~Fۍuai|XzL2X =A u c>qw^1"0JO ̪.]- endstream endobj 1045 0 obj 716 endobj 1046 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1044 0 R >> endobj 1047 0 obj << /Length 1048 0 R /Filter /FlateDecode >> stream x͖[o0mzm.ҤI늴!HRCz٧1$D&Q9 s{a.\PXf}#)EB$@4nE;_`c_cw.o?GϦsWzÐxbxݣ |8T8EYzzwK|0O)Gx.gGךڧrBYelVby(KgoE=ə`st$ȏt 1sSZdPmJ\$dΗ-2͓j>u5I Lj1fp[9/*\A!$x$ ")CmgڷJB~0 nmzwٝT͝k,vNJ\Ħ0BkX /[R5zkuGq$}h5zm-xk9j^ҔFhE>U/{>skp{}fN3pB0HDO#2U !`_ endstream endobj 1048 0 obj 707 endobj 1049 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1047 0 R >> endobj 1050 0 obj << /Length 1051 0 R /Filter /FlateDecode >> stream xVn0+hXH1}zH#8qXCy}}[ݢ&aqǚԽǀ^Lc 9bP X `/;66 ~yGwy *]CG7U)>| Qo;iA8/) ">W!NNs b[rvwKt`꫃JעeTE+y A g> [9$-H{ ɦI1A#@ kH!1㴚+ `XƷ3.!EV/|[$-UBDH)3Hpɳd>udĈɪZ BP~4]mۘv„"" =Mz@#wkB9Ed/ Wa%PUϺXdku̍sptINa'?u3Y%Bmxj3qe&B{k.D+[hwyMY>q@#alh&[*{WK"{SVmA!#q@#P#qa$H\Tĭtu@*@\κ('y:`ۣFz駤(e a@5ޡc8&s!CZ $<^?Pʪogi endstream endobj 1051 0 obj 725 endobj 1052 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1050 0 R >> endobj 1053 0 obj << /Length 1054 0 R /Filter /FlateDecode >> stream xVo0~篸FJ=ۼmںiFCSU4I)_3B0mMwwc@{ne81PDpb~Lۡh39+6sf^Q]ߠw~<^y77 {w0S+©4Ig$w06E\n`49T0*WtOJ⢀5}[D)IXƠG$Kr vi)VE5lI\;Ct+0"6yp6s=LDR@}&qZa9Y-Q( I_L1 ۊ29JV+&L_q?,_mNIsN$gFl7Fp}{\n;tYi5[QFҭ̞岻z+wŸ ;V\vv<*;;D2s*omw`BHmeEW۬xHBj1 iaAPyQ8CB8Cl!P^&4Q>JLd0?EeOȾHTW ΎY#gujՁ]kjԑX7}T pZΨ3;n7Y~_""MHE JQ ~KzԬ{}k N-e!}pbZxϬoX endstream endobj 1054 0 obj 795 endobj 1055 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1053 0 R >> endobj 1056 0 obj << /Length 1057 0 R /Filter /FlateDecode >> stream xVn0+VhXH1} 4 pd%%E,+nzib&wn^GnB F@P.D"!Ygvv+n9nGvr "-8;M< NF7Uu) >|`HziGJp6rm!YnJU!|Iv: }c[־+Pm] b$إ‚6\mtq|1:U~Q=4Lcb;9@$nΆPϱTC YP)bZ̡̞dlkU]m;#ιCxBoʬKH4Inpouw1<ók1z< \ (yY q++?V+ endstream endobj 1057 0 obj 711 endobj 1058 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1056 0 R >> endobj 1059 0 obj << /Length 1060 0 R /Filter /FlateDecode >> stream xTn0+ E[ 4=ā:#NZ5 xySs&e8,(BB,B#['/۱_i?;( ߂{DoІ뉷tOP(,/q:F!^ % %AF-ɺI=߃Nu/n((VADgJ)6gfe狪I^6ELr™a:oŁ6@gR\ʴ8 4\9icN.9YmRȪNK]=s%RJgjCnjJb6Fr q`xUOeҘHHrz)Pq!R()N9Fs]bJ7im8琁z*Vs~MW? EJw* K/(u@c!s+Ga̴> endobj 1062 0 obj << /Length 1063 0 R /Filter /FlateDecode >> stream xUMs0+>@(vtOmfʇmhw6#(/#+Cxp> &jnc| #$O'kUKG3)$<\}E$ֶ~k9E*xgmz4kgO݂Gg$dr;Uhy0ewޔsƠ\"r `O=8jԹzHS-!հ_n W M9,,v5 EQ^uVwTsѱ1=gƔ)t~OscX+͢X)CZRq~SkV`t"siiVm0yec\7i {bzAmׅ=Eym'.e=C̔aȉw}Iq2\tfrt‰~O(J%Uv|DhGc}HxcWת endstream endobj 1063 0 obj 552 endobj 1064 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1062 0 R >> endobj 1065 0 obj << /Length 1066 0 R /Filter /FlateDecode >> stream xUMo@+esTԃ("x7׉sl=yfw]PT1Pʁ'gpJ[w0T!q4e6oEW1ޖ)cS9LPʰ).x7`.1jHs)[f7]oA%n2(]Q"+n]YDTkSO;qAbj1+ߠl,VD ܷ ӓ{B@6\7+,޾~ֈ<0̫z@iV˦W:byeY9~';y!Myr ; #^\b[uAEHSpX6lۉ2geMS&{gc4̅#R;!fhGFIzv4xtee endstream endobj 1066 0 obj 545 endobj 1067 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1065 0 R >> endobj 1068 0 obj << /Length 1069 0 R /Filter /FlateDecode >> stream xVn0w.0R;HfM$pߏ 1M]{||{~oLU1 C$:ܡmt47mc {|ѵu,pDa޷8}!DQa qW?e^ }|6RFזl}C0Z6؊YܿFɵ%@id ah](&k,TL[HHFh4`WIB򱱥:dZ7.I|k7MZ-]YI./SXu$֬[}$,Ί e'jqA烒miYpdT7FYdmP[p^[ikRYY8Ɍf"ͬ&]&f &Sn_qzScIX9E0tهƜf hG8Dzp2`xn}`wSO~|(6 G<2o @FDU5_YU endstream endobj 1069 0 obj 619 endobj 1070 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1068 0 R >> endobj 1071 0 obj << /Length 1072 0 R /Filter /FlateDecode >> stream xVn0w.wYi:Hfmh0 SdžGܮB s1{R'.18_{2 A_!Į{!s?N ?h>8=9!87 ^ }BQDQ5hT)Uu)!ܮyVa]ppA.S=uz WУ)uS=HvjU*zw #.!*P@1 0#l@nF%-4b,Z)RSuPq Ah?X{w([ p,< aZ.ݖzHG{N6Ht{ Bs:m:v&.aZ@)u!+JHxKheȪHå]Y'O)ڸ#!n4=/t-{9K)]܊AUj ݛ3 3w :Mԟg$MJj\˼*A[)]?m5-M4,p>gzܔ`W0 /w$E3f, t{ !pF4{lm]Ĝ`%0Gg >U}e endstream endobj 1072 0 obj 629 endobj 1073 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1071 0 R >> endobj 1074 0 obj << /Length 1075 0 R /Filter /FlateDecode >> stream xVMo0+`v5=IІ*~&N nOm!o3f1x_Ac $X 0ܣ0EڱQ?^Q?bt^>yQXy7sm|y !DDX__RE`֭.a>?T0:~ ǟ$u1JY'1?>GGFIty}l endstream endobj 1075 0 obj 633 endobj 1076 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1074 0 R >> endobj 1077 0 obj << /Length 1078 0 R /Filter /FlateDecode >> stream xVMo0+͇q+hT w! 7!oab78 ?!pfP=gl،} qJIEW*ëӧ3g1"7 k.r@0Dٛ^(@\BT/QTn~=:YK[ו|C՗d>%@<)tuV6YeRCr_ NO}^d)Wy lr Y\^ۙ|y/Ekb5A+9u9kMU^JˍhX (ҥ oVM#{)SW%|zFYܐ3ڹƻ.NݹN/{a5c&c} `T ; nx\IfNik:YNI[چaK8ߢXw> endobj 1080 0 obj << /Length 1081 0 R /Filter /FlateDecode >> stream xU]o0}W?II]Q E8 ǀ{c9ęc !H`>[uv7ԮX6Oԍ-D$G/(|#>׆so+~(zCpq֗S( \ۇCwhUoޗS鴩IO<Ӯ}T)QSupBP>b/ʪ,^ߌL681EiL+99LPp3Q s 3l~)a~s5F4lC?sZAiSf6#V֒-cħֶhXcbaj+"_kniHq\rqcG(P'H"B1x4{%Xi^'*}E+!_D/sХjic8NJ7wuo#&ip+nZzS'+_v;Љ&>iE{RDEmt߯˷FIйowVվh endstream endobj 1081 0 obj 579 endobj 1082 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1080 0 R >> endobj 1083 0 obj << /Length 1084 0 R /Filter /FlateDecode >> stream xUn0+rIsl(Ѓ=96c öԦaّ,D2LyYA`60A!',f~Ff~f!?l /ѡ+'LbxOBػ|ǻAtjT3i)CVÇoj/vW}%R)]B>,01(FWv>$W, ۦ8I`ibۦnnWp)ζI,]:˲tpt"̞>'H1v8ytv4]1_St@#/oU# endstream endobj 1084 0 obj 530 endobj 1085 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1083 0 R >> endobj 1086 0 obj << /Length 1087 0 R /Filter /FlateDecode >> stream xUMs0W=DJBB9t3=x´$j+63|ِcMc1}O+'W~Іú CC)@Iyb?+glĆ"%a=8tI7oj{W1ؒ t2HOJE9VS8$}aIZ7w5U*JW]~d74g5n݁GgpFځ#zSC^_)hTi|s6)GfGrCr(> endobj 1089 0 obj << /Length 1090 0 R /Filter /FlateDecode >> stream xTn0+ ˗H1MA`DhiP6m HG/& r8Y0i F@R`b"X>1bE ,Wf2 ߳ۀNchj0Ͼr"-xIbTŋB͇Kjx [SF;騫KG<]*Àb$^BeUЇmDYvdm^.2Ǵ-SD Ø]CoY!xdߔ}"Ej mhu5ځK=z 3ۂmS9DiXn(-dO$"$SgcWv=UFqdE"j2P8,V˵ަ s.(R2X#ݝ<(#Y0ֵ'Y[TzvM!XI8UZ5^?!RJ㼷QNsʃo`oab[S44] nc|r&ۿ5xw/(cx{C9zoW/#`TvɎƪ/C%Ʃ endstream endobj 1090 0 obj 563 endobj 1091 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1089 0 R >> endobj 1092 0 obj << /Length 1093 0 R /Filter /FlateDecode >> stream xUˎ0wّ/0Z*ujQ傓 %t6HBw(>mǀ6BRHwcX4Hሆv,_`c>~t'OA3p x,'eu. | `HV> ʾ*;WkRmKSD Ø7 h LJŔUelT ^p4=TzFA`EpRr_uOIKؑ.x=P8q|SۃtJ (”EKRYV麾&]b5 70$^ʕv#;w45z G]vJաو;- [('eL&B|/R?˼WL1H9VypN͋,OU]mmuO>*?WU鹕VZ&܈'Ki$xU`-#.e?b),weӺ tM\&mOÝr> endobj 1095 0 obj << /Length 1096 0 R /Filter /FlateDecode >> stream xUMo@+hKv?յ\G!256 X3fɁVvp >e1p=@m \i${Ek[npܘuO ëq_, ִ68QW^ N=x~VwT)#U:U)Q<(ÀbEOW];O25ݶDyPD)tNcL(aQ?€x#[Zq}:ZeP/g!T ]vyZ:~cd۶}fETԮ\̨뿔PL,d*ΓMj471,\KqлhEUn4Jˉm*w)Q)TFXYA$5{1x,nytjTwJw> I6S/4vPrwHFf2>舯"8JډINYmn"1[ MZSK;>U^0 [[6G3QU3}vJF -ՙ(m**g6fsL|aw<-κ>lag?9d>Lʥ 9:J:PC endstream endobj 1096 0 obj 641 endobj 1097 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1095 0 R >> endobj 1098 0 obj << /Length 1099 0 R /Filter /FlateDecode >> stream xU]o0}WVZ<m_6iUQU8  lYlI Zbs맀6BRXl# (1Dx! Xa"kW?c?:ysp`Х9goA UņaOduEb{bRi/ /mQ!QeHLCB_Y7m|˶n q b$LM=W,FE*mcQ^:uNcb20F$#`mT |Fo˦Հkh Pй/Z4B7Md("pvoyQi!)b)#;ԧ"mٸSOݻ5N~ (THKVV@frPiL;Z.+]ӾG,c:ZA6#7L:ѿ"F Ob/Ka)WVm5 =01Βw^TT %s0c.vN.l r̚×h(~rmcQMhsxK}("ˊ|?VX Q0g6"tNh~@m]m~t\0OWa)TѹJ<{ endstream endobj 1099 0 obj 649 endobj 1100 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1098 0 R >> endobj 1101 0 obj << /Length 1102 0 R /Filter /FlateDecode >> stream xUMo0 WIlY=lXQc;EJb \]QR6N"#'.b@>qTUt1tĒ {hH )d$]\}5+n MgkȿDJcX瞟Ou#|7:Dw]%'6i9="MЭ)o lBjrbJ8LR{IUrs9dS|m!$=3|4uM!ŦMWuT=%rYM>D+^ޛ]n| IL(%Q+ǴS[kFPeU辪^~aZz:ࢆV^ZZ4B.Μ k:QZ47H⠱UO'VlEekn:*ǜ[@aʌdG{h\"84 CY59>yIs@a6~4]V֓l$, tS |~Ho{7~;(1Zo:,DF8L[Imt;,?8V^GtFIwxz|宺/( endstream endobj 1102 0 obj 661 endobj 1103 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1101 0 R >> endobj 1104 0 obj << /Length 1105 0 R /Filter /FlateDecode >> stream xTKO0 W$Vl}]Amifk5ݒTOwđMjk>gB; 9"B.=[aa',{ѝ8֧:vSr Ƣ}"NVM6nAE⫯kiDؓDŽ<,-(bqC BD H X=pI[m y|8qhY4j$0{-ܙY Ga;sWɭe+sSó<ĕ宧=k[)ť}[*y !\3E ]oKiHeyUOA%^{dZ[][..1l;_Ǧw> WBluI 嬺3D7 endstream endobj 1105 0 obj 403 endobj 1106 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1104 0 R >> endobj 1107 0 obj << /Length 1108 0 R /Filter /FlateDecode >> stream xTMO0Wxv@bW[E=BU %"qJ3N@B 7bo2G&8 ˊ=FLpܳp7>Vn!M &>܎x!!Y~NA dw&["br%]h .EYQ-M_Cg*!a睾n.u$=w3gzk-5:HE_~͖mKܴM˦whɥPNI lDEa8WR)|DlMhVS!·5TEY$áTpBuA~g_b=~뜖66bV~uusEB> endobj 1110 0 obj << /Length 1111 0 R /Filter /FlateDecode >> stream xTn0+ΐZ4mћ=A(+T%E۲&97zhǵ3pso;`S 3XXF"Vh{Ǘ+<ݽE,o7:z#"!OKĴ ї]¨a'F:if~nI;Kv~ٕb],:p'Lٲ:.U4V"1jIb>7mcyhʇbKtNg >g"t^};IHڭѤN-9W|k*,᧫u0Nt$B&t>ퟢi=3JJf6Fr=׉,yVگHG礎t RUq{m(:qeNK$>(ssZR4{]?4vd^nʹ2=iŋUu/% endstream endobj 1111 0 obj 528 endobj 1112 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1110 0 R >> endobj 1113 0 obj << /Length 1114 0 R /Filter /FlateDecode >> stream xTN0+c; UX TPmҤ'i G7~~NbgdO=&JPf m@$\j;:b'goǸ;wGC`׷uv+6 aN=uA WkS11r%]|$ (su7Ƿ/ٙmV 6;oK#鵼͟8l (-[h%БEal sTw:Ρ}6H.BO@g` #8CRǹN #"ԫE<,(BSAYdT~ؔNȔC1&.gj]CΦZ1[Uays犄!SujLM1 ]<]m7' endstream endobj 1114 0 obj 468 endobj 1115 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1113 0 R >> endobj 1116 0 obj << /Length 1117 0 R /Filter /FlateDecode >> stream xUn0+ EEZtChVMB-YRl7衉d'P1xA*{h0 B`>µmO{c]ݷi;mGw}:\xWō{{o?(ċ># (~\C$NOLCl.On!} _Ygjɪt8$lXA;qpJ$U_ |U"P"ؚYf:ͬٻ2ee->#9LP0Q9'"r"07˱Cxl@yr, X,]Sm3Nl$ C6Ʀ#!Q){(Renm@D(s(uRj 0AYn\1894h7.pdgڢVC\ILw7$[UU} M]F$8A?.ՕE*H 7n=`҅n'jsN.7rVmmv[3|F=pɠtG> CkbѦk&_Y:FI4h̜{ ?2U endstream endobj 1117 0 obj 665 endobj 1118 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1116 0 R >> endobj 1119 0 obj << /Length 1120 0 R /Filter /FlateDecode >> stream xU[o0~WTZ=_@6=Lꊴ^UIЂI1Yc PMD}Ίv>i;;Gw}=5<W>~ QH>#QPJ} > endobj 1122 0 obj << /Length 1123 0 R /Filter /FlateDecode >> stream xTn0+o-CDDc.ߡ'rl衉$p"HUPm i踈DUqCXE8B|6,W)"&,*< \_h(ʭчbl+KvJG'YW?i܋@& D@EŃ.˝ilI;yҩ9$ #rJ|y2}#<̎Z"Ć.vְ2?9yKdYeo6[g誎1cJJe"Xs쾱 o~vw2> endobj 1125 0 obj << /Length 1126 0 R /Filter /FlateDecode >> stream xVKs0WfTo0fzCa&;dzVe;S80q&]ǷׅłC:X lQРo[{,Sw& |*9CYwx]O/*7 km~$"$B8;=KW宀tZA{3Š6ft8~cbpbcSX ­1RwܷUʺT" pSʰzqE،S@n*v`B6.o_Mʏ)H[W7UtP1S!"X[.`(r[Wr1E(2 $e8ם7ͺKk@2IB8\AO9XPux&|YS<5ospFi躯_wg 6 :^vNE3N2aY4hU?b a$&'4U}q endstream endobj 1126 0 obj 732 endobj 1127 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1125 0 R >> endobj 1128 0 obj << /Length 1129 0 R /Filter /FlateDecode >> stream xUo0~篸DZۦ0)+b)MH134M|;}w=HP:[C @1ĕ3nX [qWα~zŻ"p^c#^xˉ#|Cx#93BD_aRp9b]@mRί }FJ.Xڿz˺tVr\AA H*@4 0$dm]-%)t]B׶,v٦Q|y 4vz6EPQb 󉝕OkI|K48G&‘NaH>&@v,۝%8j& 0GtMEX4jȩt[M&YiOi72մyQsc6O]K QuUYÙ4,>Lu>_=UKF@lR nG[&JตuU୫ϱ8ؤHalRN*O: HI0wWSka"+[,SJ@ƾ y<(ni?1)d5FI6j}Q>6-~@I9ŰmS>iگgT(NgWV< endstream endobj 1129 0 obj 621 endobj 1130 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1128 0 R >> endobj 1131 0 obj << /Length 1132 0 R /Filter /FlateDecode >> stream xUr0{Lfu%|kM;a$b{jA41qsjkЮ>{eexQ &8Br?HrMa Ia# $I/HV$8[@-%+xc^4)S R ؋#A STVPE!V:VE>UmE ݺ\ JSRk\"rGE$Ak!AsuPt\[h'<dvv)I$iq5Rm˧ظ\̈́cf6&zˈ)!fy}uA9q).rQg6zRDiUdXCcTwlQՔC-riam&֚q鿄 ɺrur,12wp'pֲYW@l+.ݾOkga|>8=f6_y=3Į7CћyyQ6H#4IEFѸC'iv 0# j(,f:hfDHwWk(sW1=^w.޻h9^YU endstream endobj 1132 0 obj 644 endobj 1133 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1131 0 R >> endobj 1134 0 obj << /Length 1135 0 R /Filter /FlateDecode >> stream xVKo@W̍Dj} T@VCS`Eb~3;Nh(7od0>79{1P7v1& wmQ\95;v=mEۛ-|vR]p-ڹB_Tm6yF!突ڥJ|"6/nA!X\Ayfꔵt8~s5V98% e5$*tjH4WiX&YzqQ"C_)3A)>N1!W8 _DXqn8:Qv6Z&=IL~LC-T4%V/vYY-VId̛@L"{sLDRn"7>NˮliRkҪq :$j)$/g'Lm˸`8DrFްs.OqYi;LaQK.[ U#UYI:zHzeIr wU4HNOGu/Zqm0DZmR!¸( rLI m+&Y6M^20(y ~ emKoF,X2Q`׭Y#̈́h}_q,UϤ(Ig6}[O;yk#3yZ (;w;nߎ9CƕS^DG#?GsDCJ8c'DU 0vk endstream endobj 1135 0 obj 730 endobj 1136 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1134 0 R >> endobj 1137 0 obj << /Length 1138 0 R /Filter /FlateDecode >> stream xU[o0~WDZ=ۀmM{iڪbXc%PMDa@sf ̜cppb#lh `{F͉]}Цj![(G><:6\xᜏ /6 m{j=FȧzB\ gq@fde9>42š=S H󡂂qS £R6+,\-K}Ww,RM g. 9lΙ`Op)TeB&~'I ؤ?,]9n;r <ĐlN@°TiM QFaS^#vb=sAG TTeW3QzQj:[M|{Y@ee(KJI0$5xNe\Ni3Ne#%a@Ѡ|=i{p/+4n9a|w"+P 0{BLuo7DMϔ[*>Hp@VRp4&5Mà{=mfNc6?L'C9>( Y5Je3 endstream endobj 1138 0 obj 665 endobj 1139 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1137 0 R >> endobj 1140 0 obj << /Length 1141 0 R /Filter /FlateDecode >> stream xTKo0 W2'};nڦ톨ЕV+-0vbǁc;L mɾx,w1fS(N(@ Pݦl IA^rе8s\(,o.:_}d]kGχ%jaCrl}_8\xla9yLÝ (,4^seᮊtbsjR&g Ҭ)̸ELp߽]&;aY! WXޒEFX}Vu #}e2+ڃףaVTH;6QQԽi1l_NP̹5]5껬5 \9z c= endstream endobj 1141 0 obj 376 endobj 1142 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1140 0 R >> endobj 1143 0 obj << /Type /Action /S /GoTo /D [983 0 R /XYZ 72.0 720.0 null] >> endobj 1144 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 237.88 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1145 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1143 0 R /H /I >> endobj 1146 0 obj << /Type /Action /S /GoTo /D [986 0 R /XYZ 72.0 720.0 null] >> endobj 1147 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 242.88 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1146 0 R /H /I >> endobj 1148 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1146 0 R /H /I >> endobj 1149 0 obj << /Type /Action /S /GoTo /D [989 0 R /XYZ 72.0 720.0 null] >> endobj 1150 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 262.32 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1151 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1149 0 R /H /I >> endobj 1152 0 obj << /Type /Action /S /GoTo /D [992 0 R /XYZ 72.0 720.0 null] >> endobj 1153 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 259.54 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1154 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1152 0 R /H /I >> endobj 1155 0 obj << /Type /Action /S /GoTo /D [995 0 R /XYZ 72.0 720.0 null] >> endobj 1156 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 254.54 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1157 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 661.5 539.998 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1155 0 R /H /I >> endobj 1158 0 obj << /Type /Action /S /GoTo /D [998 0 R /XYZ 72.0 720.0 null] >> endobj 1159 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 259.54 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1160 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1158 0 R /H /I >> endobj 1161 0 obj << /Type /Action /S /GoTo /D [1001 0 R /XYZ 72.0 720.0 null] >> endobj 1162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 245.66 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1163 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1161 0 R /H /I >> endobj 1164 0 obj << /Type /Action /S /GoTo /D [1004 0 R /XYZ 72.0 720.0 null] >> endobj 1165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 245.11 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1166 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1164 0 R /H /I >> endobj 1167 0 obj << /Type /Action /S /GoTo /D [1007 0 R /XYZ 72.0 720.0 null] >> endobj 1168 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 613.5 220.089 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1167 0 R /H /I >> endobj 1169 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 613.5 539.998 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1167 0 R /H /I >> endobj 1170 0 obj << /Type /Action /S /GoTo /D [1010 0 R /XYZ 72.0 720.0 null] >> endobj 1171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 205.11 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1172 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1170 0 R /H /I >> endobj 1173 0 obj << /Type /Action /S /GoTo /D [1013 0 R /XYZ 72.0 720.0 null] >> endobj 1174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 217.33 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1175 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1173 0 R /H /I >> endobj 1176 0 obj << /Type /Action /S /GoTo /D [1016 0 R /XYZ 72.0 720.0 null] >> endobj 1177 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 222.33 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1178 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1176 0 R /H /I >> endobj 1179 0 obj << /Type /Action /S /GoTo /D [1019 0 R /XYZ 72.0 720.0 null] >> endobj 1180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 216.77 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1179 0 R /H /I >> endobj 1181 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1179 0 R /H /I >> endobj 1182 0 obj << /Type /Action /S /GoTo /D [1022 0 R /XYZ 72.0 720.0 null] >> endobj 1183 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 553.5 234.934 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1184 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 553.5 539.998 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1182 0 R /H /I >> endobj 1185 0 obj << /Type /Action /S /GoTo /D [1025 0 R /XYZ 72.0 720.0 null] >> endobj 1186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 210.67 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1187 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1185 0 R /H /I >> endobj 1188 0 obj << /Type /Action /S /GoTo /D [1028 0 R /XYZ 72.0 720.0 null] >> endobj 1189 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 529.5 195.665 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1190 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 529.5 539.998 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1188 0 R /H /I >> endobj 1191 0 obj << /Type /Action /S /GoTo /D [1031 0 R /XYZ 72.0 720.0 null] >> endobj 1192 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 237.88 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1193 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1191 0 R /H /I >> endobj 1194 0 obj << /Type /Action /S /GoTo /D [1034 0 R /XYZ 72.0 720.0 null] >> endobj 1195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 244.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1196 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1194 0 R /H /I >> endobj 1197 0 obj << /Type /Action /S /GoTo /D [1037 0 R /XYZ 72.0 720.0 null] >> endobj 1198 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 247.32 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1199 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1197 0 R /H /I >> endobj 1200 0 obj << /Type /Action /S /GoTo /D [1040 0 R /XYZ 72.0 720.0 null] >> endobj 1201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 246.22 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1200 0 R /H /I >> endobj 1202 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1200 0 R /H /I >> endobj 1203 0 obj << /Type /Action /S /GoTo /D [1043 0 R /XYZ 72.0 720.0 null] >> endobj 1204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 247.32 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1205 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1203 0 R /H /I >> endobj 1206 0 obj << /Type /Action /S /GoTo /D [1046 0 R /XYZ 72.0 720.0 null] >> endobj 1207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 241.77 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1208 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1206 0 R /H /I >> endobj 1209 0 obj << /Type /Action /S /GoTo /D [1049 0 R /XYZ 72.0 720.0 null] >> endobj 1210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 242.88 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1209 0 R /H /I >> endobj 1211 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1209 0 R /H /I >> endobj 1212 0 obj << /Type /Action /S /GoTo /D [1052 0 R /XYZ 72.0 720.0 null] >> endobj 1213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 246.21 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1214 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1212 0 R /H /I >> endobj 1215 0 obj << /Type /Action /S /GoTo /D [1055 0 R /XYZ 72.0 720.0 null] >> endobj 1216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 253.44 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1217 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1215 0 R /H /I >> endobj 1218 0 obj << /Type /Action /S /GoTo /D [1058 0 R /XYZ 72.0 720.0 null] >> endobj 1219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 241.22 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1220 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1218 0 R /H /I >> endobj 1221 0 obj << /Type /Action /S /GoTo /D [1061 0 R /XYZ 72.0 720.0 null] >> endobj 1222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 257.33 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1223 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1221 0 R /H /I >> endobj 1224 0 obj << /Type /Action /S /GoTo /D [1064 0 R /XYZ 72.0 720.0 null] >> endobj 1225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 200.94 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1226 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1224 0 R /H /I >> endobj 1227 0 obj << /Type /Action /S /GoTo /D [1067 0 R /XYZ 72.0 720.0 null] >> endobj 1228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 208.15 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1229 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1227 0 R /H /I >> endobj 1230 0 obj << /Type /Action /S /GoTo /D [1070 0 R /XYZ 72.0 720.0 null] >> endobj 1231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 219.83 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1230 0 R /H /I >> endobj 1232 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1230 0 R /H /I >> endobj 1233 0 obj << /Type /Action /S /GoTo /D [1073 0 R /XYZ 72.0 720.0 null] >> endobj 1234 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 244.27 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1235 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1233 0 R /H /I >> endobj 1236 0 obj << /Type /Action /S /GoTo /D [1076 0 R /XYZ 72.0 720.0 null] >> endobj 1237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 264.81 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1238 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1236 0 R /H /I >> endobj 1239 0 obj << /Type /Action /S /GoTo /D [1079 0 R /XYZ 72.0 720.0 null] >> endobj 1240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 289.25 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1241 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1239 0 R /H /I >> endobj 1242 0 obj << /Type /Action /S /GoTo /D [1082 0 R /XYZ 72.0 720.0 null] >> endobj 1243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 260.91 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1244 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1242 0 R /H /I >> endobj 1245 0 obj << /Type /Action /S /GoTo /D [1085 0 R /XYZ 72.0 720.0 null] >> endobj 1246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 212.61 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1245 0 R /H /I >> endobj 1247 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1245 0 R /H /I >> endobj 1248 0 obj << /Type /Action /S /GoTo /D [1088 0 R /XYZ 72.0 720.0 null] >> endobj 1249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 222.61 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1250 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1248 0 R /H /I >> endobj 1251 0 obj << /Type /Action /S /GoTo /D [1091 0 R /XYZ 72.0 720.0 null] >> endobj 1252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 223.73 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1253 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1251 0 R /H /I >> endobj 1254 0 obj << /Type /Action /S /GoTo /D [1094 0 R /XYZ 72.0 720.0 null] >> endobj 1255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 224.82 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1256 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1254 0 R /H /I >> endobj 1257 0 obj << /Type /Action /S /GoTo /D [1097 0 R /XYZ 72.0 720.0 null] >> endobj 1258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 251.2 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1257 0 R /H /I >> endobj 1259 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1257 0 R /H /I >> endobj 1260 0 obj << /Type /Action /S /GoTo /D [1100 0 R /XYZ 72.0 720.0 null] >> endobj 1261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 239.26 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1262 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1260 0 R /H /I >> endobj 1263 0 obj << /Type /Action /S /GoTo /D [1103 0 R /XYZ 72.0 720.0 null] >> endobj 1264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 263.7 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1265 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1263 0 R /H /I >> endobj 1266 0 obj << /Type /Action /S /GoTo /D [1106 0 R /XYZ 72.0 720.0 null] >> endobj 1267 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 217.5 205.214 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1268 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 217.5 539.998 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1266 0 R /H /I >> endobj 1269 0 obj << /Type /Action /S /GoTo /D [1109 0 R /XYZ 72.0 720.0 null] >> endobj 1270 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 257.33 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1271 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1269 0 R /H /I >> endobj 1272 0 obj << /Type /Action /S /GoTo /D [1112 0 R /XYZ 72.0 720.0 null] >> endobj 1273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 255.67 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1274 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1272 0 R /H /I >> endobj 1275 0 obj << /Type /Action /S /GoTo /D [1115 0 R /XYZ 72.0 720.0 null] >> endobj 1276 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 254.55 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1277 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1275 0 R /H /I >> endobj 1278 0 obj << /Type /Action /S /GoTo /D [1118 0 R /XYZ 72.0 720.0 null] >> endobj 1279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 247.89 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1278 0 R /H /I >> endobj 1280 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 169.5 539.998 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1278 0 R /H /I >> endobj 1281 0 obj << /Type /Action /S /GoTo /D [1121 0 R /XYZ 72.0 720.0 null] >> endobj 1282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 245.11 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1281 0 R /H /I >> endobj 1283 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1281 0 R /H /I >> endobj 1284 0 obj << /Type /Action /S /GoTo /D [1124 0 R /XYZ 72.0 720.0 null] >> endobj 1285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 244.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1286 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1284 0 R /H /I >> endobj 1287 0 obj << /Type /Action /S /GoTo /D [1127 0 R /XYZ 72.0 720.0 null] >> endobj 1288 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 225.67 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1289 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1287 0 R /H /I >> endobj 1290 0 obj << /Type /Action /S /GoTo /D [1130 0 R /XYZ 72.0 720.0 null] >> endobj 1291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.56 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1290 0 R /H /I >> endobj 1292 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1290 0 R /H /I >> endobj 1293 0 obj << /Type /Action /S /GoTo /D [1133 0 R /XYZ 72.0 720.0 null] >> endobj 1294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 265.12 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1295 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1293 0 R /H /I >> endobj 1296 0 obj << /Type /Action /S /GoTo /D [1136 0 R /XYZ 72.0 720.0 null] >> endobj 1297 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 226.78 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1298 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1296 0 R /H /I >> endobj 1299 0 obj << /Type /Action /S /GoTo /D [1139 0 R /XYZ 72.0 720.0 null] >> endobj 1300 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 245.11 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1301 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1299 0 R /H /I >> endobj 1302 0 obj << /Type /Action /S /GoTo /D [1142 0 R /XYZ 72.0 720.0 null] >> endobj 1303 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 73.5 201.179 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1304 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 73.5 539.998 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1302 0 R /H /I >> endobj 1305 0 obj << /Length 1306 0 R /Filter /FlateDecode >> stream xOGv=?<'ioz/ DbfC#{?:W߿߼{_^}}_Gߧ7jܾuOᛏ??~7ߜ͇_X8OxS<$ U%n`=@ XkZ@kZE0D0D0D0E0E0E0E`&]v"8Dp)S.\"@08@|&1F ````````&Mv"Ep!SN\"Dp<@0`YA0+f"""""")?y08߼ocēyOr"EK,bO.bO}bu}b/5YYYY&Y&Y&Y&Y6ldȲe'N,Yd9r$E,X{rK-^j'PW'Reeeeee\|Xgkg'<)*T'꽀_꠺S.j bKMAAAAIII,Y/_AuPݩ^RJuzJ= I5Y.\dr^/XP ˽_j & $$$F,Y6dɲ A,'YNd9r"%yebXf,bE,eV*Y2222226<k.={=/<<9{Pݩ^P-P7/\!u˻j[:22222ɲe#˗.K.ԍ)|zH=߅:&I,Y.[p˻_X-P/U,\2222222ɲe#F,;Yvd9r I,'Y.\d2[p˻_X-P X-rddddddryC]z{wh/?ۿpJ,|JayXnTS:Mu4eT.Rݳ7Iu$/goꞽQN{F6Smr |QrY>)J_.:Mu2EqjF!(TjTRJQM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]Hu('={TrRݳ7+IUz2rߖy:uy|iE7Mu4iT.S]'W\I^HuO('=TrS S S SMSMSMSmLuE_KW˛Q,OzrSLu"=TJB{rE9ɕTrS S S SMSMSMSMSmLj7nTS:Lu4iT.Rݓ+IuO('=TJJ{rEg8LM7xaZl KEy7'X_u%7iT.S]ZRփTk!ZHRTk%ZIVS S S SMSMSMSMSmLlą<-ߝM\nlB,7eTAqjF!(TjTRjaaaaiiiT6SMj7aTNS:Mu2eT )TNS:Mu2E{E9 TrR,+ Lj;Uy+y/qXwZ,7eT 夺'X`QN{%y%=TTTTTTTT6SmMj7nTS:Mu2eT 夺'XR,IuO('=TTTTTT򨇪i7_[ww_~o/|v ^h##p$|P>n|UMuPN{#y!=¡TGJ{C6Smڶ>x3|P>n|V˛妺Lu"=¡TrR#Iup$G8jjjjjjjj3fTvSMu0aTNS]Lu"=¡TGB{C9夺G8jjjjjݾy"}?w?=C? fOpB([(f|0aTNSLu"=TxLB{Q©ow//?xӓ ,g|8p=׊Nf6<-߆rSM0aTNS:Mu2E !'_B !'_J !70004444fTPp'-{((yZ>(CAn|%o2eToCAI6ToCAI6m((6SmLj7nTS:Mu4eT.R %'PBz JNYI6(?_(˻KzQN ZHRTk%ZIVRTTTTTTT6SmLj7nTS:Mu4eTAqjTjRBQI5*F50004444fTvSMu0aTNSLu"9NG|R>i|%PN{"y!=NT8rRM5L5L5L5M5M5Mj3v|KW˛Q,O<,7iT.RIuS$/)H^IuS(70004444fTvSMu0aTNSLu"=NT8rRIuS$)jjjjjj^7PYLQFzs9"Em.Im.i6BN zj-Z BjZ6SmLj7nTS:Mu4eT.RT 8H5 F!(TjTRjaaaiiiT6SmMj7aTNS:Mu2eT y |<,/+7'夺]vrR׮HLj3fTvS:Lu4iT.S]Hu_B9kW$/]T+WR׮PnaaaiiiiT6SM0aTNS:Mu2EIu_B9kW('}T+jjjjjjV y8v_J|_?=Os<ֿJ>)<-Jw˗ zj=HRTk!ZIVRTk5000444fT6SM0aTNS:Mu2EqjF!(TjTRJQM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H5R̓T U[ܾXnEuYf92('ս[aaaaiiiT[q!ѕ<,/_^Tx%oOow<-7eT.RT ջBQH5 WrRJQM5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LujAYH5 f!,TjVS S S SMSMSMS4=?u!CNcO)M0aTNS:Mu2E{G9夺zI^Iu(70000444fTvSM0aTNSLu2E{G9T\rR)'=ףTTTTTTT6SmLj7nTS:Mu4eT夺zRs=Iu$z͖fKiRl)mt?{Ozf2=l{=\kziWQ=>ϜNiAu,Yd9r$E,Y.I-;X}ɝb/,,,,,,,Y6ldȲe'N,Yd9r$E,X}UE,5uR徢*z:2222222ɲe#F,;Yvd9r I,'Y.\dr_6'X}ɜb/\Nj O'i@~ʜO[=^ ޿y߮yx',/}%oO}%OTNSLu"}3.IuߌKBf\T͸(70004444fTϓkq!?.(O ay|Q~dP,7eTqQNf\夺o%y%}3.M5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]Lu夺o%y!}3.IuߌrR7TTTTTT[=Tt_ԛ~8'8 %O{CknzB %'ۆ֒mCkM5L5L5L5M5M5Mj3սu߯G/֒7'{CkAZT.S]HzB %'ۆ֐WRmh-6SmLj7nTS:Mu4eT6ToZKN %'ۆ֐WRmh-:y~d,2?݅X7߼<]W<;֟<A|PWFliOjدb?y5vU]iWeU~U_WeUqUf\WeUyUf^YWeUuQq#Ka(sZxQQ륰^}z-*WeL\ɫ2yU&UvU]iWeU~U_WeUqUf\WeUyUf]YWeE‹2/enX^ />֋2&WeL\2qU&U}ZPUOKnӒg;_d8'OtOC}2$˻} ɛJdHnaaaaiiiT6SMj7aTNS:Mu2eToɐToɀ>>>jjjjjjj3fTvSMu0aTNSLu"}2$'}2 /zOzOToɐTTTTTTTom5'yYdnP>o;:zy؇7@R,byZ>(:Lu4iT.S]cQN{8F9TprS S S S SMSMSMSmLYhW~XwZ,byZnT.S]cI^Hu('=TprS S S SMSMSMSmLj3nTS:Lu4iT.S]cI^Hu('=Qnaaaiii-T X^T<'{xd[(f|A<,7iT.S]7TRݛGPN{+#(70004444fTw_{<-[(f.S]HuoA9#('սy夺7i.S]LubPN{!y!=ŠTrRS M5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LubPN{!y!=ŠTCJ{A%2UYb|~黏|۟}} E9No탼[(fvk?!y=HZRBj-Z+Jjjjjjjjj3f{5ƕ|]$˻=tY>)CrS]Lu"ErR ] /zHNzHnaaaiiiT6SmMj7aTNS:Mu2eToCI6tm"9ކ.WR ]$7000444ջ#yYe~~[ӗ7<}DFQay|Q70Y>)JN+ALޱo/{*n|X%y|Rw<-7eT.RݣIu$/GPN{@6SmLj7nTS:Mu4iT.RݣIu$/GH^Iu(7000444ջQC~[ni2^o !^/{ûL'%v<À`2 dVf|2+yZ>(ߟJj7aTNS:Mu2eT”@XB{aIuo L9 )7000444fT'O˹j/'7'YAdVT.S]Huo L9 %/7T’WRSnaaaiiiiT6SM0aTNS:Mu2E{aIuo L9 )'սT”jjjjjjm:7l3(<`gg(%?|?7|ûo><GyOi|<,/Z\Λ夺WQN{aaaaiiiTKӅE7'X2eTU@^$y!ս rRݫ('ս rS S S SMSMSMSmLj3nTS:Lu4iT.S]WQN{T* Iu^D\ף>3 s?< 뾯2e; 3'OpfI~Q,jCTj ^ B9 6SmNc/ѮgAyX-_jy|R>i.S]Lu^ B9 RݫA('սrRݫA(7000444fT6SM0aTNS:Mu2E{5夺WH^HuTj+ jjjjjjE*ydD2>ǷǷ?}|/Vyy'~+,T+:.Uqꗪu3ʱǕc_˕c_˕c_˕c_c_c_c_c}\:qc}^:ұo}tۥc/~K~\:ұtc?/yدK~]:ʱʱʱʱrGr\9QW}+>c}\:qc}^:yطKǾ]:ұ}tc?.q؏K~\:ұtץc.uqqqqgr\9YW}+>c}\:qǥc}^:w{y=ƓzTJtڢW˛Q,O<,7iT.RBNY~9/z兜T7r^I~3 6Smz,/in3 yX-_mfy!o2eT ,/zBY^I~3 9ofayv̽2Y><ϳEFf|/(OTrR +Lj3nTS:Lu4iT.S]AqjTjRJQI56SmLj7nTS:Mu4eT.R Iu/$/^PN{xA-zyޗN1?|}_`~~<{%f|_*yZ>(JQ000444fT6SM0aTNS:Mu2E{GIuo(y!ս#夺yrS S S SMSMSMSMSmLj7nTS:Lu4iT.R̓T ys~XwZ,byZnT.S]EI^Hu('=.TrS S S SMSMSMSmLj3nTS:Lu4iT.S]EI^Hu('=.QnaaaiiiiT6SM0aTNS:Mu2E{\D9q夺EI^Iu(7000044՗A(> 4#E˻\ɛwC򻻂\rR+ȅ]AzwW+9BL˻\_Jw/ r%oO_J2eTJNwwR+ȕT r%'ջ\M5L5L5L5M5M5Mj3fTvS:Lu0iTNS]Lu]AzwW y!ջ\I Jwwjjjjjj݈!?O?}|AWw;w}~zûc=y҇!-|<-ҒEy7nTS:Mu4iT.R{PN{ =o('սT7jjjjjjjj3f*17J/:R+ ;Kԍj\dreb7Z,7PH-{{ronueeeeeee#F,;Yvdr A,'YN\dr˽bw޿FjܻH-{222226g=I~1Wտ}Жǫqy;o79^W鿶Wx/?gG~w'7~}loG*̲ endstream endobj 1306 0 obj 14737 endobj 1307 0 obj [ 1144 0 R 1145 0 R 1147 0 R 1148 0 R 1150 0 R 1151 0 R 1153 0 R 1154 0 R 1156 0 R 1157 0 R 1159 0 R 1160 0 R 1162 0 R 1163 0 R 1165 0 R 1166 0 R 1168 0 R 1169 0 R 1171 0 R 1172 0 R 1174 0 R 1175 0 R 1177 0 R 1178 0 R 1180 0 R 1181 0 R 1183 0 R 1184 0 R 1186 0 R 1187 0 R 1189 0 R 1190 0 R 1192 0 R 1193 0 R 1195 0 R 1196 0 R 1198 0 R 1199 0 R 1201 0 R 1202 0 R 1204 0 R 1205 0 R 1207 0 R 1208 0 R 1210 0 R 1211 0 R 1213 0 R 1214 0 R 1216 0 R 1217 0 R 1219 0 R 1220 0 R 1222 0 R 1223 0 R 1225 0 R 1226 0 R 1228 0 R 1229 0 R 1231 0 R 1232 0 R 1234 0 R 1235 0 R 1237 0 R 1238 0 R 1240 0 R 1241 0 R 1243 0 R 1244 0 R 1246 0 R 1247 0 R 1249 0 R 1250 0 R 1252 0 R 1253 0 R 1255 0 R 1256 0 R 1258 0 R 1259 0 R 1261 0 R 1262 0 R 1264 0 R 1265 0 R 1267 0 R 1268 0 R 1270 0 R 1271 0 R 1273 0 R 1274 0 R 1276 0 R 1277 0 R 1279 0 R 1280 0 R 1282 0 R 1283 0 R 1285 0 R 1286 0 R 1288 0 R 1289 0 R 1291 0 R 1292 0 R 1294 0 R 1295 0 R 1297 0 R 1298 0 R 1300 0 R 1301 0 R 1303 0 R 1304 0 R ] endobj 1308 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1307 0 R /Contents 1305 0 R >> endobj 1309 0 obj << /Length 1310 0 R /Filter /FlateDecode >> stream xTMs0W=D]B3y´4b˱''ćہ 0yh޾ᾈ6ˊ= M cH$)) poe7kfM@WOF+8ITnwS>|M@ 'j䊔1d\A^Ʈm!/o ξGJAoE_GN?c<# :KӺ[{yEYK($$:V$ENJ{EO 9fj`WP£kXS\J44M#%zʟ5n45/P`7:3&7}. XGˏCmڳ y~pFbZy0anώKfD ώJjx|eV6C endstream endobj 1310 0 obj 489 endobj 1311 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1309 0 R >> endobj 1312 0 obj << /Length 1313 0 R /Filter /FlateDecode >> stream xUMs0+JC(vTOg21S,>wŇm0pLb<?},˳Àqc!9$n0nY_=P#kv_~m!_ᷣ ߝDz❳ J's|Nz.'~8DKj[g(KU]?@ u`Ů}Mʦu8~ig5 рGs\lsp@PRJΗ0u{[$n3er'2e1Q\&\[gaUoL]AeLEuhhbld$k6y=UN/="E(eÖ4WRfƱU)<+juLi/33O  )fjF1w1&STo$a{UHPo!o^Q*.<6lC}1ZJTbwh=N)ߣ cO(co0b/ Kag]^ endstream endobj 1313 0 obj 590 endobj 1314 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1312 0 R >> endobj 1315 0 obj << /Length 1316 0 R /Filter /FlateDecode >> stream xUKs0+B9vz´$X1L Gާo>0 ËRɥ֚K8D[pf概(.k|5:JV0Β]v]pgy\A(,CpBPSJŠKY+suUl sN$' J2z'{S&5!.I 䩓[3Udfv$matc@&c*%C̝MDQADQC<ۢz4gTВhFҟ 8V,Eɯ8o>.F= ̤"AeN:l 9"7̮$nv4)*c',^yfi}YN}D7kp~g~Q&E|f6޾Y(` geѥ[fݻR<5sK݌Qae>CؾO4Akqbѡ&woߎE9FIxtp\> endobj 1318 0 obj << /Length 1319 0 R /Filter /FlateDecode >> stream x͖]o0rwjUvUQJ-;#M0HkC^9/ֹP d71C,U0`{F{ڎu7Ke/5FkE*6 wއ{9F!}./}!"+eԋJo 6o!}d/*j:T8tH~QAE)M]M~˶<$1Cje]2Gs™a6#@=NIč pŹ !$ό~4Ь'vfwAyyNA$%aڂ(OY^iJUOGHGxCk3E=ϏjwK̗$m^tqtX'!.K09視z ㄪqd8u=+a&GkA*U Bc{f&7yrqQKOAczZ؂YىPAר5Ԉ\4ȮOqd=B#hס6H4 ui}(Mr+Q*kQK50pSQ1hz%{~aW M9Jm#1@q9lJ+aDm&ghgU_C endstream endobj 1319 0 obj 639 endobj 1320 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1318 0 R >> endobj 1321 0 obj << /Length 1322 0 R /Filter /FlateDecode >> stream xTMo0W̱= skCUE,1l~[@=损g| -M 1$x8p<>0c~!>Vp6 hn ^^"rCe2k!yVIHYkIl;zw\ajUא`_b7Y_'ٕG~f 3G!׾jZD/U].y3?M[VѤcNPIHD|$v\{7')|(Kn]- +6\>,NSxOĞYy,vSVM T{ڔL$M2%/3d k~p;u}(/QѧԋVuQE=c4(oŮy:ԞHȧ? ¾wM(D1ǰo9}@T%aNjG endstream endobj 1322 0 obj 474 endobj 1323 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1321 0 R >> endobj 1324 0 obj << /Length 1325 0 R /Filter /FlateDecode >> stream xTn0+.(mތ! %-)ܢ_>$'-#&a crvOϥ[&xEO=Ad 8., ^۱_5kt{g1Bx-&B]iCXEYK ![>[+$$!ed;p6~k5dߢ(Y%t~WLٲziݪ,QM`[7&/ۮYc}SN$F\ r׫BxõbSERGI&si[򲀕Zz 6*%I\S}5-ݴUpFKUuBi ƒs*8FH"~w"c\ZRV'(O(P-s~6ewDODG0C muS稧=K<4=kw1ŰfۉQ8t4dٹƮHl endstream endobj 1325 0 obj 488 endobj 1326 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1324 0 R >> endobj 1327 0 obj << /Length 1328 0 R /Filter /FlateDecode >> stream xUMo@+ͱSDj*|1Ccy3ơaޓ|]E޻1 @ Bᎅ€]'vӏqX;-rw}z]x-F a}_dO1|"c?]-K+N>g*IoE_+َWv~[hByďj "ޗ*zGM4iS&G % ]#W(mJhi"=&.Vo YVE]ò> endobj 1330 0 obj << /Length 1331 0 R /Filter /FlateDecode >> stream xTMO0Wqw%2}#EA+͞e(b_aki,/ʴl@Vqkbk55i1yAW?J֡UBcwHEʦ+7xH(?f:2(4ی D)iN7o⃴$GK{?<~o‘?P B1l' u i(yDbp&~ݵ endstream endobj 1331 0 obj 471 endobj 1332 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1330 0 R >> endobj 1333 0 obj << /Length 1334 0 R /Filter /FlateDecode >> stream xTMs0W=D]B9v1)0!d\kOm ƙN}W6 0y轷,  ~`-x(e$E v ~ ;6gaA#^(|U!SS !]>hi8@"59[ysX&A:|үc:HV+zeΚ˦u/+ ;6`_ r[Z".ծ_^]y$W(ҩJ'`H҈z^ T/L80:%cB2E+ϺϗfQ,8mOQVDHgbJi2){EܪH my{w>W8 ]^uvKī/\~CЀ6b7Y֛y#ށ#oNd6v>IS U."[?'c0+s~J[OQ(|&#Ͽ+ endstream endobj 1334 0 obj 476 endobj 1335 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1333 0 R >> endobj 1336 0 obj << /Length 1337 0 R /Filter /FlateDecode >> stream xTn0+.(XT#B{HBh[-9"_R/۲2La. @E=uM sH!)pp~q_ f;k a,gCSz[҆fcS!^U+RRqIܿ[nlzd_#_R+;פlZWp0G!׮N r[ "Η}YUowVUimk5#PIHDHІ\h_J"=&Ds8g5$&uU]*JvIE1r ;z΋} Tsё1!E-i֍\3#lC}O;dw/ y] 5> endobj 1339 0 obj << /Length 1340 0 R /Filter /FlateDecode >> stream xTn0+HtA{=$AJ,KAпPmVoIDfyP<.b=|-:L%!1ܲ_K/0X5_[%@&n]0hk1*6GqO_#PNZ!'Nj!Hpzϫl I$?ė Y%;kk\6CZ찂lh j_ j;]6>zy$y')4o ZSet1ǁ:6uKd7EVue)t 9FYqhߢT@'Fz뼏ɵI+F?F~lξ+ce-WN{ٹS?C2륂!ȫF jYLG"]gdrs ;4Ddp#:|be=ưkW棋9@Q( Jd^oj1 endstream endobj 1340 0 obj 470 endobj 1341 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1339 0 R >> endobj 1342 0 obj << /Length 1343 0 R /Filter /FlateDecode >> stream xTMo0 WQ,Y=h]Q8H4n0ߏG;w[G>|$ _7a`^L%P ؀Ԃbk a  ;gla?"B=<2b>YФs!\;x4_nGHC_??B=K;*IY_%Yߊfx6GVVˠCDr8le.SUѐ h$zHg4F$'fï""}"5b Ԣm*K +{>XƘmO?yR@N g %5i)uIܩHF:ҏl{gqV p{[|a^7,l:7qxMi\F:O R.j_}9pbZFcL0$%3>mHIg0ţ] _3 endstream endobj 1343 0 obj 476 endobj 1344 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1342 0 R >> endobj 1345 0 obj << /Length 1346 0 R /Filter /FlateDecode >> stream xTMo0+J;slVm8YT6*dYayc &xc #ZP€_up|XϠ ׷指 `uPOIk!V+I[kIC,Y#H6p*[|Wtۺ-$߃/J;쪯C7j Ӄ8 a[-".ۦs( )c$H*D9STZD5g!2~BQu<H\ۺk"sfYz6O;T^Yy AEMmю>V kbk#,Jb#?r&V<ڈ(f ҍ;\Э]m.F K˼Gwu]^EmzZ;l4||U>B*Fہsv-xHp[8(K`2}ƅw?G:p?9Wqo|D=Qtv R endstream endobj 1346 0 obj 551 endobj 1347 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1345 0 R >> endobj 1348 0 obj << /Length 1349 0 R /Filter /FlateDecode >> stream xTr0+$@(NN{'Ls3b+6WD x桷 apTb $!FC 7,NӇ{k߬d;!Iol ?6g5!_7kA(x1\dwg7^z IZ:'Nz ?YZ_nn3wmuh=*-QQ_^OMPơ1c8L 2[;aӱY(ńRǙs.h6ɞ! :a.J`~FEeL8;xl`$(Mm,/JSz1EVgTtڍ܌6Fn;]t&>IS\,OF&h~\AJfMWӂ"5=-fEnj:bNlM5봂#zݧ8mn!sh}]: Cfy7#F\ endstream endobj 1349 0 obj 509 endobj 1350 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1348 0 R >> endobj 1351 0 obj << /Length 1352 0 R /Filter /FlateDecode >> stream xUMo@ﯘc{vvX6ǪjOCU&1 `YÎ ƒMyP|_XJ<CCH(Opna- ݎe;vka2?"=3}؊&\G#!!<ϑ=Kig%Bɺ Z퇛A endstream endobj 1352 0 obj 524 endobj 1353 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1351 0 R >> endobj 1354 0 obj << /Length 1355 0 R /Filter /FlateDecode >> stream xUM0+ޱ=k?{P5Z=lW+8 J,E N6@U Qϛb? $|<sE1`Eݠ3+jflԍD n"9B샮#QOw"`)ڐC)%|-ܽbQ5Yը=_b9Wؙg%m bgvA‚p8 %BӀTAI)}.U]R׍쳵UwM@|SZ6k֐7/ת]˲v`M mUnaā.1 J86oCQVM8DDD 'P1E$]fZy,BAD7cI&*_\|LLѾ&f8]~r>`DKفdREvz'o2/Zn뼬u0:0MYhZ돈>}&;p^#fx-%F!=~Brf.P%(//* endstream endobj 1355 0 obj 556 endobj 1356 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1354 0 R >> endobj 1357 0 obj << /Length 1358 0 R /Filter /FlateDecode >> stream xTKO0WquZ(5jb$6e*U㿷,qM 3ef:>h8dc $ BLDBʅ,ZyQ), 2w o^ xP\t6ʮ|v \v #9Iy  e5aHR p- )?O7 endstream endobj 1358 0 obj 408 endobj 1359 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1357 0 R >> endobj 1360 0 obj << /Length 1361 0 R /Filter /FlateDecode >> stream xX[W8~ϯ9`lq ]v) MhJOb+ddɗ(1}ږ֌͌Fs< Ssɳ,Cc`ʬԔ35[ճ``D߾7vB\m&Z .fkY&-P`4۠oG7c4 4&T "Hx=#iFh`4;Xm?l>RE_PtPb־6 LL9٥RÇ+Eg:lӴ`oQQ0=sG&&:ou,hvkjc(eK` &MhNj9\;@oI+igtቡc VvAN ۆcbJ!ɖ*Aa[8á@< eyY~m7 1:Mϰ_jD%Tce~0?]fqH}\zM]}:(A7$Mcxk"`w08$Y(%T,Шa\6~OuBx'_S7]ncFī,vPnz+w[13kC}] iB%ඊ:j˜3htau˅e7ΰ_BC?N_ih,lĵ Ь8J{+FL-]fFfܥ뻪=Ւm7yfy.ڭ;3o<| R|فm3~W?O s endstream endobj 1361 0 obj 1336 endobj 1362 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1360 0 R >> endobj 1363 0 obj << /Length 1364 0 R /Filter /FlateDecode >> stream xX]w8}&4T/ӷ|8춵8CA`D!eDm$ pu5z!Avl.Z@aa~Gܭ.,m0z? =px;KVa]Go=dc4_ -0rHo)74eDQeyTT>&gwl=&FI~cAA[L n cNSQ%}.e ?VIwj`#Xv0I !!m݆c ӒVh9}!FiFZLc9oMȒp"=vl D/9+pе`> 0~mX.&puDQXN~m74gTQLъ@UݗiMQO )a?bB1(+s6`i^WtR3жXloxӶe:S Ok,S_Uޕ/GSN !yGHN/L3#Y%V?6* UQs녫LVs@KNO;o$>`v" ՜&bQ@3'Cz@7<&Le n%!-s^_jNRԬ2ā(~e/8 "mc $fvyYr Ktj&'QYFϝE3J{|kF` ~30MS+`JFMy:c;ΈXA˃4dPŕ$~0H+ZGyi QnI5D̢V1J6kh vK3^_ȬXY@2⳯jc,Zh6M~;Bh0ڲn@XcE(y5Oz%v"{vDp/{g7"+tq7Oō6{PNٶ(ɹx_-.>L/nE'҆Nί%tmgL ݾTy5`$v[BL*eT7WF^.6{^v)d('dӤ!%=4F`\.w.Xޡٖ$ab%J NAMwY^$xZc3슂+} Z!F0fb mkEܩח+<4ԕuuO"f~k]}> endobj 1366 0 obj << /Length 1367 0 R /Filter /FlateDecode >> stream xXKs8 WLJԻ$uMqCmk+q~AR/ӶqBB&|ėbgB>Fw,\Y]+-LqG*fDfCЗ7 wa5G7mg7.Lt qM P`8?-F;W)a1Z<@$YAohl <S)yIR$Q|nXVEIrUШ^\W + TrT(f0X YL8yUNK1}H:u`ŇM;LF'ʹ evIkfPKT<_#b~M;mlE<'-GS=w ^7Є_h[m;Eʻ=^eAԫmLfy͉d!wMJHVאUYIVL/P;E 5T3|$f2jqMéd A ˝?,HW wa NqxLQ׺$ˠotl ar}]a0?"C9rJ◇<)OЧʴҚnmpER%NtWiZ^U2,!ZlLz*m]--!'ھJkjNJXdP*{E׻AmS7mZaΈ'u+SFZ7Zۍp;g)x@iESC )p8` q @')-"QHp#PGg1bsPǤ WXlNi=[£ZITT|(I1q8FGu *{)?r|9Ϳ3EE|Tl[#`r/euq[X6tbh|uO$+Ƌm.__nvC|;:o$M1! 8sZ?Nwㄩŧ}[nGvW3]{6/ǞP nWonJToRS#kM+_-oX!{He> endobj 1369 0 obj << /Length 1370 0 R /Filter /FlateDecode >> stream xX[w8~&4[uڸC#l9nHfI330Fߌ.𽐗 (M+,Xk"/lDv}"&˄MlzH0jɇ^ o6+96ZF6|BZ.}={3G&2G ^Z5-uoT|ʥBRpp @ \V(  @A*OyWŋ,EAbjQ -츶AJAFi㠯0S@҂谥>aA \0-QwyFrepipz lk:#yj4ȳ qN%b̳]˳1\m3q nMώXЋ0_zr`HEpA2$QQ J^D!l4ft\:bCFl˅CUKl]:eyv~Йӡ埳˗\tXh |uR0Ǵp6T5B`ݗ^1Rvz훗Э V,Y̵di2X~;?SI y-pZ?D+ֹKi9ijuזߒULZtdžLA<]P ˛^˧ YbiTӌ\GfFll$eX~B>y!>pzW"m"?No'gy؁hctHVe-::h|9Ԗn_fW'q9}HZGHNB endstream endobj 1370 0 obj 1429 endobj 1371 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1369 0 R >> endobj 1372 0 obj << /Length 1373 0 R /Filter /FlateDecode >> stream xX[w8~ϯ۶Pc[֖˒BDg_738bVh;ZΞre mhk'@P|lܣ/go6ѸJi:w% ZE˿fѻcOH7$ʗ6V٦G}`1\)xpU9hQh$N۰-lϓ[cxXuMw)*iU`-e4OfΟ/PHR(1pZ'hD7 D|eHF4 QgJh*6S-i+MH $֭[ox>I ɿZHK"!֏SFp![%UAxuQ@%G" 50o|#y2 UTV9mn!贳5'D?50:{P5d+VaDikI{4C䱥hJ,#['L[Ad<>l[ΑnOSTe@X'e3FvZy͉BMJ@5aWg%IX1m^v_ɛHjhBkMKضI"(GL1i'L--:)kItQi3HiZ⼟=ߔK> endobj 1375 0 obj << /Length 1376 0 R /Filter /FlateDecode >> stream xUMs0+ʭ~LzI0!xc 6tdǀqNMACoi%m Har6-@r1<KpâA4}AMڶX/'s(|uӄ[gBߔ6 й.*+!\ݻ/uMuQ,珀pK]9<`}RS֕.qA{%S"ʞ]% O"髫$/[DO(lu:5 gRza8h0ʼnx9c@C<4I Cg> endobj 1378 0 obj << /Length 1379 0 R /Filter /FlateDecode >> stream xVr0w,H!Ȯ>&]4Ii#[rLq&As,U>|ml+`:`6%_h",VK֓%4"W Q Fi&Qx6>Ѥ#eS<\pɽKvN@F fa<_¾ܤ:|?d>).NhqC<N.k =̘Yi3}si-×TjNYmd r3REDM(m,r(w(t/EUT4y`.ӥ̚;LUJ]}dK݉ Sk[hjx(f^TbMY.'%~ś4Hk7POF s<6(w CdD0 Z'm(H*HWuvdb P!ڭg/U:\1lP>*zU편.95Cτ'scn;~QN[wح%:f"{Hc-_B˸c9:/2y=Pq{}-DGYYո(JzJ%:MK_m ƶS Jb.ۨNS% 7ɏ7j~ݦu endstream endobj 1379 0 obj 667 endobj 1380 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1378 0 R >> endobj 1381 0 obj << /Length 1382 0 R /Filter /FlateDecode >> stream xVr@}0[RY9qD%ǥE@=,6|-T DQnb|OEtb43JL}6c?L~`^~=Q(L_|xcUq endstream endobj 1382 0 obj 674 endobj 1383 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1381 0 R >> endobj 1384 0 obj << /Length 1385 0 R /Filter /FlateDecode >> stream xUMs0+BBӦqʹ4Fi2dÉMMc1ݷO( Eb[d}:.Pa3E33bfϤt+i/-!> endobj 1387 0 obj << /Length 1388 0 R /Filter /FlateDecode >> stream xTMo@+]ͱRSFQ{H# uvc?S@1of13},J XMqP\q.Xhy_ac/hBY's8Ƅ{t,qLF )to=YZ> endobj 1390 0 obj << /Length 1391 0 R /Filter /FlateDecode >> stream xUMs0+ʭ6Ўk=6MF8i}V|86$ x,桷,.RqM11!\h `N펴ڽM۵h{NP\]##SkcgB_6 }輽Q*#!\՛`<[x,in0Z]]C.e*}Uʪ8$itPw^ H}pDPci]S}quv?Л6%)t-ڱ#O 3A)긻hsbCQ78KCL mn3IkY$6J!1V$,JZ5uou,_ĴTu&%|Ԥ3qA\ʭ#J1DD!}-̕\$[Es3YEfGj/\>r[u.VzXA)mҪ`'#D)6i{wqeS.vQۓvK۹zOi0*z+mnjy.[ R;pE #7_NoFIp.;e{aWy endstream endobj 1391 0 obj 572 endobj 1392 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1390 0 R >> endobj 1393 0 obj << /Length 1394 0 R /Filter /FlateDecode >> stream xUMs0+HB [;m:7LzH3l-p2]`<}H+Rq.U1\bL!\h; `F팴L۱h0_NP##Sk7Ψ#+mϡs~^U+\ًCWp3xjQ$ͧp- ]~5ܫe>U)Nj~C zDbS% s&苋$/ZƥiMrS^u8v`D\JVaƹK< )<֏s%CL.y3͙P1ir7<@kX3I3YǼdH8Q2PAMzCZ#(7­F)r[& kaB?JI쬊'xd9L"~A"TD֋ ~[u U'YgiP K~6fU9;XxT=b]%BhNꧨ8zPC5ίӵ1:+ ,;]}Xu"ӣ@RkedpbOf5G=hV :W6 J.v1la9o'+-Q익\jE/ endstream endobj 1394 0 obj 609 endobj 1395 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1393 0 R >> endobj 1396 0 obj << /Length 1397 0 R /Filter /FlateDecode >> stream xUKs0+BӦIä440da`&ౘ}|Ү#(!Z:c8obL"ܲh `Digگ-Dp2q\Ot.7;c([i5qK'k{qp.ש)!bytaQ _N7E_$?Evm(ՀpJvsSFDSQssrU֬.>̢|Y64:TB 9LP00 E.%Ţl\ NT0L>#a>*)J<ϳSՖ%~K;a\I9}8&|jH`1GǨ`m/v遅,\i#7X@OPIVO;l`Ť!rr#n맢z[du& 穉vX~ dHc'$BC,zpZ`vwմ{ת ڤ쥤G6iKl㩾'ûa¾3hL:ɳcM0J$7sGlZ3D6+)["F0azRΔR䯬M endstream endobj 1397 0 obj 641 endobj 1398 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1396 0 R >> endobj 1399 0 obj << /Length 1400 0 R /Filter /FlateDecode >> stream xUMs0+ rkM'=4IiFi0؀8& 桷zҮ;(apV-@q.\$Ean@}B팴vcc̡͹E4F܅'1'U/bp|sn+&t)^>Dpm/n>\\d67:5DY 4=A,M`gw:e]IEr-(UZ (zTFDӲȧ,N*!&} \0)[dA 9LPpuh8D{oU p gRvV#Rx+Tcje=BhIߐW`,)Q܎ caRϗZ+,T^M"S+!#.=ݳ'CŸ &Bf=;Y0Ha'Y5gŤ1"<j8Ea*݀ɢijq9p#cHlaS> endobj 1402 0 obj << /Length 1403 0 R /Filter /FlateDecode >> stream xVKS0W챝)B/?ĭ=xe2-#;ÿ qbʥ`g,goӷWB!Yz M`pԽo?ؙp_(|..њ݇;s7Ͻ-"Mqp}cQZE|S<"%\;9daun*6y^$7Xi_Bo]0~kC6 *lZ XeOWC4*TL:U17GGYQj͚J'vVڬM7ֽf; #p&(e8;?.$ Klƞsnp04 1zplK \aeU;P0R*QzSlDRO<9b$Ra2$A$ ZP]ޛNyX23P[4oft3]/ՐgH(V7E5ziy@s__&c<74+-ϒC#iTgPm gNgr2v9q@?B<|LSlzW]ã0H7uReevjIɩV庁mm;]HE:IL@Swh~yX}I'VhnO6oSaWmGfA hˀKʪ/`! endstream endobj 1403 0 obj 672 endobj 1404 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1402 0 R >> endobj 1405 0 obj << /Length 1406 0 R /Filter /FlateDecode >> stream xTMo0+Jk jSVFa](cX6~Оo> p B VLFaB1 X_qbўA 8| ocЙ뉗d/b0 >&YZBrbD/d oln녭 ͧp(@pm@- r_Y6eIHfm;M [pLSEG5ʪ箨{n*,+Y'U  ɹn :S["2,^ z5(>|ejHa3:6&¸#j0^d#(ٙJK$߇,1%ҞcDP.o"TVq燴݂J&fBe:lUl\,"2ogR> endobj 1408 0 obj << /Length 1409 0 R /Filter /FlateDecode >> stream xUKs0+4$BӤēҌbkjQ+~Grj >[~ǀ}e8$Koa $?܇X;lcWԮXwoD~xGhxkϙwh}SQyVZEP"ϕ8p;%s6 ]B0]/@x/aջ3b[M~BhDbK% ;2kWZMX4ɝRGN8)e ́'ᇋx!Lt&$ #LjIjJp[2~+-C5f(ߐs m"A~J*"̷3B9StM_184;EG]?kS,&zRa'ZՏƀ뺄OuZmaEjOSٖV2!Tz׃Cdc u\Aw\!秝 +z2uCve?TՃzΜIKaD{6.ɟ+jl > endstream endobj 1409 0 obj 635 endobj 1410 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1408 0 R >> endobj 1411 0 obj << /Length 1412 0 R /Filter /FlateDecode >> stream xTKs0+V;m:f<+1S0q+!S ~Xvp@{]MilE 1dZسp,6Bg쭟q=a?"@Ytn6w7d/|U!<M!yxVPhW 1"HVp7f 3~jL/dTj!N"{+ַdPwZ dvsNU]ޛlfmfuEgm21Hb"]˝#O"oʏM^6 S>T4euVBEGy?EY5y3P dZZG{EK`ɾ».;pEZIzLgN~?NGiƲF!#-?PZ . U*qH]}0MVUŹ%"&#Clv)*r-Fb/[ E7F>L{dNOt(Y<$Uu_Gae endstream endobj 1412 0 obj 532 endobj 1413 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1411 0 R >> endobj 1414 0 obj << /Length 1415 0 R /Filter /FlateDecode >> stream xT=O0+n|3R*[UK U&$NCſvHH+[9w~aflۊzA  B`>偁,l;=^;E&d1HWnH\*ncvWsW:u/GDؓA<>c$ |(#D CoE )i3}b*fcRͤ,Mmw5D![Jrh-FZ`vlZ$j!Z [UT-"\:z?)t1zӞ>єAc+vu92nqdS!q*s?h0~7_0% endstream endobj 1415 0 obj 337 endobj 1416 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1414 0 R >> endobj 1417 0 obj << /Length 1418 0 R /Filter /FlateDecode >> stream xVn@wH50eJ7U.0Qq'wfLMcsha@X Ĺb !znX;I@'2tuB~Yuw/D.<[xkwch-.}ɏ) ԇ@k]{[_Aw獎O]Cٺun4xЅA6F>$Huh+ɮk~uUUj".5Oy&u|pM0ETl%,b0wh8M3 HWdE/a(⡇[[2ŘWՐ}Lz?q򇑖udJU]ufė%F-}b{ju~)ĮJ`xyv ߰e{3 ,Ukgɠ;: lw֤$U_ꣀxJ̓ѾLkX؊^b*&|ye:U9eɋ4\ɨN[EIR1y }\Cga'Ң*R7(1C#Y縣lޑEWcl4mҌ|S·B̮끌?Dmo|@#aUo~O?:")ަ v9LfF?H AP;1h4]0gO(`$.:9m 8< endstream endobj 1418 0 obj 766 endobj 1419 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1417 0 R >> endobj 1420 0 obj << /Length 1421 0 R /Filter /FlateDecode >> stream xV]O@}WGM,0Ztڨ}M0 3|T`(u_Vۦ˜s{(EÀ{"!௴:V7M S+j" {䊸\>Gͱ $Z!=@Mx*x Aߪ6ڙ_iM/ Swww3pu΋?.>)&l7e}e5D|^ZkVP HgQmmR&P֒􉟜~QD+0J+6l0N0E͌@EcS(@Xc(;I <8}?]$hvEĖ=-K4IΣ:80q,bWJƄ5hEs,򪩱t6 ۔+Ee/4GBn&#چ5em-E(o~aq|70?XfH[.oP`zu8Mgl~}h{E`ICƝ/ AѺHt(M{+@6  ӼX$hUDBY=l<'QV6`^+PdO (.A/&/ /"Xl W:gG}JFfST:*G `*`KP\дPwU{ Q{Ѿ.6eeaA$$E8^/^x<*eqjoiػx>t2S*Hfv>2 42 (P=N35t3KXU o u endstream endobj 1421 0 obj 827 endobj 1422 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1420 0 R >> endobj 1423 0 obj << /Length 1424 0 R /Filter /FlateDecode >> stream xVn0wH ÐejwQF"F<KH﵁y`I7M`4Ͻ\7,6pXdFg}]3읍3%kosuln;]`Cm+`$ۺMH_VEĎa! 8p;eE"l`06Lݖ=CY=A)E E-E P调TmZ!i8@I'zqDZS =jf3*$Mc [WMXH> ++;+4~i=Tǥ,N&cs e.``jNhQ/BRݻX (d`Rl`Z5VJbdm,d-VVjٴ &]5H p מT)dx 3wu-T &T&?0 I|)%J7! eHPNьQwk[pS땝r׷>^3L-N^fE6 ;sNUNԃ^CYJ$Ȱ){k;vdNoP'G[>[7VU endstream endobj 1424 0 obj 748 endobj 1425 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1423 0 R >> endobj 1426 0 obj << /Length 1427 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ>i;3!x-'lJƗN 晷i%<̼]1D؅X Y}Nb~N۱h^Q#B%z]7ǕW"Y.(к~YkEW4jO;qs |:53J,m3s8(:!]_Hh endstream endobj 1427 0 obj 576 endobj 1428 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1426 0 R >> endobj 1429 0 obj << /Length 1430 0 R /Filter /FlateDecode >> stream xVn0+EkMi"1Kr4wHI^HeҐof晚G\ q /F!f} #B4(2 hP='jJ޽'8t_^ޡ@{OnxF"MF0.>@ [jC'OD!9KՇw7W7_a[ѝiONOԪa}-}ڸ#~hL>Rn{qye-@r3 `pRQ7c>pFd*{ 6mYUS&;X tKmMqEKj?vx<幪׭l'hz48Iӈ% q? g>p'caiQ Ũ *.y'h ;!Mgygk˅dxZ 䶙LuY"ۉESFu>ajպr#sộH M1gDy]B0 G˺U oT;& km9:UiDՁC!ߝ%UPuҾ#S'b7薃6CB44zp}XҰАZnqjj(_fU%V6J `@R]{6^ڭJi͢:zLbSgg ,w]J-౨=O:g1Ue);m,Liӛq4'}k%⦍h9 B, ̪a endstream endobj 1430 0 obj 779 endobj 1431 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1429 0 R >> endobj 1432 0 obj << /Length 1433 0 R /Filter /FlateDecode >> stream xVn@slf; ,cj/e"ƶdQ,썥JM̛7xbypگIi6xh1 Aǐb!È`݉{+n4w?AX 8| nn ]cui04_Uo4x9!?X!KbN[, a-ܼ~~4U~{ Sz445Mj~5љG5`LQzC*5#[Kveqgyfdˬ8sN&"C!94 JDb0H7D5. Q ˅)y {=7d,_K;/&TE |PűTm4ŮZWU]LDG:9OVd!G;t%~dUIs,+B$ZQ0RY8I:gP\ڗֳj uAik~n6F!DŽ|3_VsnGgvAqT#l0&l VѠY^eG,+k0A%o̳yԡgb]2<13:Կ磐{^-~@]zr͜2P"8K 0~ v *CK endstream endobj 1433 0 obj 580 endobj 1434 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1432 0 R >> endobj 1435 0 obj << /Length 1436 0 R /Filter /FlateDecode >> stream xTMO0 W#&"!PvԵIEpdS~W?{3 8wdb <;)wdag~Pݦm HNbЍ8\J#"xULvWN󫏬jy|>ܫA-nSAyrCD> K1 B*U eJ3)!)<0]{<i.TgmHѤr",2ZN{4\+iT|.rqL#"ˊcoG$.qqԛob(cxEka;zWڋq92Q1NaHց;@_38 endstream endobj 1436 0 obj 377 endobj 1437 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1435 0 R >> endobj 1438 0 obj << /Length 1439 0 R /Filter /FlateDecode >> stream x͔QO0)q{;8q@"414ţҴ~v4I˞IGվ;&}c ~/] 02ٗN@(NˑnBÌnvsjpήZx]#u% w-OgB祴Zr2 \ AY|qۏא]^R;KsX6cxsf{4,_?xȶ"ƝnO˶,UU)($$)L"Psˇ1! %*WՐwr7o!U.R/&%0ȓ$ .&.|T/Wrӡv"w5 $}P dսyP'@ź|p_up%AOO&v@/} K+9^pMzA$IjCC ۶!]0; @\`}㪆/.E endstream endobj 1439 0 obj 477 endobj 1440 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1438 0 R >> endobj 1441 0 obj << /Length 1442 0 R /Filter /FlateDecode >> stream xTMO0Wq9IlsDbW[E+Bjh|M8NZ9IG~~33eKh+!/ٶh *9D ,ߗw8cX~GBq-F් ]B|6V\t+i%!-GAm^'#9?kh؜_쪿k endstream endobj 1442 0 obj 475 endobj 1443 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1441 0 R >> endobj 1444 0 obj << /Length 1445 0 R /Filter /FlateDecode >> stream x͕Mo0slqcqJZUi7@׆KnMa4ǯ @w_A{8h!+؅[ g7vcc X]x Ϭ]j|W{CgS[ !ݜRK_ZA%\Hߐfo #R;jH6ECѼոvt"kWPԸK> endobj 1447 0 obj << /Length 1448 0 R /Filter /FlateDecode >> stream x͔Mo0 'ǵvkJ Kbj ,(#)bXC0g?c76v%JC?:f=h[1%*7Wq7(egmp9 Ԕ 4 i6_ҟ{zPV!!9Yww\-nm@(7Ծ5<ձ9udw䯮j#糢hlp`H҈KbB'am\PzKȀ˟=Kxy ! ?jСZXs\͗C#sr7Psii |+ю*㤍 QC,WRz& _y[`8Mz ,? w .Ǡ Bd@^# endstream endobj 1448 0 obj 470 endobj 1449 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1447 0 R >> endobj 1450 0 obj << /Length 1451 0 R /Filter /FlateDecode >> stream x͕M09u6`JmޢErid ic/>z.D1zyssM|8(2Kp4XI*I! 4l үW⍕BvM#X9~N<"A SPTE&sёmS/}۾ƚe0P0%"X:PB!LYֶʢp(ӗPP|`BDZ3@e^z+v'TOTCUu, J ȅd! J3ޞQq@*'֊z򢴿*7vmX()> endobj 1453 0 obj << /Length 1454 0 R /Filter /FlateDecode >> stream x͕]o0ri6Mm5`$ )e;#8j QLNx~P A!|  ~_QFѽ}LDZa?ʣջ{hv^?zI"]Faާ/0 qv6DR{""q biLL;+sIvM#I9ޑ]poNĆ:_ThGs}ݶϤ6ޙ3p&(eXz~O1G.Ϲ @¤[ 40 ,Ma0Y {\7Mތ:S򉒑R!z-{NqA|_]l^]MKFRߕ.// Α@O1}^7T:Yov^abTԥaAҵNZS7㚥9(6m1}.0żvtVm|L. mz ,3\09JhnasEvH^\ă찑73;?D4Fmvyyd."L!x endstream endobj 1454 0 obj 578 endobj 1455 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1453 0 R >> endobj 1456 0 obj << /Length 1457 0 R /Filter /FlateDecode >> stream xTMo0W̱=`z[(".e?ݽ5ѓ߼aL}c%<,z 0>DAD\ ~ ;n7kV1М^Xol}@H쬍7/!JZIHp!MB~NTB2g]~d4ûΙ- $rC o m5Z2GmYm_yuuf(Hr)2!҄<1tH4C"BBIFɄ"\eerx 2 esh P/B&VZko o^)j'&V$& ?%*J_ gjXTD$"3:RQsάKFI5 J-i uLq:{LK[1XOɋyI;}1s{3nsyPH 1 0Fc9>Zo쪿+Ġ endstream endobj 1457 0 obj 511 endobj 1458 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1456 0 R >> endobj 1459 0 obj << /Length 1460 0 R /Filter /FlateDecode >> stream x͕Mo0slq6αQ[UP**fWvElnMa4;O x(SH5X1P0wdnFgY76!=l) kBu YM>͕_E#Wj\;Hj,ajpƠ6#^]+=fm2Hl@$1.phP"#4p]֖Po-2*x]wKΧHĿfT)7P5&F'(49M.$7lYl{IkHS`4Vv~mŽ=.#BKa]Y\^v9Y ktɳ<A],鳪s:dÚ2z~CuFn<- n[iߪ∝Umei?Y,m!d -ngUwJn5 endstream endobj 1460 0 obj 530 endobj 1461 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1459 0 R >> endobj 1462 0 obj << /Length 1463 0 R /Filter /FlateDecode >> stream x͖Qo0=;ۀq7mmڪbD"&ْ 8MCxZ Q~;Q6O_|st{O)FxMzW57_'6%椙_#4bMLN{G5CZ$d85.#j\_o6{2_&&8X0%"'aZq0P}@ (K3TPƬ(um ][KBMj_|z~@uV֩Zȳ=$Ʌd1 ZA|I+f֊za_w<[(73)VMua7B*Z> endobj 1465 0 obj << /Length 1466 0 R /Filter /FlateDecode >> stream xUMo@ﯘc{v؏SzZUI0'Ϳ. L{J=7fwq_aFpy HE,- ~G>~& ='*oΡ#xF!\GFA"]F`bk@6X) sf ^͇8qlK|R&읕hk$ap9Q x#X:mU4:-7_(2j[s&ÌrB+|!D) =15$9|Nܦ$!O٣KsiW3|QK)/*(\mULXa6J#Id)X!ď$ۃR!7>gHB B41eZpDi=9g{[>H:3=xm% Js&}cL*D 1N 2yx?#z4o@y %XLʳ'ņʧ endstream endobj 1466 0 obj 513 endobj 1467 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1465 0 R >> endobj 1468 0 obj << /Length 1469 0 R /Filter /FlateDecode >> stream x͕M0slc+z$A"%N8dGPO݅(Fox p`-y>kbb@nq_w׬[ĺ |'a<>9u$lׁd1&SsA6T1*P!4i үSKSp|ci.Z˶i}m;gՊ@FkҸ[+8WdKsošP$R1r!sR:7rLDTC&q=AYTOAҊ8}*lpݾwHVKUuIY9rT2tHoYy0Cg7vR8Z+-n?UeυGS/P᚞΋m=lLfy͇`!M3VtcQ4mXS͆m[5o?RgmCeaɚleM͛I6BQ$;O0Fs<MzcusrU> endstream endobj 1469 0 obj 512 endobj 1470 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1468 0 R >> endobj 1471 0 obj << /Type /Action /S /GoTo /D [1311 0 R /XYZ 72.0 720.0 null] >> endobj 1472 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 243.69 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1473 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1471 0 R /H /I >> endobj 1474 0 obj << /Type /Action /S /GoTo /D [1314 0 R /XYZ 72.0 720.0 null] >> endobj 1475 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 244.25 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1474 0 R /H /I >> endobj 1476 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1474 0 R /H /I >> endobj 1477 0 obj << /Type /Action /S /GoTo /D [1317 0 R /XYZ 72.0 720.0 null] >> endobj 1478 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 242.59 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1479 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1477 0 R /H /I >> endobj 1480 0 obj << /Type /Action /S /GoTo /D [1320 0 R /XYZ 72.0 720.0 null] >> endobj 1481 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 251.48 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1482 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1480 0 R /H /I >> endobj 1483 0 obj << /Type /Action /S /GoTo /D [1323 0 R /XYZ 72.0 720.0 null] >> endobj 1484 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 264.81 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1483 0 R /H /I >> endobj 1485 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1483 0 R /H /I >> endobj 1486 0 obj << /Type /Action /S /GoTo /D [1326 0 R /XYZ 72.0 720.0 null] >> endobj 1487 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 291.19 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1486 0 R /H /I >> endobj 1488 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1486 0 R /H /I >> endobj 1489 0 obj << /Type /Action /S /GoTo /D [1329 0 R /XYZ 72.0 720.0 null] >> endobj 1490 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 243.7 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1489 0 R /H /I >> endobj 1491 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1489 0 R /H /I >> endobj 1492 0 obj << /Type /Action /S /GoTo /D [1332 0 R /XYZ 72.0 720.0 null] >> endobj 1493 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 263.14 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1492 0 R /H /I >> endobj 1494 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1492 0 R /H /I >> endobj 1495 0 obj << /Type /Action /S /GoTo /D [1335 0 R /XYZ 72.0 720.0 null] >> endobj 1496 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 264.8 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1497 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1495 0 R /H /I >> endobj 1498 0 obj << /Type /Action /S /GoTo /D [1338 0 R /XYZ 72.0 720.0 null] >> endobj 1499 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 263.68 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1498 0 R /H /I >> endobj 1500 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1498 0 R /H /I >> endobj 1501 0 obj << /Type /Action /S /GoTo /D [1341 0 R /XYZ 72.0 720.0 null] >> endobj 1502 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 265.36 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1501 0 R /H /I >> endobj 1503 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1501 0 R /H /I >> endobj 1504 0 obj << /Type /Action /S /GoTo /D [1344 0 R /XYZ 72.0 720.0 null] >> endobj 1505 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 260.37 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1506 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1504 0 R /H /I >> endobj 1507 0 obj << /Type /Action /S /GoTo /D [1347 0 R /XYZ 72.0 720.0 null] >> endobj 1508 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 228.15 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1507 0 R /H /I >> endobj 1509 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1507 0 R /H /I >> endobj 1510 0 obj << /Type /Action /S /GoTo /D [1350 0 R /XYZ 72.0 720.0 null] >> endobj 1511 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 251.48 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1510 0 R /H /I >> endobj 1512 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1510 0 R /H /I >> endobj 1513 0 obj << /Type /Action /S /GoTo /D [1353 0 R /XYZ 72.0 720.0 null] >> endobj 1514 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 244.25 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1513 0 R /H /I >> endobj 1515 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1513 0 R /H /I >> endobj 1516 0 obj << /Type /Action /S /GoTo /D [1356 0 R /XYZ 72.0 720.0 null] >> endobj 1517 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 265.91 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1516 0 R /H /I >> endobj 1518 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1516 0 R /H /I >> endobj 1519 0 obj << /Type /Action /S /GoTo /D [1359 0 R /XYZ 72.0 720.0 null] >> endobj 1520 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 517.5 271.623 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1519 0 R /H /I >> endobj 1521 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 517.5 539.998 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1519 0 R /H /I >> endobj 1522 0 obj << /Type /Action /S /GoTo /D [1362 0 R /XYZ 72.0 720.0 null] >> endobj 1523 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 219.27 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1522 0 R /H /I >> endobj 1524 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1522 0 R /H /I >> endobj 1525 0 obj << /Type /Action /S /GoTo /D [1365 0 R /XYZ 72.0 720.0 null] >> endobj 1526 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 233.71 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1525 0 R /H /I >> endobj 1527 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1525 0 R /H /I >> endobj 1528 0 obj << /Type /Action /S /GoTo /D [1368 0 R /XYZ 72.0 720.0 null] >> endobj 1529 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 258.14 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1528 0 R /H /I >> endobj 1530 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1528 0 R /H /I >> endobj 1531 0 obj << /Type /Action /S /GoTo /D [1371 0 R /XYZ 72.0 720.0 null] >> endobj 1532 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 243.7 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1531 0 R /H /I >> endobj 1533 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1531 0 R /H /I >> endobj 1534 0 obj << /Type /Action /S /GoTo /D [1374 0 R /XYZ 72.0 720.0 null] >> endobj 1535 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 258.14 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1534 0 R /H /I >> endobj 1536 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 457.5 539.998 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1534 0 R /H /I >> endobj 1537 0 obj << /Type /Action /S /GoTo /D [1377 0 R /XYZ 72.0 720.0 null] >> endobj 1538 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 286.47 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1537 0 R /H /I >> endobj 1539 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1537 0 R /H /I >> endobj 1540 0 obj << /Type /Action /S /GoTo /D [1380 0 R /XYZ 72.0 720.0 null] >> endobj 1541 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 298.97 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1540 0 R /H /I >> endobj 1542 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1540 0 R /H /I >> endobj 1543 0 obj << /Type /Action /S /GoTo /D [1383 0 R /XYZ 72.0 720.0 null] >> endobj 1544 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 296.75 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1543 0 R /H /I >> endobj 1545 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1543 0 R /H /I >> endobj 1546 0 obj << /Type /Action /S /GoTo /D [1386 0 R /XYZ 72.0 720.0 null] >> endobj 1547 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 313.69 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1546 0 R /H /I >> endobj 1548 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1546 0 R /H /I >> endobj 1549 0 obj << /Type /Action /S /GoTo /D [1389 0 R /XYZ 72.0 720.0 null] >> endobj 1550 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 289.25 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1549 0 R /H /I >> endobj 1551 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1549 0 R /H /I >> endobj 1552 0 obj << /Type /Action /S /GoTo /D [1392 0 R /XYZ 72.0 720.0 null] >> endobj 1553 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 315.63 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1552 0 R /H /I >> endobj 1554 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1552 0 R /H /I >> endobj 1555 0 obj << /Type /Action /S /GoTo /D [1395 0 R /XYZ 72.0 720.0 null] >> endobj 1556 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 317.01 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1555 0 R /H /I >> endobj 1557 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1555 0 R /H /I >> endobj 1558 0 obj << /Type /Action /S /GoTo /D [1398 0 R /XYZ 72.0 720.0 null] >> endobj 1559 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 338.12 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1558 0 R /H /I >> endobj 1560 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1558 0 R /H /I >> endobj 1561 0 obj << /Type /Action /S /GoTo /D [1401 0 R /XYZ 72.0 720.0 null] >> endobj 1562 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 316.46 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1561 0 R /H /I >> endobj 1563 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1561 0 R /H /I >> endobj 1564 0 obj << /Type /Action /S /GoTo /D [1404 0 R /XYZ 72.0 720.0 null] >> endobj 1565 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 328.11 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1564 0 R /H /I >> endobj 1566 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1564 0 R /H /I >> endobj 1567 0 obj << /Type /Action /S /GoTo /D [1407 0 R /XYZ 72.0 720.0 null] >> endobj 1568 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 263.14 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1567 0 R /H /I >> endobj 1569 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1567 0 R /H /I >> endobj 1570 0 obj << /Type /Action /S /GoTo /D [1410 0 R /XYZ 72.0 720.0 null] >> endobj 1571 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 285.92 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1570 0 R /H /I >> endobj 1572 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1570 0 R /H /I >> endobj 1573 0 obj << /Type /Action /S /GoTo /D [1413 0 R /XYZ 72.0 720.0 null] >> endobj 1574 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 299.25 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1573 0 R /H /I >> endobj 1575 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1573 0 R /H /I >> endobj 1576 0 obj << /Type /Action /S /GoTo /D [1416 0 R /XYZ 72.0 720.0 null] >> endobj 1577 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 289.5 187.399 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1576 0 R /H /I >> endobj 1578 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1576 0 R /H /I >> endobj 1579 0 obj << /Type /Action /S /GoTo /D [1419 0 R /XYZ 72.0 720.0 null] >> endobj 1580 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 239.27 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1579 0 R /H /I >> endobj 1581 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1579 0 R /H /I >> endobj 1582 0 obj << /Type /Action /S /GoTo /D [1422 0 R /XYZ 72.0 720.0 null] >> endobj 1583 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 243.72 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1582 0 R /H /I >> endobj 1584 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1582 0 R /H /I >> endobj 1585 0 obj << /Type /Action /S /GoTo /D [1425 0 R /XYZ 72.0 720.0 null] >> endobj 1586 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 217.05 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1585 0 R /H /I >> endobj 1587 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1585 0 R /H /I >> endobj 1588 0 obj << /Type /Action /S /GoTo /D [1428 0 R /XYZ 72.0 720.0 null] >> endobj 1589 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 218.16 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1588 0 R /H /I >> endobj 1590 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1588 0 R /H /I >> endobj 1591 0 obj << /Type /Action /S /GoTo /D [1431 0 R /XYZ 72.0 720.0 null] >> endobj 1592 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 228.15 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1591 0 R /H /I >> endobj 1593 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1591 0 R /H /I >> endobj 1594 0 obj << /Type /Action /S /GoTo /D [1434 0 R /XYZ 72.0 720.0 null] >> endobj 1595 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 224.27 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1594 0 R /H /I >> endobj 1596 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1594 0 R /H /I >> endobj 1597 0 obj << /Type /Action /S /GoTo /D [1437 0 R /XYZ 72.0 720.0 null] >> endobj 1598 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 205.5 185.73 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1597 0 R /H /I >> endobj 1599 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1597 0 R /H /I >> endobj 1600 0 obj << /Type /Action /S /GoTo /D [1440 0 R /XYZ 72.0 720.0 null] >> endobj 1601 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 198.73 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1600 0 R /H /I >> endobj 1602 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1600 0 R /H /I >> endobj 1603 0 obj << /Type /Action /S /GoTo /D [1443 0 R /XYZ 72.0 720.0 null] >> endobj 1604 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 203.17 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1603 0 R /H /I >> endobj 1605 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1603 0 R /H /I >> endobj 1606 0 obj << /Type /Action /S /GoTo /D [1446 0 R /XYZ 72.0 720.0 null] >> endobj 1607 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 204.83 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1606 0 R /H /I >> endobj 1608 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1606 0 R /H /I >> endobj 1609 0 obj << /Type /Action /S /GoTo /D [1449 0 R /XYZ 72.0 720.0 null] >> endobj 1610 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 200.95 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1609 0 R /H /I >> endobj 1611 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1609 0 R /H /I >> endobj 1612 0 obj << /Type /Action /S /GoTo /D [1452 0 R /XYZ 72.0 720.0 null] >> endobj 1613 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 202.6 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1612 0 R /H /I >> endobj 1614 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1612 0 R /H /I >> endobj 1615 0 obj << /Type /Action /S /GoTo /D [1455 0 R /XYZ 72.0 720.0 null] >> endobj 1616 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 214.26 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1615 0 R /H /I >> endobj 1617 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1615 0 R /H /I >> endobj 1618 0 obj << /Type /Action /S /GoTo /D [1458 0 R /XYZ 72.0 720.0 null] >> endobj 1619 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 215.38 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1618 0 R /H /I >> endobj 1620 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1618 0 R /H /I >> endobj 1621 0 obj << /Type /Action /S /GoTo /D [1461 0 R /XYZ 72.0 720.0 null] >> endobj 1622 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 213.15 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1621 0 R /H /I >> endobj 1623 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1621 0 R /H /I >> endobj 1624 0 obj << /Type /Action /S /GoTo /D [1464 0 R /XYZ 72.0 720.0 null] >> endobj 1625 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 208.71 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1624 0 R /H /I >> endobj 1626 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1624 0 R /H /I >> endobj 1627 0 obj << /Type /Action /S /GoTo /D [1467 0 R /XYZ 72.0 720.0 null] >> endobj 1628 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 225.38 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1627 0 R /H /I >> endobj 1629 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1627 0 R /H /I >> endobj 1630 0 obj << /Type /Action /S /GoTo /D [1470 0 R /XYZ 72.0 720.0 null] >> endobj 1631 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 205.94 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1630 0 R /H /I >> endobj 1632 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1630 0 R /H /I >> endobj 1633 0 obj << /Length 1634 0 R /Filter /FlateDecode >> stream x_]y{} ^&aU[ݍ`0X@c-DdJ!8O?lMn%:C]q??Y^}o;_*:uׇ?O֟ño}^o}s?_x}o_O7ro~xC[^q\:\W?oǧ?~W><}|<ӻ^_oǿWo_o?o__yTo?Ϩ~o!zg=_y8̻x}w!qH$"qx8%r`9A XN,'`)""""""""XE`&Mv"E!CN q` x=+I q`QD0D0D0D0D0E0E0E`*M6l"E`!CN"8Ep` y` 'f, `````=B(g~r 6Ͽ|~w7wPݧ1}iͮubk^Q=rysϣ{yQʞG)鑛鑛uӣnzM6=ڦG}ӣozM16=Ʀs#=8S-e)bY YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YNC,82NS,(bE,&ueeeeee%J,+Y6ldȲe'N,Yd9r<2C,<2OS,eBAAAIIIxl3x|z?ӛkQzm:R_VSתbvCdddddddYɲe%F,Yvdɲ A,'YNbyCrZ,zr]/5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\˵S,{rZ,{22222ɲ}Tq?nC߯?}^8O!5Γ:R__9uk LLLLdYɲ}u;N:nTOGRM,'YN\RĐZ,$b&1.b&1& $$$J,+Y6ldȲe'N,Yd9r$)kCj\Pb&15!XI 22222řץ']Çǻu>c=Ǽqxzm:nTOKPW%rm:222222ɲe%R^AQSԕ!z{ ꤚ,'YNd9rmZ,VoO\[˵[j\[& $$$J,+YVldȲe'N,Yd9r$)kbzC}-XP\[& $$$5xWOu{-p}HS~ yX,zCNϻ0004444jT[p>w^iy|.yX,%4iT ;뒓uOR.9_ToCZMj5fT6SM0aTNS:Iֻz{TooKN7%'[jjjjjnݿUp=ε6Kލ<,oOʯ9ʫqrR]oKZMj5fT6SM0aTNS:Iu_O9w%?IugO9w)'=ZMj5jT6SM0aTNS:IuO9%?IuO9%/اTTTTTTTk)(ʯ8N%yXnTNSAqj'IqjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I5R̓T zd>z}Z%_(˛]jZ@VSZMj3fTvS:Lu0iTNRT 8H5NRT$(TjS S S SMSMSMSZMj5fTvSMu0aTNSPNk='Z y!յrS S S SMSMSMS]R>nԖy;S[Jvj~TwoAu,'YNbY,XC,)re9v$by r LLLLdYɲe#F,;Yvdr A,'YNC,oAB- S,oAB- eueeeeeee%J,Y6ldȲe'N,Yd9reP2eP2Hv$dddddd&hRڃ #F>p7Ks=GER{ Yx/7 fx=np pSf2묍pSfnʬ356]ؕ]ؕ]ܕ]+SweLݕi2mW]+weƮؕ2cWf])N 7e։{)N 7e{aٔYQl2+2+2+2+SweLݕi2mW]+weؕ2cWf])} 7eY:a3ܔYg:eSfĮLĮLLʼ奌S߽{Ӄ1<ύУkGy|P~)O;טT(Q000444jTVSmLj7nTS:Lu4IkJ9',夺FR]\M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu)'5TטrR]s :Un<P"_u}w_1_?S}/aXCVy>*إRN+F:22222ɲe%uE4ȭ|RZ>(_W[IwV:Lu4IkN9':夺R]tM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu )'5@TrR]t :z{)}B/۟nCBXN)܃:SɛUj|O<-S:Lu4iTы:|QT񋔓:QBFM5L5L5L5M5M5M5Mj5յhǹ5VY>)_o%4iT u8#夺g$u@#夺hT!VSZMj3fTvS:Lu0iTNR]7RNFOR]'8RN GIuHxP]SQ 9:_yuB_XZ?Mz(<,oOʯrʫ로rS&G)'u%夺~5QNK rS S S S SMSMSMSZMz(ǜ̶_唇IPNy|P~=S4iT'#.)'uĥ'#.)'u%夺TTTTTTTVSZMj3fTvS:Lu0iT'#.)'uĥ'#.)'uĥTjjjjjjҹJS:-)_[% 夺fH$?Iu͐PNkDBkrS S S SMSMSMSMSZM+(iyZ)_ $˛ OjNS:Iu͐PNkrR]3$!!TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5~zm}~̐\ G>7fHi⊻Wz4u@y|HrqFw_,f9\\_TTTTTTTVS}yZ)b#˛+6jNS:I5R}b#'՗+rqFN/Wlrq0000444jT6SmLj7nTS:Mu4I/WlrqT_.I⊍T_.M5L5L5L5M5M⊻D}0upV޹}{ޏ^ c7l ׾c3\ weڮLەi2mW]+3veƮؕ2sWfMہ{ܔn 7enh2+2+2+2uW]+veڮLە2}Wʌ]+3veƮܕ2sSvT^)s;z+<7enGR2c²)s;zz/ܕ]ؕ]ܕ]ܕy./1[֘O13װz)ay|RފAy?-7nTS:Mu$8H5RT$8I5NRTjRbaaaiiiiTVSmLj7nTS:Lu4I=IuB9P('T{(jjjjjj|0)_<ӿҘgݚ]ܺ/{/l {a f s7aݕ2uWʴ]+veLߕ2cWfʌ]+3weܔY#pSfsSf6M5J ˦m2+2+2+2+SweLݕi2mW]+weؕ2cWf])@l2knʬ^X6e֘f3ܕ]ؕ]ؕ]ܕ*y<M^wwרn~c(_j5&yXnTS:Mu$u8夺ǣTx:OBpIvzBX$7000044N]U2 a׷2 ^(_X5%yX,7iT'夺H^Hu (70004444jT6SmLj7nTS:Mu$5T@rR]Iu $/jjjjjjU%냁?~ee|R]eVY>)_l%/[Iu"yjjjjjjj5jRqNf|-lZ>(_ %OMu4iTo %'FOR-lTo %'FM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mumaz[Ima#To %70004445pWls/,wosgzIF\j|]#.yZ)_׈Kjj5jrr|]#.yZ)_׈K7'qɫ:Mu$uT夺꣜TQ}:OB>M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu:rR]GI~:rR]GQN>M5L5L5L5M5Mӝvy`dznxǷ|z7~b n87wºͰa}3l2mWʴ]+weؕ2cWf]+37e;|zWo/<7e;yLM(2Q6eĮLĮLL]+SweLەi2mW]+3veƮؕ2sWfM<6eؔcS&M<7eܔsS&˦LM,2+2+2+2/ wd'F¯7o'훟?<}<ט8?2rZwʯAay|R~ ~(j5jT6SmLj7nTS:Mu$rj9HZNR-'T۔꺆rS S S SMSMSMSZMu8v=6V>)oj;JTNS:IuTN{OR];)'յ^Bk=ZMj5fTvSM0aTNSvSNk=夺vSNyjRBYL5L5L5L5L5M5M6S#%g5k;f<ץK"$ay|R~Iy|P~IyZ%_PNIur@9C$/9TTTTTTTTVS] Ur%f|-cZ>(_ $OMu4iToK$'r(OR-Toˤ$'ے)M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mum!z[I^mTo $7000444/wyǃ<?޾;M_,^~S~&HyX,_ R^-7AIZNR-'c7('u夺ݐIy+W<-TNS:IuT*OR]{('յJBkoZMj5fTvSM0aTNSVQNko夺VQNkoT*M5L5L5L5L5M5M)PwyVzzag[Ê,SZ>(_gKwْrS:Lu4iT5Iv zWrR y!-jjjjjjjj5jT6SmLj7nTS:Mu$-^OR+9nᕜToJnaaaiiiTVSLj3nTS:Lu4iToJN[x!?Iv zB[x%7000444sXwy`k|~gsX/Vbn\s| 3;Jv~TwoWAu,'YNbY,XC,)re9Ų,E,K! $$$$J,+Y6ldȲe'N,Yd9r˵Nj\˵Nj\[.b6IMAAAAIII,+YVldȲe#N,;Yd9r$IS,׶9rm˵eNj\˵]Nj LL\R~O̓ OIwSI;yX,zRNnTNSꝜT_TꋓwrR}qRF^HI;VSI'Uay|RI;y|PI;yZnTNSꝜT_TꝜT_TꋓwrS S S SMSMSMSZMj5fTvSMu0aTNSꝜT_TꝜT_TR}qRNnaaaiii.KxUׅtqg?sv=^c|w~~wo~!: 8rh^nF` : Xj:FkY{!O;!˛WMj3fTvS:Lu0iT'TA rj9IZNR-TK!RL5L5L5L5L5M5M5Mj5u@*9wu@ay|RދA: XTNS:IukRNk^ST׼&夺5)'5IVSZMj3fTvS:Lu0aTNR]󚔓ה$5I9IYH5 yMTTTTTT?>/} k5{yǏw'O˫<-O;<,oj3fTvS:Lu0aTNR}8rR}8r??IHIőjjjjjjjj5j'<-Y>)jNS:I5R])9.$őHIvq$aaaaiiiTVSmLj3nTS:Lu4iT )_K%ʛ6SmMj7nTS:MuZCG95tZCG95tR]k(70000444jT!٬WqɯY>)dWאTNS:IuT:OR]k('յrR]k(7000444jTVSmLj7nTS:Lu4Ik 夺I~ZCG95tR]k(7000444]y^Of?n-^>~Q=fRWרLꤺK}KM,Yvdr A,'YNbY,XC,)re)bYX"eeeeeee%J,+Y6ldȲe'N,Yd9r82C,82NS,eBAAAIIII,+YVldȲe'N,;Yd9r$)yebX!yebXf,b,,i'i'i'i'i ]^`m ?}ߞLF]sf=|(iyZ)oay|R~TS:Lu4iT夺f$?IuQQNkrR]Tjjjjjjj5ju]"}oV,iyZ)aS:MuT'I,IuMcI^HuMdQnaaaiiiiTVSmLj7nTS:Lu4IkrR]s\墜T>>g\_Mg&7'ʫiyDyXnTS:Mu$յ;rR]#)'յ;rR]#%/vGRnaaaaiiiTVSmLj3nTS:Lu4iTHIu펔$յ;rR]#)'յ;rS S S SMSMSMSZMj5fTvSMu0aTNSvGRNkw'ݑ)y!յ;rS S S SMSMSk~ʫ㪁O?>p+_̕>~«Ḱ:nTO}9PWɲ A,YNd9r/X>r/Xs.bN,,,,,,,,+YVdȲe#N,;Yvd9r$IS,uVbNuNbNZ,PYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN\GK- ~O\K-~r/5YYYY&YҼϋɨz(~0U!>梮n(iy|:Lu4Ik#夺v1J~H9]R])70004444jT6SmLj7nTS:Mu$յrR])'յrR]%/v1Rnaaaaii5T׃YK?]{KOWA}wSjߝ<,7aTNR-TA$rj9IZ Bjjjjjjjj5jT6SmMj7nTS:MujAqj'IQH5 F10000444jT6SmLj7nTS:Mu4IyjIyjTjRbaaaii/_奵G7yW_{鯯d>^v/=A^zN^TvSMu0aTNSkQNk'ZZE9Zjjjjjjj5jT6SmLj7nTS:Mu$յXrR]$?Iu-֢Tb- Zjjjjjjjj5jT6SmMj7nTS:MuZE9ZZE9ZR](700U[J[J[J[-ֺJ_yg_Qxq~1ǫ_?<^}O3_r\(sQ)~q?lȪM endstream endobj 1634 0 obj 14263 endobj 1635 0 obj [ 1472 0 R 1473 0 R 1475 0 R 1476 0 R 1478 0 R 1479 0 R 1481 0 R 1482 0 R 1484 0 R 1485 0 R 1487 0 R 1488 0 R 1490 0 R 1491 0 R 1493 0 R 1494 0 R 1496 0 R 1497 0 R 1499 0 R 1500 0 R 1502 0 R 1503 0 R 1505 0 R 1506 0 R 1508 0 R 1509 0 R 1511 0 R 1512 0 R 1514 0 R 1515 0 R 1517 0 R 1518 0 R 1520 0 R 1521 0 R 1523 0 R 1524 0 R 1526 0 R 1527 0 R 1529 0 R 1530 0 R 1532 0 R 1533 0 R 1535 0 R 1536 0 R 1538 0 R 1539 0 R 1541 0 R 1542 0 R 1544 0 R 1545 0 R 1547 0 R 1548 0 R 1550 0 R 1551 0 R 1553 0 R 1554 0 R 1556 0 R 1557 0 R 1559 0 R 1560 0 R 1562 0 R 1563 0 R 1565 0 R 1566 0 R 1568 0 R 1569 0 R 1571 0 R 1572 0 R 1574 0 R 1575 0 R 1577 0 R 1578 0 R 1580 0 R 1581 0 R 1583 0 R 1584 0 R 1586 0 R 1587 0 R 1589 0 R 1590 0 R 1592 0 R 1593 0 R 1595 0 R 1596 0 R 1598 0 R 1599 0 R 1601 0 R 1602 0 R 1604 0 R 1605 0 R 1607 0 R 1608 0 R 1610 0 R 1611 0 R 1613 0 R 1614 0 R 1616 0 R 1617 0 R 1619 0 R 1620 0 R 1622 0 R 1623 0 R 1625 0 R 1626 0 R 1628 0 R 1629 0 R 1631 0 R 1632 0 R ] endobj 1636 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 1635 0 R /Contents 1633 0 R >> endobj 1637 0 obj << /Length 1638 0 R /Filter /FlateDecode >> stream xTn0 )| MiLp@$h6)-v(Umol@9bGcpm G0pe ſƶnhc6NRBs. .L*wʭ݀ˮȯ Y/e%&=\J Ѫ9/Q`y{q p^$9\ì3gצ(q/Y&y+PV`/ R[ʡ =AgIqcBR]\Oyt~5Uue8htbSiAZw:Vi^o0l*]_])_UU~UMsn[b1k .Ź]2*Š0aHvaGƷZoLaDI endstream endobj 1638 0 obj 398 endobj 1639 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1637 0 R >> endobj 1640 0 obj << /Length 1641 0 R /Filter /FlateDecode >> stream xVMo@+T `!VI"9CYcT,Y&ꡉ f޼ݝCuo"bMc k~sEM^ƲzDڇt2W3ǩݵ B>73R‡,ܟdTj.Nn(npx]&ߜI'oN{\]+ܪfqF\v*BxZO2U"fK\jW3\F9!s:ˡVp#E{y`Ll4 Cx2Ve=p> 1{j"EԮ|]E d<FQt*[dʸx#^bH ۏu B/JK9q8Y<y9h?U\JB- "vN=TmIn8|D Ge\؃0S%[ 4| %}h^e\XڗMwvZ@mNvc좮pìN]„ް0Th=~jȤnsafRj#vr!dF,^I,zaFlZޡ}З> endobj 1643 0 obj << /Length 1644 0 R /Filter /FlateDecode >> stream xVMO@W*? *z@ D(2Xul|-@7oߎfiQ 9S2r8az>Pf[P7{!}O+|1`܃WMoF|*nkt%0paa0YU.EUJ 7b)L&?AeqïmT/+ěV'9:l_+|c0$8ʪxiΣ> endobj 1646 0 obj << /Length 1647 0 R /Filter /FlateDecode >> stream xUn@wTd0YVJt80Ǯl6;<651se1x]E*۷A}!0Eu;ϴ[vkeK5:7B?Tm^ϱw%F!^e2܏CNjjc½W0/!NR'yqo{V4\/ImYL: Ht[pDPQJESa򅾹)ݘ=љ56'#9LPʰp<#YEx82 !A jL?:& _:ɖ[m`Hr@[61'$fi$%a:id5ˋrSvTuBlJG SYħ=٢_;&ge$a䣞hKgOS$67YC5#Rw2MFȪB#b霣5Uj2ie 8 UIEqS l~kgNdWֽյuoffBӉGq&m'h~ŜHGaD wUu_h endstream endobj 1647 0 obj 559 endobj 1648 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1646 0 R >> endobj 1649 0 obj << /Length 1650 0 R /Filter /FlateDecode >> stream xUMo@+TvͱRZ7'=QD:Ҧ|lMEf޼Gu$;oa$ !@a[~6c7e7Ѣ+k{o1J‹%>"D룵'\Δ0vpq]uaNk]X^-E#D߽hP7սh.b+IJa3<ā!zeJ *DOE?*_v֜Z a#R[9>'dBL,c#ͫNjkjKX%Plf/Ɂ$[m;Xhcӑ3IEV=UC dT–t‡q"o[{8MJ$A(QR8;ΞS"O3&?՛i6_}hiVݛ>/-P,yU)>5juXAݎy9SVkz{,XY{lb۱ijY]:_\#n1ݐ3m2^Ot$Wdg_쪻= endstream endobj 1650 0 obj 558 endobj 1651 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1649 0 R >> endobj 1652 0 obj << /Length 1653 0 R /Filter /FlateDecode >> stream xTn0+.Ezs"8T$}ICtLb"1v! >WnQCN6[ c!0Iy`a~[ ݉CoVd'y|2$_*7=&~ZP8xqզ,{iLU~68)*S_>AGu ƿXݳ.?_"nv4;n&Ձ;pvءWFD(WkSchZ6ޞ3v$ DfK/RRPFgD末!!"^ ̴ .\<|6pA! йÿ,/uSZEZ> endobj 1655 0 obj << /Length 1656 0 R /Filter /FlateDecode >> stream xTN0+xl1G""8(6I{uҽ=q[/~{p5󲜎k'ӼwpuBWy}ٵ8V֊YޝY|1PEįRs4Jou zDԍNxONerZwg&CFT^#,*R['$pݼ^a \\)T՚e$A~qVT%gow)Bi$JvgEZ$ctrlvӳ2N&q]DדzXCRzWa -6m1/;kpO51zæ~g6}q@Q(ӕ{y5aa| endstream endobj 1656 0 obj 450 endobj 1657 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1655 0 R >> endobj 1658 0 obj << /Length 1659 0 R /Filter /FlateDecode >> stream xTn0+$%Ṟ@Z7'B{Cب#_RǖeHI90@^EiW0 %- ~WOlӇ{~_$#CSFZs=BSiCx!_cr-SB*T\C w5eYͮ6l~ qRT^>AGq ?YܳF_">EV7j}puaQ@SQ-/4Ն?fY[g$A Db4ZIx;V末!ANq^ 5+Wnk>\9:A!Rz57ˋjST=V֒G-\S4@ Dkgu3S,PTFʵbUg˳ubbW1NtފٴGL;,*[K[tڹfCK]&IlR _]-va'n^gb؍05Nlj9?0*<;?8xν endstream endobj 1659 0 obj 513 endobj 1660 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1658 0 R >> endobj 1661 0 obj << /Length 1662 0 R /Filter /FlateDecode >> stream xTMo0+خT{]uohTMHjH ! Q^f8H~)m/M|G6GkǤ `Rh]f ɾN*pq Q\T|s \|F_["A_ŚV ͤLQ}*5"Χ̟|%ꄥY=v .92 ǓrӊS4B5&xs)W y1-XT/oPmY^TiSD%=־Zҙs!qew화4\Fy42gO)eeze ߀&G`qZJj^ S{G䰍^mټ''t6|ĶQcz0squE;2nq2>Oɭ,# [(ldW񞽉 endstream endobj 1662 0 obj 513 endobj 1663 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1661 0 R >> endobj 1664 0 obj << /Length 1665 0 R /Filter /FlateDecode >> stream x͔O0+QGQ&$hdno[@a&҆|x};X bٖ@p9bA̧<0߅c0\(]tc^IE/7n|!!xQڦgU;[ endstream endobj 1665 0 obj 347 endobj 1666 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1664 0 R >> endobj 1667 0 obj << /Length 1668 0 R /Filter /FlateDecode >> stream xTKO0W̱Hwlǯ@{@%(BMKD$߯ By|eτ/rxHs1BL*`vO[lk{nHF~;.4:8 _†ߤJXkCp;xJ Ѯ;pP`U)ѴnŰt H 9S@f$u^Quժh90pʙ@d]YrQKq/"("qgU乀QWs˲+Ixqqف8R>M,ߕIjG`ZMK]! ~:Jk_\;9Ί>unReHhRe8R=#*3s:0#41`9OgW!Vuϋ pb`Z E?vð;GsV{ NX͇g'ᅡl: endstream endobj 1668 0 obj 508 endobj 1669 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1667 0 R >> endobj 1670 0 obj << /Length 1671 0 R /Filter /FlateDecode >> stream xTMS0WQWeYvd@1$8 +88V=^=Ӯgkvb!s.C0X5_ϱ n15> endobj 1673 0 obj << /Length 1674 0 R /Filter /FlateDecode >> stream xTMO0W8VP[J+P6dd!K I䉞<3gI Jo} 0T>Ad\j @@ q`Qc ~0kBo r=҆dg%Y@(O*˵ʬ+i#ɷ*<-VʯS9حvkS#3-ٰL Q TCEDعyX{7wu|q7+ \ (hdH=GIb6}%9$p glE7Kg ~?*n]8 <4)mO#V̹5,:q$QcV  *nr\K #yAo`ZcӿԻ*:6Ozb_s:WßP1:?4̋};1*)y1:Koj|t' endstream endobj 1674 0 obj 463 endobj 1675 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1673 0 R >> endobj 1676 0 obj << /Length 1677 0 R /Filter /FlateDecode >> stream xTMO0W؎VCQ{t~]/vdGi=<{ØD ܷA!ĤQ.XؙD; &+M,AN.zp $-l/T!,IA|ŋP)2cL.!p(pq􏮺]%wu鏯AΊAOٲ^M KH7`TzPp4(Za;;kgӕwNqʙ@d!1.$rOaQ tH sOهCrgQ-\;U7eե"b<9=14RTC-Ο׽ fDxFS I3dJۥVݶ ?4TYҩ=<79z+`$bSm-ba:S4sґ q endstream endobj 1677 0 obj 460 endobj 1678 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1676 0 R >> endobj 1679 0 obj << /Length 1680 0 R /Filter /FlateDecode >> stream xTMO0Wc;QC-8"6Ded;ג%Ko@֋yLR; qn *BB ".5 Ѕcap3/Y@`!!lDŽ}A $뽵q"`.<-\|ϚǢ $iYg $اdEl[#5M4L ( Sh!!Ym~_)Θ{# R(DAA̳$!wLbӯ4~fͮ5P7U8*+|.*H=|'t_ KKS 8)/:n 1wƒPi{q6,:u'A⾠uy_(d(юǖ<38-/z&}VӜƛΘ:2(Re UN @n'WƮ\ endstream endobj 1680 0 obj 476 endobj 1681 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1679 0 R >> endobj 1682 0 obj << /Length 1683 0 R /Filter /FlateDecode >> stream xTMS0WQWeIvd@1$8 +z+捞iWL3J8 5o1F9KMp.B0Xի_ϱ dg7kxd:9 O aN P^Uk9˕tiH(pq]9w2_Al,I޲IuM%djpP]v"֘O2ǰX5 Y$B! Ja yGK;|)'pCYEPrga0gUXobEDMYu % J{:xlzhնLnMG{5;/(6QM~wIn'i]M_qi endstream endobj 1683 0 obj 459 endobj 1684 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1682 0 R >> endobj 1685 0 obj << /Length 1686 0 R /Filter /FlateDecode >> stream xTMO0Wkoz"j.5C6[8Nd魐D<{&`w+A!$q N,1qqF~}L?+*]^zKlv ߕ6%;هBxVyUwWGB˓oE_j ݶhN!>*!ng6e[;> KȶzMzDT1]5o֡N&22n \ (hdH=GIb6}%=$pE݀&? u@m ԷEGŭKGKK,rcLiS?Uۮ=ՏX!poFN=Ʌituy[cmK #Q[*x7守v͓ל'cC  wNF@t{]_Et+ endstream endobj 1686 0 obj 462 endobj 1687 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1685 0 R >> endobj 1688 0 obj << /Length 1689 0 R /Filter /FlateDecode >> stream xTMO0W؎VCQ{t~]/vdGi=<{ØD ܷA!ĤQ.XؙD; &+M,AN.zp $-l/T!,IA|ŋP)2cL.!p(pq􏮺]%wu鏯AΊAOٲ^M KH7`TzPp4(Za;;kgSݪNqʙ@d!1.$rOaQ tH sOهCrgQ-t\U7eե"b<9=14RTC-Ο׽ fDxFS I3dJۥVݶ ?4TYҩ=<79z+Z$bSm-ba:S4sґtq endstream endobj 1689 0 obj 460 endobj 1690 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1688 0 R >> endobj 1691 0 obj << /Length 1692 0 R /Filter /FlateDecode >> stream xUMo@ﯘc{vvX66J+Uj%+9Eacb ,N 6驉y߼0{ ]gnFBa=&@KP!$ǥOpa!- ݎp %4%܇u[7Š}؇>Ze^@Q:Ԥ 2taGhA8{t'qu5P;G92H|SRq%.ʏ8{a* O 2-iOOc|JuW^( .s[kOXQyI#F6/;aEm4\*u(eS&:Ԛq :Y?O{8np1,k2E_/ӧv<<8/d> endobj 1694 0 obj << /Length 1695 0 R /Filter /FlateDecode >> stream xTM0+=j+Ujhi{خV4 *!ل,C޺ |C8hRBFw'D\Of@Eņަћ pQZiY"ckI0)+}zf_A)zd+xaZmz4khvBH4Sh&"l?u=2~U>gT Ă .92i2cFQUzdzHPSxˡY ꥃ|NBGg"}P| F`O]OgD1X KOyBe-+܎=X3e55J纙XiXIyWM;ѼCsGjhB Jv>veG,|ݺ>J ÁKb8q~D 9İaZsyPkOɈF_Ϭ_Tu endstream endobj 1695 0 obj 507 endobj 1696 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1694 0 R >> endobj 1697 0 obj << /Length 1698 0 R /Filter /FlateDecode >> stream xTMo0 WQlI=v0 M8㤉l~?q[8=>#{l0@]HD1)pv@Xy;k awV0OΣsGgux&DU冰`W {1<GRYkMKCW۟bIٹ$هSʪTUUj^5ФBH SVA1f]߻•sϲX!OGN+8 (|= u_h"dAJFA3Fi93W@9,g@_9;eU\q\ҵb-w-8bXIcV \!#}K_ OՅ<6vgP'n^l{\_HWn\ϫr9=Apdbaǰg9@M$cޕ/jx0h endstream endobj 1698 0 obj 484 endobj 1699 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1697 0 R >> endobj 1700 0 obj << /Length 1701 0 R /Filter /FlateDecode >> stream xTn0+Hآ C#B{HBYۨ,9Zߡ;vl" "7 q' +c ,NǐJRPFRpab N{qG~a  .Jp-1Ft❘*6OW (NZe%&lnC^~-9dGnlVβ.!~l h2.!ۂ[u4JuZ!j{a/S,C3 䴨IsD`$q-M#94@d EfYEvXк -9NV`QiUͻe@GRFzOu#9sHK |ˋa=:UqQ[..)GhNf7Qyۡ)b[t3U;c} sмoFBF9bzcUZt endstream endobj 1701 0 obj 455 endobj 1702 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1700 0 R >> endobj 1703 0 obj << /Length 1704 0 R /Filter /FlateDecode >> stream xTMo0 WQ_cmۡ- /VZQ4qe³I=zbe2IS T \;n ɤ%v9nmvf_=3 lXnKaQ"rC}b@ w*Ǎι@ΕtPw7cUϡ(Nj{(nl66d[;^에mAz-:DT0旿}>!2N#"R(DA[9:'UѥFC'wR1#r3,| YPq2R"UtؑJȜ6yeIE[7P TwD s; Rqh9Q.!.E= ,YNn\Z}˕?yvB;⢌P7Qbt/̷{gMLqVjaiz9}DL:> endobj 1706 0 obj << /Length 1707 0 R /Filter /FlateDecode >> stream xUMo@+`[zd(fmP08l|Kb,/z708 (^7vr㼴A|`. v v7݇[v7 rr7qN#;QX;CWpjPR* +n6|N5Ѷ]xtZ;W{Wf-$kwGDb_:[%R*Zceз6CL&m-:a gRǹ@= 9C"(t D` ( ] օ) +j~KX3x^IIIq7/UZuTu%|4 +3.K9&(>7f'g$~/wj)g)ZYDֿ FdZQ3M2-eDRb'wq[tyAbX<\dD jxg ->&'U`beMӬ %)UP뇆҉(N 1ڎ7x~bοl0J W]|? endstream endobj 1707 0 obj 566 endobj 1708 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1706 0 R >> endobj 1709 0 obj << /Length 1710 0 R /Filter /FlateDecode >> stream xTMs0W19D]IPɴv:x¤8e)6w`1yoi-4nܤdŶ{L>$ǥOpn"M{nE֬~B,7WLpv d~.b ZeGjI_#W& xpGD:DK5ޘM~f/OI֜0 \ (s|hh"qzHPDД'q6jiBY(!ۯGWrEː‰y ݆~xכ2-;9!#ÖtKB*tթ6cIcQiۚz!%}ҧ9ݒ^uY00~\,. GA+W0˚vٷ8H8ޡ<4ᅮGyUC G?~ɜ,aFU7} endstream endobj 1710 0 obj 499 endobj 1711 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1709 0 R >> endobj 1712 0 obj << /Length 1713 0 R /Filter /FlateDecode >> stream xTN0+ډc @T ԴmRhYђ>8B(&doB uS` ,bPFRpv` ðbR9v!l'#@w`!Z{P<NF8Ʌ /8B<|Rl=˶_WIVCXYP[Bh C2Q7ދ'|r?e1yM$)8tKx SXRm:A3!<i6,F,U f eOc\ˊ Rr B14^ǰ?h`vT6PʤsF;Ov5߆hs0 endstream endobj 1713 0 obj 453 endobj 1714 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1712 0 R >> endobj 1715 0 obj << /Length 1716 0 R /Filter /FlateDecode >> stream xTMo@+Jv]ǪRUFbI@zkb,/~f޼-J3H]QP B4@a= nq7o?nv79 KpumэCx |xGBUiC(B=Y5 ZG!D3> \fDz[o!|r^YF_f4 j }!FDsZޘR7"B#)$6/J: 15&%|L\Ȫb*v!] "PHt)Q/;uT}|-V֒Etq"'?ڜӴT("#6GCڛb[;E9RD(3?۝,3Y!(L {Ks2m<&魩@Q("97m`BsV8ZgD6`v$uN`P1p[ E7Cv)2h/'f~+GHfZv]u endstream endobj 1716 0 obj 522 endobj 1717 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1715 0 R >> endobj 1718 0 obj << /Length 1719 0 R /Filter /FlateDecode >> stream xTn0+ (آ-C#BrHBY[-9#;^MDA$fyP<<\<GmHdX8L )~1߯q;nD)~{Fnj[X@@Sņ0_3qÂBn^ZmTj!p{;4j(':4_!%g[jE,Q_벭ɶF%ZpB鸮+[u/bY=24"aRMXvؤ`H҈39a:kNz'b޷qGv YjJhwa 4t̛RN[P&IpݫײZE=PRJ;OUA?Fw6sXe~"IBZ{SpeiD&U썦'`%*OaoP w1{?^7\0o/) euoGoV57{ endstream endobj 1719 0 obj 457 endobj 1720 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1718 0 R >> endobj 1721 0 obj << /Length 1722 0 R /Filter /FlateDecode >> stream xTn0+."[z(`DhIP2k %Vˑ,2La|d0X'!۰`%(3Dd@h.#[aWf؏-!|f. z [L WUŠOػOZxs. JlW_C^ I{_ UBnM}dI_˛- 8@"TKCDU?u?/3R(DA=̒e! W"lq;) /CZ~ /^{ > endobj 1724 0 obj << /Length 1725 0 R /Filter /FlateDecode >> stream xU]o0}W m&EECWU$q40i g D{Y #{/bȼ A',pv ݌v!l?3WKp-Λ҆}/Phu+p_)%3.Q~ro$ xSD߽j9elJ_fA;a됝*,7l\]. > endobj 1727 0 obj << /Length 1728 0 R /Filter /FlateDecode >> stream xUMo@+Hz?e}Vꡒ(f1(nelzkb=yv40E*b $C󁹄{7,-Q#w~nm }) _GDc=xupY w:0 arV( W)xqpMײzΊ n#_OYwVW{+I@5ػ#S"N­AE)1\&?bZw.xr™a%!3z$fvXr.o$j`$6pCRuC6Qn;PrR>§2.KM41GAi18/s%oQr]lLzD S LzL PyGOѬKTđ:9KCb؋\͊騍lh&IVu~,ϊïY> endobj 1730 0 obj << /Length 1731 0 R /Filter /FlateDecode >> stream x͔KS0{,J,tЙ 8"O;Ħ~H[Oz 88O4/d[R6e$Y;+goq; )܈R YJvOD\f !{ޠ^ZmTjGЬ埢@/МCK|϶V}Վڐml h]Bt4JuOu,zD=Ųz eh|-aRMXv|P6)4ⵜt2NzǻbrGv )fa i(SzI ґ@q($l\_Y-Lp 1"+ ;/5sfr;ֈ><;E̲ f7ߤ9wͺ*ecC] {Ki梉Bncr` endstream endobj 1731 0 obj 463 endobj 1732 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1730 0 R >> endobj 1733 0 obj << /Length 1734 0 R /Filter /FlateDecode >> stream xX]O6}_]GH@nժ]Aw>,+dIBa:d18aUuALν݌"c$Cjv׏Q1! DBPd?}#olD̊Aξ|Cuϳ"F!;i!qb̙_ WOl6+n\U6G_هr~^Zm0p@OC(ju8bGW  JBZ,‹ި:4zF FŒP0$qC4i(`.k钱 |tT?UDJ% Skz&zZ"yȥ(&kP2ڀya.L5o\i 0 Eʨ/! ",uUFazz5J?GXC2yA;󪾪DA2)s؍x%JKRM ~ @,+#dɠ&sc58 |-mQn#/IF)f]dG L//;ь ,Y*?+ OAu=yy/NPSkPr  ?O.&0 &Q* W+gʢ10ht d7ExD ANEh{peW}=ICXM| ٺhJBJNhHA'$St a2^3ӅV74FqY1VZXDg@,W .m1!KsP>zŐB4ipc\e\TE؝]u\-SsA{fI,Juw Q`+Aa@Tdm@"S$8M HvASQ bDSt_knZDŃhKϖ%>J&Sz8|K׹~ն(8ޞلr'ir[!jczl b`L> endobj 1736 0 obj << /Length 1737 0 R /Filter /FlateDecode >> stream x͒Qk0+&1ռY` VZF$j;uZ#ᐫ'_΁0@;殄:AA, `m ynƾ^IIjm~o|!^7ir{/! PT@)I=V7YGNA?V0~e?Knߐ^<ұlFxhB%1oŶlQiSVu Idɪj@XN?`=˙9е0j0U7 endstream endobj 1737 0 obj 293 endobj 1738 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1736 0 R >> endobj 1739 0 obj << /Length 1740 0 R /Filter /FlateDecode >> stream xX[o6~[x%@6EC]EBdɑ;d1cq9<|QDsaat1zd ่Qq" y{}"g#~} G-CFlx(AtZcEǑD,? 'me34VZhj9e?joM0 qS@K(l}t8bPWWCƄfY&r+%Ί6Ⱦ?!eZןSaQd޴4J~=^wok FQXk(q[+Dn3cWm"F/WP wA~HGlvd(lu 59jkmrw2f8e6Dy25ǽv̜k kh a#ۏmx ;]<(YVR@jy$ioR%I_*+c%4Na c;#,vd>䋃),2SB@B1`h+0_}"KCoDD2=z^PS=Mc4ڧ%wi ǭ?KA> endobj 1742 0 obj << /Length 1743 0 R /Filter /FlateDecode >> stream x͒MO0  +NҬH&"q&T nkaߓF[ƑQگ fMm$xE6-0>b0.`Nўxw n D{X.`G'2gUBN@TvKOp_J =Τ},.zWn UZ_.A=[Svf]};̼ 4[(ppf TKUMgݔ#]G&PP./4L&n"˼oCG-?PCPa#;l E/ #?jj7j endstream endobj 1743 0 obj 307 endobj 1744 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1742 0 R >> endobj 1745 0 obj << /Length 1746 0 R /Filter /FlateDecode >> stream xX]o6}[)Ja-h"`$"K$Ϳߥ%ˎS0M(u<ÏECE ŋC;Fbχ InPdω}#ۼ7>!cA~%Zs[A 䧊Q<’(BBYd/ӏ^}X/+S}C?Gf)f{orS; ~R j!xU`D-1˲3iVrU , #BHJ$qLSst$hZx鬰Y-u|op;y5)/UZm $Dsj+,б> endobj 1748 0 obj << /Length 1749 0 R /Filter /FlateDecode >> stream x͓Qo0)Qdז }tɶdHfiq_-{ +w 4sb'dd<|ETL7^ _{lmݤA2DKC#Hs]N^ xS!$>$w(BܕR|3ip ыyYg jWjcq^0g](:~lŖv~Y endstream endobj 1749 0 obj 316 endobj 1750 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1748 0 R >> endobj 1751 0 obj << /Length 1752 0 R /Filter /FlateDecode >> stream xXn8}W- аHط$ "zw"%"KDw(ɒڴ,M 3g8<3CiDKs $C|ԍQ0f> (<7Ooߓ͵"wTm&0ը5~ݽrT4]G?4Nr}I)C3iJ1+h-j/_;dkk(0 p#] `j;Bh»,r>|(N\ O,**6L{ȣX dx-tBtMрPpB/m Dyֲo6+rndh|XDuVlمu9W#Y,!(r,5 >RnF_Ez{CzS#x![U8e s)@$A|z~`30΃!cED>MY:*4Zf]:YFlg3$%`(`ZtԉzvcRuAP@+TB]X\~e)ZE* nmR=T(vh*KuFnPԺfb&M_]e$amF' K4z<-RI-aia}$褞E4? N#tb@]XE5H&V3 $a L؈#=\%|h ZK#So;K*7ʚN3%CK % e,<\8mKi[CvKNtAw3ߩZ5i#h2s4RmNV%AԇYNmIZebî`L ݩ97NNi m4. C~m_WrUL { 4;;T>=ر¤U1Z0[{$`(%azo;=$s1GbC=qJt5 g}>jnfZgPƍ4;RǠ bN !QOT =z\`4py4Y~>=RP.6ۈd(<E*ZƟ {\ځow@LgG* ]y k$*Vcyqr۠O!`g/$H<$e{P[+/le d|z(d-+mekwӾGn|%M=Fûďsk@(޵qZƳY endstream endobj 1752 0 obj 1250 endobj 1753 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1751 0 R >> endobj 1754 0 obj << /Length 1755 0 R /Filter /FlateDecode >> stream xU]o0}Wܷvl}hS5-**`2+Ħi?BRpBPN8. Dyb"H8p]/pB dڧ_ޣ~ ?w|w5Zh<ӕ7l$+me|F{kIO$ vÃtw翨d|iV7T}5-;{YmfW #?\aOġ\6 8UsMg9IkRk?u%Vš/AmZr(QQ>)Т] ި+X7%a gଫwOT,Wz%!c.֓b, J䢂/i ?* dŤk C%rk tQOvH'~&`QblV*TV!B) xb 샶tAF) =>: ch!zԢNMqN,I>;u/ 8ڶSI?g_c֩܍GiQd*ch;h\Fۉ9I #787v՜u endstream endobj 1755 0 obj 545 endobj 1756 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1754 0 R >> endobj 1757 0 obj << /Length 1758 0 R /Filter /FlateDecode >> stream xXr8+*FpCng2K%){9)L4HjhJX.Q~ |09uXrH/AADOE,(Pt}AS(ۧw;&~| ! ]*2آ»4 5S8=ŔPHժ2hPd@sy492}QRo!DDbс*ʢ0gYV *(R ^TWБy}e+?(&Xh+bf @WPwY{ͱ8&$ALYu3#3@tZ1[;o oykLM?Ce7Y".Lmئ6'2͙̓-ot]0 ]S;\ƚԔyQTV~1'[$zDWgGLyz6T K,*( Y*i)2MXUYX6"|SxΊ CסhVk%5$ \-TUKzw]i)A"7YPSc5fVU3/l[]8޵1#|"N-! 0. bB|(z Q{$nGkͮ\Q9Ʃ* o^>bxԏp ,^HT&%enG?o4fٳhq_zC/Z}\ 9]8Sn*5 *nG\S]> endobj 1760 0 obj << /Length 1761 0 R /Filter /FlateDecode >> stream xUMo0+Pjc>MCRFjm00)׆,8uom1`ě7<g RMA@ZY{ C|xYh$&uDꍲ{g4=ÓD3{p5$>Un k[W<h-lQ6q"u8Wp~GŶnV'떊'Z_|wu]8 쮀 :fbj,E' žN5,+(^@e mہ~R ~,xRQF sJR $]Q[V4Q9a-096!!+8M-.aCXF`9QF52)Zƚ #I5C]j NS〯4}CE8<_4tMax75oE}},Ag}3K9#D7#osS#T#S ;t9~\2o0`dDPfJ endstream endobj 1761 0 obj 522 endobj 1762 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1760 0 R >> endobj 1763 0 obj << /Length 1764 0 R /Filter /FlateDecode >> stream xXKs6Wd&Anigk9 E2)=]%\X)Av> E^% SFQh"*0 `COe{{vKd}T|e҉& !m-&WɇOMkR8@1LKe^jXT 4MV2o_ߧbmkUa@;1#վ%!Yz>~ɋ( uz;ꈻEŒP&3N F1x$ꊻg,z }tP]mWI Jz ߶&!08UM$b1H.ezUw^5G#Բ0h1>(cb7)j&Pbx*U0'JcB92w|Jo+*ӼCE3fUaHSPN\ϖI]ND/Qez/ǵܺVgyV%KW ĺ 1E:x(K4WH"GURݿ(LZRS%&5F{-ta0Z5tVq thrpu՘2htiEUHɋNzV:+R(86PlV@AڢV"ٻFצN)2E^(W)P1()v@ƒ+:^PpּLW kz<j8#PE,wY9ϐ ~`D(C[:i~0[yqN`h-y8._*$PZW:(4PRU^>V`4z ` BpdG1=]umuv‡ 1{sMA%HxIǮEf^u;(_-#It>aeFInTU{Juy7302x7HsQ3kH(&1LC3, w^BC ԏnH_b\Դ6pctR5´3lԐV~{\HP\w|p m[%T_?˝G?ϘӏD" ZN?٫$ endstream endobj 1764 0 obj 1220 endobj 1765 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1763 0 R >> endobj 1766 0 obj << /Length 1767 0 R /Filter /FlateDecode >> stream xU]o0}WܷnBmKS75*r$V4Ϳ IZ !ϽǗ˝kb0&}SK w,t4`;AfEѮ~>Ga?p|unn5i<Ӆ;9!X:KA?YnqGDGb!p'S[YXBB|w>'zZ}mʶvn[@~ -xtG{3ǏF,yI:+Nctɀ D+mX"LA*:_1{4f,%-Q9˚U5kPZ1hf OY.k!ª.RUUhu-Le9-yh8G6 C&%[<[2=1gRdVc7V  h(*sHN.~ҏ \EL)yd]Ljw)EPiXJB×;p<{Vg<7c |dR{ EzC [谣fzb^~/Wv\i endstream endobj 1767 0 obj 579 endobj 1768 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1766 0 R >> endobj 1769 0 obj << /Length 1770 0 R /Filter /FlateDecode >> stream xX[o6~[Zayэ}Ku؀mMae Q$cP m{Y'QB;|$:wJ$͂z朁wM-Pq!-:)YXYlt\jj BM(lɼ ^7Ss {*K sIg}e׷1^UJ¤ɫ-,> 6 Y.xo=a2PR84L=kL@NOHBomV/~_bHݾL yQ!#]{<3\V齓$h}t) v'N~6趭 i\^AXdzF+_ vcD Χ*`8 Hte:Btu Z8ZASVR-K'T# 6ǥ^µ#7Doz1 +cF+nzǨ1KO`KB6u%W#!`.LRH1e!,:7sˬ\uRKo C(hI"kn·DWb=8G|۩1)@V6r77w{@{2[@n}}c/7C;S!jdSAG u(^!"i;ޭo6lce{SR ɍfwkP="51>)GFTŘ)>($.&n6jZ@2U yu[}wGSC7f{qw\õzCȜ#% ᔝ}j>Χ endstream endobj 1770 0 obj 1223 endobj 1771 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1769 0 R >> endobj 1772 0 obj << /Length 1773 0 R /Filter /FlateDecode >> stream xU]o0}WܷnBKS75*r$V4Ϳ I@ǵ!r0 sL%ʻa"tz p 8Ih`d(~!'=_[a_l )m;FOi$IBSw?ިN%n~ wszZ[ץjw4;.oȕ|[qP<S.m KnV* ~KN hNVKRV3aV,(ଏwERi87˘SΈurYk^ew\b]LImnN}Q0ȴhSވt "R gd:X1#lAHĔs3B1138%s@dx#;L,QZIn} &`m[$"~`˝hDfUOjvsEGo,X=uC hS; E!v=?Q=1/"Kȏ!/+j8 endstream endobj 1773 0 obj 581 endobj 1774 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1772 0 R >> endobj 1775 0 obj << /Length 1776 0 R /Filter /FlateDecode >> stream xXr6}W웓7vN;]CP$$sL2٣(ɐ e[g >P|]ڷXr~AADK,ܡ Ie{gy#3F~}9:m7DOō|t=}0m"R&!$Dpi8We^kTTsFa k.6S(nupJb̫]%T,u=U>Ů(M,zePN HОLζ KbXE2t >pH.&-KTj L'ehrQք'h,D]Ml*2 u;rH0ΉF-wZ$X!8E*U57GɢC ~Ef3!+*|ڜb Ds&4Fy9+@O+A q~~V$}ĦzH3?'t\@3F+fD^&UP^.+Bl)Aע,SûbOUZ= @W<y)r??tkSgu /J7E]Aې À2ES7u%GQo˿`SL>rlN4Ie!۪<+ywo a{"abE&XI*5^.VVMYM1Egkǥxrqa]y>3>uN7{¾sv I|;9n# Nzr{]LCg3xJhHb}jrQֵ{W 9m8R827w<+,Ic"Q륗򕔵v&,2?㸘Ď݌DWeYfmEuB zT~Թ_U՞R0l]igZNyl;pV7qQڤ%X tӪY^51ǽ|"Mpҧ1'Eǚ;/"#u'5Dq+ bs,ٶSne=jÀzNvxF#p"w82(A >׿g endstream endobj 1776 0 obj 1210 endobj 1777 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1775 0 R >> endobj 1778 0 obj << /Length 1779 0 R /Filter /FlateDecode >> stream xU]o0}WܷnBmKS75*r$V4Ϳ IZ !r`@% s0i@  Nh~Ga?p|unn5i<ӕ;9!X:KA?EnqGDGb!p'S[YXBB|w>'0ycw;km ݶf [fR"c]'1"j4 sL5 jVi e(|Еxr+J'yh %}q~K=>':džU6 !pu%2|#h XKZ@jD/bPt,6yjHP_t,ވt-k<3Vrjb<+/UrƊB8rp]K%SY@NK^`2Zl鮁БNB{: 5ϖL|k EV|Dzߺ| WvaO|(Y0a1]J(*l(uOS8YBCFhڿn`F7+jG81 endstream endobj 1779 0 obj 579 endobj 1780 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1778 0 R >> endobj 1781 0 obj << /Length 1782 0 R /Filter /FlateDecode >> stream xX]o6}oiH{ʲ In"P-*bK$'˿ߥ>njA:G^K˄ϡha|hB=b& pGRwǢ{:^!:3'ń›O8x>8mY_LO0s =uSvWhMVR*al_*l$HVַI="A2b(8&@k8$1i?zB8N BY@R@^ʥKSٵm!I6 ҖДK e;5 ):v mڼHErȅ3Fq5-t7i'! )18}ntT'K村o i"]8`rKBcgB>tK}a\XfBsvmSll2qm+,9ڙ\Xnf8k^ye;œ<Γv?L]E ==7DT_ps ޟO $nc(|Ouy 2[:<4Dn7 =;ia\05zcve& 'e.ۤl~ӿ:tkF+JeeW{yPֺxOL6z)q_=D;r.(P Tk8iwU_WE޿yS v_}G# volfq >VI H0~?JɈap6|?20t@J0;>` endstream endobj 1782 0 obj 1259 endobj 1783 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1781 0 R >> endobj 1784 0 obj << /Length 1785 0 R /Filter /FlateDecode >> stream xTAo0W[[ie6vڦP-m9`bRpφ$p\>??/vk rc\Ibs\-;~o]Q4cB8XQ;y|6hjp;҆;iOP(>&`qf-{Q>B}\k<^?H+UŦO53vklr5o4 4PЀ'w7={pfHqp㌧BilkBʳ=pWxU'gp u^G 8?~Ai%]-}RB z9/%Z 6"YI6dTZ*]B0kYj ^Th1u5j6aeuI/zթ|)ð6aI./ %*ͥ> endobj 1787 0 obj << /Length 1788 0 R /Filter /FlateDecode >> stream xX]o6}oi)֮+8ah@X-,~8fLE6,ҹ<:<cw behcqqS$\as 6>yoMtc75vw> x1:"B(nGNF?V(Li!JHcL &a/l{W7yq jlL>ym;~]]pH@S(DW 6J}m[["r̯ e C2@GZRD:J?%6@p6 7oP%Bm|-Y>W-=mQ"0FˋYAIs9M iqN8h0j%]w]3Eee)t ߞA6OEr[N9 _ n% ?|#k6$L3 g[Ve݆ yGocHmE昄.w %DɮxӲhڤha9z_yv i>mÌ'FJeC8m.yJe"73i!wB'Ży0Oz2+S 3@KO.+œ N*(Sl?Mjf `'$|ٴ#W?/E7~VHRhrr9I)5?} ."2"a.WY'KȤ^tONëFƒح B>t޳0/L{!C_ќڭ^j0߼&U;ByȝΒv3fd Jw1e&hAjK&gZ/&aZƘ3|kkgy i6huSiz7W=Zuت&#F}^y>1h8І$r#GZ' &.D)UoMA6JRB)kI,҆x&]EQ w: `-ri#'21(AdG xq{Xy]`O-vVt2BqXv_07KS,0=7aZFQ `tjqS>V %iahhlDl8jS0CשׁI endstream endobj 1788 0 obj 1254 endobj 1789 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1787 0 R >> endobj 1790 0 obj << /Length 1791 0 R /Filter /FlateDecode >> stream xTAo0W[[ie6vڦP-m9`bRpφ$p\>??/vk rc\Ibs\-;~o]Q4cB8XQ;y|6hjp;҆;iOP(>&`qf-{Q>B}\k<^?H+UŦO53vklr5o4 4PЀ'w7={pfHqp㌧BilkBʳ=pWxU'gp u^G 8?~Ai%]-}RB z9/%Z 6"YI6dTZ*]B0kYj ^Th1u5j6aeuI/zթ|)ð6aI./ %*ͥ> endobj 1793 0 obj << /Length 1794 0 R /Filter /FlateDecode >> stream xX]o6}oi)֮8ah C)[,),~8fL{E6"ҹ<@'4aF:"~hY>*yaxy2WY Ym9)s?AVIup:L'6D 4zXyG/Cڦ͊0М%H.1 Zuv,&ᘼ}ps{* i8=s[&;WsvhU"cIhLg-RK?εO%2K>!d:y3hUVmlѺP#he=B9 g:k]'m2TgO'S;IPW(2MуhV2zy!!\H_"!(0Z"%G]SS2 IVL]9@a{YQa)"Osk׾T_yjq;,=Γv;v WLZ=% ! V AI5 [|ԁ[{%ƜZA +bըÓJC$QCW7#\}DɈ#\LCP!8sGzp9GQ݇zCFl$XwĭQ,Fd2Uil@tH ^M[ozY\< ޽D)m}r탎hʶ 8q̶ʸH6^ 6=u%Od<]Z w@CM1n+wNINr [JLM.2, "^K5*,ܔMI*o?ҟqlC~q;F;vd=E(vS'c=gƪϿW endstream endobj 1794 0 obj 1240 endobj 1795 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1793 0 R >> endobj 1796 0 obj << /Length 1797 0 R /Filter /FlateDecode >> stream xT]o0}omр11I\oM!^gŨ2.AE6<_ ;YU0^ӥ,azL7|M3ocP=I|[VƾԣI/z%,G 8yηJT0;=z(#MpPڗ1|Ĝ;cG!8H:m(9O~ D endstream endobj 1797 0 obj 473 endobj 1798 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1796 0 R >> endobj 1799 0 obj << /Length 1800 0 R /Filter /FlateDecode >> stream xX[o6~8oiMvOYv݀Y CSE9BdId;h1mqÏύ2b@sj01>bAL{JEwzCt# G>h<s+rQ~~x0ɞB*b"2?&sBwUs3$uןaɳ ƿ^){ށ.P)Я6W#TRaV}[.ˋN7$I]MS-:ki2Ɉ 8c0X[` @,kΣm@yR:|>itX­ΪFCRRUć1^wPAiVzWF*$(P*vګeYmޮjTJ?jǀqN q#&B .&C"Gs@ie.]cX6nt˞0-~O*ƶnP #CfUnҦyU]Rvhq |V81NA7i>lbEBavںj:?39CǟVfWy *k/ ʸQUӪ2qaWhȚji_CGpD\B/mRo]$LTXT?ܔ#x2(ڀt{LZtFRH}Y=B)0ѪgCXR7гPC,7hY-ʞ¨ Y4{OA{Ȋd6vp[a2$A`Bµ[%өU 'OL!bBS[3ڃ?ȳH(`FluTxiUNOAȤ>rtKi'x{f|m$Yc$F4Yh\ )>eDW;;4Jm/qnWU0=%|7V|u endstream endobj 1800 0 obj 1278 endobj 1801 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1799 0 R >> endobj 1802 0 obj << /Length 1803 0 R /Filter /FlateDecode >> stream xTMO0W 8vIĩj[REk!6 }d$as#zy~P@% r(D bQL8ca?8?DbӮ~9~ 'kK*_:p҅gd9JŠ|N7!-I x$I, 8K _>ZU+HH{p O5Svl)ۻZPԂO8oFU׍u+R1جpgdVQJ`יu:˯6|7 '}WqܡW7!?_ p4]YY3~Pn\rl1>]m/fD(E3+gBT4t ?Na-B6I(BU^gBy8h{p/B }L lg}1z~$'fy g|+ήB endstream endobj 1803 0 obj 444 endobj 1804 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1802 0 R >> endobj 1805 0 obj << /Length 1806 0 R /Filter /FlateDecode >> stream xX[o6~8oiE)˶b$ah CX,)fL{E6"\x1zk0&J`!{]=`[jQ,Q9~3ZS8ݭW"Fvx!0 IZH(TBLWx^kX5wyy ny~oV0ro92w8Fd@)-kupJ"̫MT Mu߽+5=iΠZLψ0(C_*>.TD(qkΣ]@YR:U?.Nw@ނ%|Ug; EP(%jQVu+zF lIՃh#8'BI Q4z|%I.=孙 gz T4xen`ZF}y 7 sV# Y?I̵BrKR[ %݇n2mߺ3CDߠ3]W.gc'/%=a#{ȊϚuBa@%Ѫ9佄\Μ'&ۅW), #ӦvA~dOAH:֟.FE1xdrMki|XwG8lѰ١q0 2I]IXstҥ~^,1̀a8~fz&Q~aFaBKc3΁b`<)^ro9D(Ny ]~rVտ/Qu2BcqJ^:.9=EE*?!sߴk!bo.).f2lVvWa}9'+bF¹~d_E(.?{{g5 endstream endobj 1806 0 obj 1208 endobj 1807 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1805 0 R >> endobj 1808 0 obj << /Length 1809 0 R /Filter /FlateDecode >> stream x͔n0~#Y 1@5mf.BXelnyb j[^ڜ ;͞5_%&`Fh?4}A튢]c'~wgr}ۨi <.]xI#(CLޝ 08G~E@r/x듋f*1R+D/I(FiUDF[%8]>YͰ! ^tJmFuqe`CuAWqO) endstream endobj 1809 0 obj 453 endobj 1810 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1808 0 R >> endobj 1811 0 obj << /Length 1812 0 R /Filter /FlateDecode >> stream xUr0{lQW c:mgz Lۊn2ۗ&ƃEoɣ溲 fQ x Ca] 펬ٽB>,ᇧ=OݽM<ҵ[o#»w㳴\R(p&Aݛ/T/ NVCw唽n' df4t-$N 0Wl&(oYT]_Wk]fdLS=j`-$wR܏gQHM[p!'AŸ>ԃLE=U OZ,Un{VahO1$ CpobUU d>"2d 87>w 'Z8C$|'S{8ICz@*xk:^>\E6ozIi $LIHz@}`:T*QC%`ai/tW" Z'sfHwTJI' C̖v ;q䋽?Gޏvi3|/GBDYxt>VJ endstream endobj 1812 0 obj 575 endobj 1813 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1811 0 R >> endobj 1814 0 obj << /Length 1815 0 R /Filter /FlateDecode >> stream xVMs0W-G``88j-CG4\\hL{z6"-\Pȫv#)0DHhb=  }`wGݽb?"a]^t": /Jev0~h-(a"K C 0WKuW0T}a՞w:;~8 t~h!wa@1WrcmsuzlY(/urYdsI3)aLlA3AjnR~Ry@jVogI`|ɨ-4M][x^h耈UD,=DO(C1rvۧ'Hfέ_M薑IHR`7\0a*Ƅ^ =#tFVOdWJ=ǽbٚgΏ2:^(472^rلU1<):LAFvmJ.2] gc$??9IE2Vg: WV{I'6n`ގa ``l8'g{4 endstream endobj 1815 0 obj 673 endobj 1816 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1814 0 R >> endobj 1817 0 obj << /Length 1818 0 R /Filter /FlateDecode >> stream xVMo@+`[U+J=QEFYp΂ X^4͛f$.`@:qT2H"> (aCw(ڧBt{ (| .0:xAn νB苪"x; |Qű?.:ڃXowiґ&n ~n6v+&Ql_'Ggv]Mt endstream endobj 1818 0 obj 674 endobj 1819 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1817 0 R >> endobj 1820 0 obj << /Length 1821 0 R /Filter /FlateDecode >> stream xUMo@+`U{4ب8 $, 6)X47yP"A!| w(:,pQ#owo?aBtxXOx>{7.B蛪һ`gi"RQ\wtTڿYB+]1V0ƺ]w8%i صlupJ$j[!*1(fm;}~^5ƮS[i4ϴe# gR- dLDxF>Is9Dst\~u =eU&FGI#) I#Lj=(()i~)7HFo}Z% #tDtPBwjNzu'> endobj 1823 0 obj << /Length 1824 0 R /Filter /FlateDecode >> stream xUKs0+$@(fN{ LPf8j;aS㱘5co{w8(2xlCnZ 鉼}wkW ~xɻ߶Wbd_7>} #wOZGDL Mqo汪dd1xAWJX0B-#A S6W*[Ԉ(֜oeNY Kk4Wg41m?_0%"== :=W! "Ge)9\b H]L0 i&[VMADgZEZ"@sd> /;I5{Vu}]ټtL`2)ѷ'@"IWYieZ>#DžOBH%Jmqky]]iSL^'mFv`YU2V%*ӹ,6j.t 68* 5Op88˙9~.+pdD/> endobj 1826 0 obj << /Length 1827 0 R /Filter /FlateDecode >> stream xUMs0+ʱ3=tҌG1f ‘}%0{jb<۷h=^7n"N B >n `DV?}z۵p{OyzO]Z< I'rÐxއ/ Z&P|!D@CaqRMʭO0}U}cNjɺwrT7伅x a@1⶯Nr 1<5ZdD:6l!il?"JĖ/ vABqEx?/JyphT N-ֺPEe'89hdM w8Fa:wx~IMK6  Ҩ!],B1 SfU|зQqjҟtyqH0(1Z*ƤcaMwLZ<tC\.֩4ʰ (5gҥـ Pmir7=lae (_]*Iq(%:q3uOƥ{'^GG2UX^lfL&f\Ok>!xGO0zs<8_Uw(0 endstream endobj 1827 0 obj 605 endobj 1828 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1826 0 R >> endobj 1829 0 obj << /Length 1830 0 R /Filter /FlateDecode >> stream xWr0w.BYvE'] !rL# I`' ,jb{F8À\XB !8pP{^t\#dVڇ~yCջstzS!>އ/!`깵4C$I$E j)&o.Nw:[u]w(3K&!:4f5?>[6uGqCf`UH=ߎ'؏tB(6oBd=Ap>A&K~k0!? -e=_!7uQoLI',N=hlWP?@D'=Ϭl.LJ4*a6krT]GRu]HDLZз Fj ݪCA5Wn}&oN߂o'F,曐\EVq 4=,_KyyڳJͿcBésǎ [ xyVnf'܎h~FYW\ ?8fvT!S5Jþoyv 3ժ7 q'L#x}&pg`Fx,24:'/۠8Y۬We [m7"L0M s[dle&3E \nʖ3y,meh̝]kױ쮲u4N@5 h[YTwH,I!FF;pޝf9C9ANch8Tz b(%{x^Ћ endstream endobj 1830 0 obj 833 endobj 1831 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1829 0 R >> endobj 1832 0 obj << /Length 1833 0 R /Filter /FlateDecode >> stream xUMs0+ʱ:qä4!Fƌp7ͿJ[m.Mk޾ݧgǀuf8Knc 90ĂOxEf1gy7M1קlT}QQȼcBxV(_)yqK~Uwuʫ d _Ag)w8%ZHNWTRfԷTzNR$E tDf? qg>(fi1 t%I*v] e *S6@R@I.zUG:VX yԃNf\r}3N/I%‚Ed-b(l^qPMy&+շ,3> endobj 1835 0 obj << /Length 1836 0 R /Filter /FlateDecode >> stream xUMs0+u%B9vC'ndeGJ|/Mb], 3 X-FA0>DMᆅݢ34;z;vkaVj!|o5иV#^Y|S"o}Eϥ8ܖRzx3i> \,_i~-Tօ-e;Ւu0n~ Á!v+ JDmay6WEېJ-zRaUD m{`3(G:@StƁnC"E+S z]73 "kb&4qQMtא&ҞM_AR^[+ũ->OjGCS+}dQl,8KI2m•:Z9mbD1j.2 4=ŋiÈyh*8ɃaHZoU=dCi}!VQv;!6sVgZeDyk8vJSбqb 3f!L#|t㷧0ۻ79ޔ\Uak endstream endobj 1836 0 obj 574 endobj 1837 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 1835 0 R >> endobj 1838 0 obj << /Type /Action /S /GoTo /D [1639 0 R /XYZ 72.0 720.0 null] >> endobj 1839 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 709.5 263.497 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1838 0 R /H /I >> endobj 1840 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 709.5 539.997 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1838 0 R /H /I >> endobj 1841 0 obj << /Type /Action /S /GoTo /D [1642 0 R /XYZ 72.0 720.0 null] >> endobj 1842 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 241.48 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1841 0 R /H /I >> endobj 1843 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1841 0 R /H /I >> endobj 1844 0 obj << /Type /Action /S /GoTo /D [1645 0 R /XYZ 72.0 720.0 null] >> endobj 1845 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 235.93 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1844 0 R /H /I >> endobj 1846 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1844 0 R /H /I >> endobj 1847 0 obj << /Type /Action /S /GoTo /D [1648 0 R /XYZ 72.0 720.0 null] >> endobj 1848 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 221.49 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1847 0 R /H /I >> endobj 1849 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1847 0 R /H /I >> endobj 1850 0 obj << /Type /Action /S /GoTo /D [1651 0 R /XYZ 72.0 720.0 null] >> endobj 1851 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 215.94 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1850 0 R /H /I >> endobj 1852 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1850 0 R /H /I >> endobj 1853 0 obj << /Type /Action /S /GoTo /D [1654 0 R /XYZ 72.0 720.0 null] >> endobj 1854 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 243.13 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1853 0 R /H /I >> endobj 1855 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1853 0 R /H /I >> endobj 1856 0 obj << /Type /Action /S /GoTo /D [1657 0 R /XYZ 72.0 720.0 null] >> endobj 1857 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 248.7 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1856 0 R /H /I >> endobj 1858 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1856 0 R /H /I >> endobj 1859 0 obj << /Type /Action /S /GoTo /D [1660 0 R /XYZ 72.0 720.0 null] >> endobj 1860 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 249.8 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1859 0 R /H /I >> endobj 1861 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 625.5 539.998 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1859 0 R /H /I >> endobj 1862 0 obj << /Type /Action /S /GoTo /D [1663 0 R /XYZ 72.0 720.0 null] >> endobj 1863 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 241.48 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1862 0 R /H /I >> endobj 1864 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1862 0 R /H /I >> endobj 1865 0 obj << /Type /Action /S /GoTo /D [1666 0 R /XYZ 72.0 720.0 null] >> endobj 1866 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 601.5 213.876 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1865 0 R /H /I >> endobj 1867 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1865 0 R /H /I >> endobj 1868 0 obj << /Type /Action /S /GoTo /D [1669 0 R /XYZ 72.0 720.0 null] >> endobj 1869 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 240.1 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1868 0 R /H /I >> endobj 1870 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1868 0 R /H /I >> endobj 1871 0 obj << /Type /Action /S /GoTo /D [1672 0 R /XYZ 72.0 720.0 null] >> endobj 1872 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 203.45 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1871 0 R /H /I >> endobj 1873 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1871 0 R /H /I >> endobj 1874 0 obj << /Type /Action /S /GoTo /D [1675 0 R /XYZ 72.0 720.0 null] >> endobj 1875 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 206.23 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1874 0 R /H /I >> endobj 1876 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1874 0 R /H /I >> endobj 1877 0 obj << /Type /Action /S /GoTo /D [1678 0 R /XYZ 72.0 720.0 null] >> endobj 1878 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 204.56 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1877 0 R /H /I >> endobj 1879 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1877 0 R /H /I >> endobj 1880 0 obj << /Type /Action /S /GoTo /D [1681 0 R /XYZ 72.0 720.0 null] >> endobj 1881 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 213.45 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1880 0 R /H /I >> endobj 1882 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1880 0 R /H /I >> endobj 1883 0 obj << /Type /Action /S /GoTo /D [1684 0 R /XYZ 72.0 720.0 null] >> endobj 1884 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 203.45 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1883 0 R /H /I >> endobj 1885 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1883 0 R /H /I >> endobj 1886 0 obj << /Type /Action /S /GoTo /D [1687 0 R /XYZ 72.0 720.0 null] >> endobj 1887 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 206.23 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1886 0 R /H /I >> endobj 1888 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1886 0 R /H /I >> endobj 1889 0 obj << /Type /Action /S /GoTo /D [1690 0 R /XYZ 72.0 720.0 null] >> endobj 1890 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 204.56 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1889 0 R /H /I >> endobj 1891 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1889 0 R /H /I >> endobj 1892 0 obj << /Type /Action /S /GoTo /D [1693 0 R /XYZ 72.0 720.0 null] >> endobj 1893 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 251.47 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1892 0 R /H /I >> endobj 1894 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1892 0 R /H /I >> endobj 1895 0 obj << /Type /Action /S /GoTo /D [1696 0 R /XYZ 72.0 720.0 null] >> endobj 1896 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 250.37 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1895 0 R /H /I >> endobj 1897 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1895 0 R /H /I >> endobj 1898 0 obj << /Type /Action /S /GoTo /D [1699 0 R /XYZ 72.0 720.0 null] >> endobj 1899 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 263.69 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1898 0 R /H /I >> endobj 1900 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1898 0 R /H /I >> endobj 1901 0 obj << /Type /Action /S /GoTo /D [1702 0 R /XYZ 72.0 720.0 null] >> endobj 1902 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 222.04 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1901 0 R /H /I >> endobj 1903 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1901 0 R /H /I >> endobj 1904 0 obj << /Type /Action /S /GoTo /D [1705 0 R /XYZ 72.0 720.0 null] >> endobj 1905 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 236.49 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1904 0 R /H /I >> endobj 1906 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1904 0 R /H /I >> endobj 1907 0 obj << /Type /Action /S /GoTo /D [1708 0 R /XYZ 72.0 720.0 null] >> endobj 1908 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 257.04 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1907 0 R /H /I >> endobj 1909 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1907 0 R /H /I >> endobj 1910 0 obj << /Type /Action /S /GoTo /D [1711 0 R /XYZ 72.0 720.0 null] >> endobj 1911 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 219.27 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1910 0 R /H /I >> endobj 1912 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1910 0 R /H /I >> endobj 1913 0 obj << /Type /Action /S /GoTo /D [1714 0 R /XYZ 72.0 720.0 null] >> endobj 1914 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 220.93 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1913 0 R /H /I >> endobj 1915 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1913 0 R /H /I >> endobj 1916 0 obj << /Type /Action /S /GoTo /D [1717 0 R /XYZ 72.0 720.0 null] >> endobj 1917 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 230.36 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1916 0 R /H /I >> endobj 1918 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1916 0 R /H /I >> endobj 1919 0 obj << /Type /Action /S /GoTo /D [1720 0 R /XYZ 72.0 720.0 null] >> endobj 1920 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 231.48 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1919 0 R /H /I >> endobj 1921 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1919 0 R /H /I >> endobj 1922 0 obj << /Type /Action /S /GoTo /D [1723 0 R /XYZ 72.0 720.0 null] >> endobj 1923 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 209.82 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1922 0 R /H /I >> endobj 1924 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1922 0 R /H /I >> endobj 1925 0 obj << /Type /Action /S /GoTo /D [1726 0 R /XYZ 72.0 720.0 null] >> endobj 1926 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 265.38 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1925 0 R /H /I >> endobj 1927 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1925 0 R /H /I >> endobj 1928 0 obj << /Type /Action /S /GoTo /D [1729 0 R /XYZ 72.0 720.0 null] >> endobj 1929 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 234.27 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1928 0 R /H /I >> endobj 1930 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1928 0 R /H /I >> endobj 1931 0 obj << /Type /Action /S /GoTo /D [1732 0 R /XYZ 72.0 720.0 null] >> endobj 1932 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 241.48 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1931 0 R /H /I >> endobj 1933 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1931 0 R /H /I >> endobj 1934 0 obj << /Type /Action /S /GoTo /D [1735 0 R /XYZ 72.0 720.0 null] >> endobj 1935 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 253.41 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1934 0 R /H /I >> endobj 1936 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1934 0 R /H /I >> endobj 1937 0 obj << /Type /Action /S /GoTo /D [1741 0 R /XYZ 72.0 720.0 null] >> endobj 1938 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 229.54 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1937 0 R /H /I >> endobj 1939 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1937 0 R /H /I >> endobj 1940 0 obj << /Type /Action /S /GoTo /D [1747 0 R /XYZ 72.0 720.0 null] >> endobj 1941 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 234.54 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1940 0 R /H /I >> endobj 1942 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1940 0 R /H /I >> endobj 1943 0 obj << /Type /Action /S /GoTo /D [1753 0 R /XYZ 72.0 720.0 null] >> endobj 1944 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 266.19 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1943 0 R /H /I >> endobj 1945 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1943 0 R /H /I >> endobj 1946 0 obj << /Type /Action /S /GoTo /D [1759 0 R /XYZ 72.0 720.0 null] >> endobj 1947 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 266.76 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1946 0 R /H /I >> endobj 1948 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 277.5 539.998 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1946 0 R /H /I >> endobj 1949 0 obj << /Type /Action /S /GoTo /D [1765 0 R /XYZ 72.0 720.0 null] >> endobj 1950 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 271.76 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1949 0 R /H /I >> endobj 1951 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1949 0 R /H /I >> endobj 1952 0 obj << /Type /Action /S /GoTo /D [1771 0 R /XYZ 72.0 720.0 null] >> endobj 1953 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 285.1 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1952 0 R /H /I >> endobj 1954 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1952 0 R /H /I >> endobj 1955 0 obj << /Type /Action /S /GoTo /D [1777 0 R /XYZ 72.0 720.0 null] >> endobj 1956 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 281.2 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1955 0 R /H /I >> endobj 1957 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1955 0 R /H /I >> endobj 1958 0 obj << /Type /Action /S /GoTo /D [1783 0 R /XYZ 72.0 720.0 null] >> endobj 1959 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 248.42 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1958 0 R /H /I >> endobj 1960 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1958 0 R /H /I >> endobj 1961 0 obj << /Type /Action /S /GoTo /D [1789 0 R /XYZ 72.0 720.0 null] >> endobj 1962 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 248.99 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1961 0 R /H /I >> endobj 1963 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1961 0 R /H /I >> endobj 1964 0 obj << /Type /Action /S /GoTo /D [1795 0 R /XYZ 72.0 720.0 null] >> endobj 1965 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 253.99 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1964 0 R /H /I >> endobj 1966 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1964 0 R /H /I >> endobj 1967 0 obj << /Type /Action /S /GoTo /D [1801 0 R /XYZ 72.0 720.0 null] >> endobj 1968 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 267.33 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1967 0 R /H /I >> endobj 1969 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1967 0 R /H /I >> endobj 1970 0 obj << /Type /Action /S /GoTo /D [1807 0 R /XYZ 72.0 720.0 null] >> endobj 1971 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 263.43 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1970 0 R /H /I >> endobj 1972 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1970 0 R /H /I >> endobj 1973 0 obj << /Type /Action /S /GoTo /D [1813 0 R /XYZ 72.0 720.0 null] >> endobj 1974 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 297.31 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1973 0 R /H /I >> endobj 1975 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1973 0 R /H /I >> endobj 1976 0 obj << /Type /Action /S /GoTo /D [1816 0 R /XYZ 72.0 720.0 null] >> endobj 1977 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 261.2 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1976 0 R /H /I >> endobj 1978 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1976 0 R /H /I >> endobj 1979 0 obj << /Type /Action /S /GoTo /D [1819 0 R /XYZ 72.0 720.0 null] >> endobj 1980 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 256.76 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1979 0 R /H /I >> endobj 1981 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1979 0 R /H /I >> endobj 1982 0 obj << /Type /Action /S /GoTo /D [1822 0 R /XYZ 72.0 720.0 null] >> endobj 1983 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 267.87 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1982 0 R /H /I >> endobj 1984 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1982 0 R /H /I >> endobj 1985 0 obj << /Type /Action /S /GoTo /D [1825 0 R /XYZ 72.0 720.0 null] >> endobj 1986 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 270.08 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1985 0 R /H /I >> endobj 1987 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1985 0 R /H /I >> endobj 1988 0 obj << /Type /Action /S /GoTo /D [1828 0 R /XYZ 72.0 720.0 null] >> endobj 1989 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 263.42 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1988 0 R /H /I >> endobj 1990 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1988 0 R /H /I >> endobj 1991 0 obj << /Type /Action /S /GoTo /D [1831 0 R /XYZ 72.0 720.0 null] >> endobj 1992 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 285.1 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1991 0 R /H /I >> endobj 1993 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1991 0 R /H /I >> endobj 1994 0 obj << /Type /Action /S /GoTo /D [1834 0 R /XYZ 72.0 720.0 null] >> endobj 1995 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 248.42 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1994 0 R /H /I >> endobj 1996 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1994 0 R /H /I >> endobj 1997 0 obj << /Type /Action /S /GoTo /D [1837 0 R /XYZ 72.0 720.0 null] >> endobj 1998 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 257.3 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1997 0 R /H /I >> endobj 1999 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 1997 0 R /H /I >> endobj 2000 0 obj << /Length 2001 0 R /Filter /FlateDecode >> stream xMW~݃#Zln[RVQ*7ɖs(3UoḦu"Vvww}WWv^۫=_z|_~w|`nUp_?z?z}/z|_z~_>'_׶WW?S[^:\W_տ?ǧ?W><}|OO|zۧWw?W|?ܾ_R9_y~r$|_/??}x?<>\>u6gn.mM qx@\vA    LLL"XE.m"qM␸Iɏ3߿}ow?<zdiܝ[#YXꤺKg겉eIJlbYv,X],KRIJ,,,,,,,,+YV\cm+zB]R#].:؅:&A,'YNM,c2v],c2XF(ddddddddYɲe%F,Yvdɲ A,'YNbX&enbX.e"Y222222ɲ>8H/mO:uƈO:^kܝx)u/TWc:Rύꠚ,X!b(Pb(RH-k"5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\Cr Qr Q5DHMAAAIIII,+YVldȲe'N,;Yd9r$)k"X!b(R@]r Q& $$Q8x8D?}Ǘ<>5bzHFP']5b:nTOYd9r{b|7Z,^A"]2222222ɲe%u{8m%. Fz]Z uzH.:&I,'YN-X^bycj3X,,,,,,,+YVdYɲe#F,;Yvd9r I,Xn'Z,o7]wRXn*^V5YYYY&Y&Y&Yn/:2JFǯ=0zpz")wީ^+CNIuzSuPM,Yd9r5Z,,Jj\(r͢.bfQReeeeeeee%J,Y6ldȲe'N,Yd9r5Z,, ],,Jj\(r͢& $$$J,+YVldȲe'N,Yd9r$)k%XYԻXYbfQP\(22222ɒ>Y]}Ϣ_ ΢~~z7z_cܿ K}:'uPݨRI]P9ŲlbYv,X],.e)bY YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X?HX&ebX.Q2XF! $$$J,+Y6ldȲe'N,Yd9r$)enbX.ebE,eBAAAII/gwq$z?ۗf=}}uom+CSꤺC.:nT庴Bj\V@]r]Z!5YYYYY&Y&Y&YVdyz\COF8R=>=Nr$IS,ץR庴],ץR庴Bj\VHMAAAIII,+YVdȲe#N,;Yd9r$IS,ץR庴],ץR庴" 222222ɲ}TzO#gv:xӷ?_RqǡO F(TeR']],eR"2222222ɲe%z|?s煺T']QT7ԣP]&I,X?HXuكb.{Aj LLLdYɲe#F,Yvdr A,'YNb.{Z,ePb.{Z,eRAj LL|~Ju}]z4g:ix]"/S|"w/S|%|R<-|X<,oOO,TO-WrR==JnaaaiiiT||R!Wjsiy壌aS:MuWrR==BWrR==B^Hd+VSZMj3fTvS:Lu0iT'y|%'CzzTO>R==JnaaaaiiQ~nOeʫ>yw~Ekm[q#qCyX,;WMu0aTNSzGrR]N$'@R]$VSZMj3fTvS:Lu0iT'?h9('u}夺FrS S S S SMSMSMSZMj3fTvSMu0aTNSTC鷺 T5D꺊rS S S SMSb'ʧVo?o?ǧmm)RwXFz퍅R=퍅Z,o{c׻XB-"Peeeeeeee%J,Y6ldɲe'N,Yd9rH-Pmo,by{.by 5YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YN퍅Z,o{c׻XB-Pmo,ddddddJF"_G>=^ljsu-2Zf|]F+y|P.TvSM0aTNSSNk1夺vSNkTcM5L5L5L5L5M5M5Mj5,*B~FQ7'mɫuiNS:MuڈL9Ȓ鷺"SNk/2夺6#SnaaaiiiTVSLj3nTS:Lu4iTdIu-M|'յ6rR]%/V'Snaaaiii/t>ꧫ>R~qُoIQP^-TvSMu0aTNR]7Iu ('5|TMBkFVSZգxy,˛^,nyZnTNSoIQNkF9ZMj5jT6SM0aTNS:Iu ('5||'5|TMBkFowyۃ[tynV_zR|U+iyJyX,])7fTvS:Lu0iT'I)'u+;I)'u;T jjjjjjjj5jT6SmMj7nTS:Mu񃖓הrR]wRN~S ;N)70000444jT6SmLj7nTS:Mu4I^TIuݍ*N~TIuݑJ9{R)70U-͖fKi./c0{nuo}_惡G/fyX,by|PwM0aTNS:Iu ('5|'5TKBkEVSZ_^햧Y7'X^-7iT'夺^xQNk%y!5TTTTTTTTVSLj3fTvS:Lu4iT'Fjn;NjRBYH5^wq`5>K>|ttu!˛օZ>(?-ej3nTvS:Lu4iTK.z^v!'R 9}9/z^v!70000444jTO'[_O'[Y>)?l]ȫօ<-7iTNR=/ey)ۗTK.z^v!'R VSZMj3fTvS:Lu0aTNR=/ey)ۗTK.z^弐y)ۅTTTTTTTOխR~4|<,oO_.eW/]rSMj7aTNS:IJNlWrR=-ei)ۅi)ەTTTTTTTTVS}Br)ە<,oO_.eW/]rS:Mu$R+9]wR=-ei)ەTOKٮZMj5jT6SM0aTNS:IJNlTOKٮzZv!/zZv%7000444՗÷8n|0|?D5|ͥl|w giyR+yX,\v%7fTvS:Lu0iT']IBi)ەTOK.TOKٮZMj5fTvSM0aTNS]IBi)ەTOKٮzZv!S S S SMSMSMSZMj3fTvSMu0aTNSzZv%'R NlWrR=-ei)ەTTm6[J-͖γ8|0{+n߿{ӿOo}͟|{76(O,^~P-$O˻䷛$˛To7IN$'{VSZMj3fTvS:Lu0iTNRݼ'9nރ|'{=IvZMj5jT6SM0aTNS:IvzyTo7IN /zyOrS S S SMSMSMS*=]ħ[.>|7\_G[$^~wʏcUfǪW;TNj)Z baaaiiiTVSLj3nTS:Lu4iTc#H56RTc'I5vRBQH5VSZMj3fTvS:Lu0iT'FjnNjTjS S S S SMSMS=]~q0Dgxzn+ݟwe I/A/夺.c=?}l1<> ܝ>(>(ʏo:Lu4iTמIu|'յrR]{>$/|PnaaaiiiiTC5c敼햧Y7'X^-7iT'UA9=!y!յrS S S S SMSMSMSZMj3fTvSMu0aTNS|PNkχ;=A9=jjjjjB`tRvS>~㛏wvܫ|"Y>)_M$FrRm4ToM$'FIB&jjjjjjjj5jkJ\Ff|m4Z>(_M$OMu4iToM$'FwRm4ToM$'FM5L5L5L5M5M5Mj5jT6SmMj7aTS:MumzhN&m ToM$7000444Ӵ.?Lkʑߘͻ~ww^ѠK I^,4PNk yjjjjjjj5j7ػI鍽 y|P~zcB4iT'Fjl;NjRBQH5VSZMj3fTvS:Lu0aTNR]Iu $Iu ('5h4Pnaaaiii랣|açwf^nCy|R~|Z>(?PwʇS:Lu4I%Iuݢ$N%Iuݢ$y!uZMj=Tۚo햧Y7'X^-7iT'[('u夺nQT-JR](QnaaaaiiiTVSmLj3nTS:Lu4iT-JEIT-JErR](QnaaaiikuWYgQ}ߚEӻz2K>~XwʏI݃j|0aTNSD92Iz,夺D92QnaaaiiiTVSLj3nTS:Lu4iTc('X&wR]eTc$/DVSZMj3fTvS:Lu0iT'2QNLz,夺$y!X&M5L5L5L5L5M5MWy`&U~{'oV3㷶?xYMZ)=SY>)=Sj|4Ie#ղjHlZvR-;TK!#%70000444jTZFlIOYj|얧:Mu4I9IvlN9IVHN9M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuArR]7IArR]7I^Hu G&Awy`7o?||z7)9kq?۩5Nڣ&yX,OS:IupF9$IupF9$/n8TTTTTTTTVSk;޶ۜW[w׎~f|藼ZnTNR]7QN3IupF9$/n8TTTTTTTTVSLj3fTvS:Lu4iT'Fjn;NjRBYH5Ge#q4ʶm=}yqDy|R~Q^-AnTvS:Lu4iTR@rR]HQN) (70000444jT6SmLj7nTS:Mu4I)Iu] %N)Iu]J9 (7000444jTVSmLj7nTS:Lu4I)Iu] %N)Iu] %y!ujRl6DCC?<}ȟ~~wR|8Kk A]S.z<,'յF000444jTVSmLj7nTS:Lu4Ik 夺HC97R]o(70004444jT6SmLj7nTS:Mu$յrR]o('յrR]o$/Pnaaaaii2;?ͺͺ|n֕<-|n֕<,oO_>7JnTOͺYTOͺYBf]M5L5L5L5M5M5M5Mj5՗ͺ|n֕<-|n֕<,oO_>7J^-7iT'u%'szzn֕TOͺR==7JnaaaaiiiTVSmLj3nTS:Lu4iTOͺYTOͺYWrR==7Jnaaaii `F3~{G>܌p*j|얧Y7˧Iu]"NIu]B9^(7000444jTr/V,nyZ)aS:MurR]HrR]H^Hu]BVSZMj3fTvS:Lu0iT'FjnNjTjS S S S SMSMS?y0GǷ?||z^}G}۶h+=G@)m!y|Pmy!(iy|4iTrR]# wR]# Iu('5TTTTTTTVSqܴIy+W}<-TNS:Iu('5|'5THBkDVSZMj3fTvS:Lu0iT'夺F@QNk$y!5TTTTTTT_ac+fA緬M,[ܽfPwN,˛Y,7Ik 夺6HB9M,R]X(70004444jTO_OS~:>IB^-7iT'FjlNjTjS S S S SMSMSMSZMj3fTvSMu0aTNS6PNk;M,B9M,jjjjjjUl`JS>-?4w?}&lWV2fyX,fWǁiVSZMj3fTvS:Lu0iTNR]T#n%Iu=rR]T#n)7000444jTVSmLj7nTS:Lu4Izĭ;GRNR]TTTTTTTi]ۃGܮi?~o9{sfڣzf8Z>(?)OM5L5L5L5L5M5M5Mj5㼾㗑8<,oOʏzʫ㼞TNS:IuSN^Ty=夺)'u^OVSZMj3fTvS:Lu0aTNR]:|'u^O9z zM5L5L5L5M5M5MvwE|/N7NoX~=ɸ{j|-O;e<,oOTTTTTTVS=t]'姃 y|P~:躐Aׅ<,7aTNRTc#H5vRTc'I5 F!(ZMj5fTvSM0aTNS6PNk夺6PNkÁT׆M5L5L5L5L5M5Mu~W!N\ǩO?~NI뵂sk?R9T׵P']u!A5Y&YVdYɲe#F,;Yvd9r I,X;ubҖZ,=P\whKMAAAAIII,+YVldȲe#N,;Yd9r$IS,}R ],=R[j\_KMAAAII,:E/,gO"uom/xY-H<-H<,oOTTTVS=I/~s%?J(˛j86<-7iTNR]W.SNewR]W.SNeIu]LVSZMj3fTvS:Lu0aTNR]W.SNewR]W.SNe +)7000444u{WwsKn.=*Ч_~{t)Aѥ]r{t)ayTNe'ղj)Z baaaaiiiTC7p+y,˛^,nyZnTNSvHvPNkA9aZMj5jT6SM0aTNS:Iu ;('5|'5제TװCBkAGU֯k}k+\M;(nyZ%_f9i夺R]M5L5L5L5L5M5M5Mj5zy|F+y,˛^,nyZnTNSvHvPNkA9iZMj5jT6SM0aTNS:IuM;('5|'5T״CBkAޖ}?XJWֈm64_H'w/u?Y>%_(rR]$/VQNkUaaaiiiTE/ӡ腼Z>(?^NPB0iT'Fjl;NjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR]('յrR]('յOBkUzLQ쫇՗'o? lvN[wʏC4f˫ZMj}qօ8D<-Y>)jNS:I56R]k)'յPTתCIu-;T׺CTTTTTTTVSLj3fTvS:Lu4iT'=ڄ(Nk"夺!RNk"ZGyFrٕ W6K^ӯ?z~۟ yX, Wkz۟yjjjjjjj5jT6SmLj7nTS:Mu$ N ' M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuIy|' y! jjjjjjUQ,9O>O߾w_w}?7; <^c;^ۃ?-O;]f|+yT6SmMj7nTS:Mujlz{oWrR Nv%'{]TTTTTTTVSLj3fTvS:Lu4iT'ەToB]Iޮz{oWrS S S SMSMS]guwUG[峺o7o>ݷ>_<>Y-)O;fyX,R=^rS S S SMSMSMSMSZMx|˅햧Y7'X^-7iT'夺fPNk y!5TTTTTTTTVSLj3fTvS:Lu4iT'Fjn;NjRBYH5Ⱦˏo3f/' YtrY7˧kAi9oFVSZv6{O[Z>(iy|l:Lu4Ik夺vIF9oR](70004444jT6SmLj7nTS:Mu$յrR]('յrR]$/vQnaaaaiiI]~|}0iv4㻧oӻh)F)nyZ)?(˛jVSZMj3fTvS:Lu0iT'?h9K('ui夺. 4rS S S S SMSMSMSZMj3fTvSMu0aTNS. Tץ鷺. Tץ4rS S S SMSMS]UQoOo>~D}yo5w̛NqMyX,gޔWaaaiiiiTg[e%̛S~yS7'Ǚ7rS:Mu:Tי7夺μ)'u-y!uMVSZMj3fTvS:Lu0iTNR]gޔ:|'uM93oIuySnaaaiiaggmnӇof]Kܖxا_mt]Y>)_K%uIt0000444jToK׏"2䷥됇Im:Am:iNS:MuuIy|'됓uIy:ZMj5jT6SM0aTNS:Iy:tzuIyuM5L5L5L5M5M5My`P.?~_}4n;~k?RqPWk_Iuz-:&$J,+Y6ldȲe'N,Yd9rbZ,׻P\=KMAAAAIII,+YVldȲe#N,;Yd9r$IS,;Rz],׻RzoYj\,KMAAAII5T׻}OO߽7򽸻kGZ>(iy<,o} 97r^HTTTTTTTTVS=o<,oOO_ȫTNS:IT9IT_ITTTTTTTVSZMj3fTvS:Lu0iT'7}/;7}/T_M5L5L5L5M5M5M>"#{oO|!8~zB ]r{1ay|R~{1rR-TK!RL5L5L5L5L5M5M5Mj5У5}^C$˛#ɫ#rS:Mu$5_T|AT|rR]Iu(7000444jTVSmLj7nTS:Lu4Ik@9;夺 R]M5L5L5L5M5M5Mu|_᫿||Z~|FU_O}o?B=w;۟?k;?z?zw|M||y/__Z_۫bv~o ֞7gyoߞ,~c/v] endstream endobj 2001 0 obj 14441 endobj 2002 0 obj [ 1839 0 R 1840 0 R 1842 0 R 1843 0 R 1845 0 R 1846 0 R 1848 0 R 1849 0 R 1851 0 R 1852 0 R 1854 0 R 1855 0 R 1857 0 R 1858 0 R 1860 0 R 1861 0 R 1863 0 R 1864 0 R 1866 0 R 1867 0 R 1869 0 R 1870 0 R 1872 0 R 1873 0 R 1875 0 R 1876 0 R 1878 0 R 1879 0 R 1881 0 R 1882 0 R 1884 0 R 1885 0 R 1887 0 R 1888 0 R 1890 0 R 1891 0 R 1893 0 R 1894 0 R 1896 0 R 1897 0 R 1899 0 R 1900 0 R 1902 0 R 1903 0 R 1905 0 R 1906 0 R 1908 0 R 1909 0 R 1911 0 R 1912 0 R 1914 0 R 1915 0 R 1917 0 R 1918 0 R 1920 0 R 1921 0 R 1923 0 R 1924 0 R 1926 0 R 1927 0 R 1929 0 R 1930 0 R 1932 0 R 1933 0 R 1935 0 R 1936 0 R 1938 0 R 1939 0 R 1941 0 R 1942 0 R 1944 0 R 1945 0 R 1947 0 R 1948 0 R 1950 0 R 1951 0 R 1953 0 R 1954 0 R 1956 0 R 1957 0 R 1959 0 R 1960 0 R 1962 0 R 1963 0 R 1965 0 R 1966 0 R 1968 0 R 1969 0 R 1971 0 R 1972 0 R 1974 0 R 1975 0 R 1977 0 R 1978 0 R 1980 0 R 1981 0 R 1983 0 R 1984 0 R 1986 0 R 1987 0 R 1989 0 R 1990 0 R 1992 0 R 1993 0 R 1995 0 R 1996 0 R 1998 0 R 1999 0 R ] endobj 2003 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2002 0 R /Contents 2000 0 R >> endobj 2004 0 obj << /Length 2005 0 R /Filter /FlateDecode >> stream xUr0{lQW c3m=tii&C18+ pltri<֫G B27cQ  Qiea?h ͌>~~l!_V)OF`z⍳$*7y:>z@Z.])eA@8bnWj)ѶV;8“r^j6?+ikG[@<Á!S%"ΘmU>zWTۘJ-IMT[&vpa#R6ҁO%h'~2&`WZ\RVЬ[gI*~Am#om?E /KYВLS6(ߩSW?u/tX/Ug)qK`ZE0, +߮ |> _"h|#Q|mhʸ̟haĚ**MV,a}GnLдAX4#q̓uCW\iKi|acCKuKi& " N1ν' j܁q endstream endobj 2005 0 obj 564 endobj 2006 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2004 0 R >> endobj 2007 0 obj << /Length 2008 0 R /Filter /FlateDecode >> stream xVr +.LM!!sE'OH3"c[,9 mɲ&&ν. w.(nx"Q !9aMw>޴ 79ڡGp46'*mfqSxZ LD 0^7eKȊ({r lCB_lk}uzP@[֝(FCV@1ƬtyNOMUUL:WUQ7VEY"JBӓAm$% bM.yZҩ2 )LZ5ABwb&.&y1{śE2POC'B4iH2cH!bM2VK0ĝfYH!+rYeY8{swX@,z~+mQ|6}<=+O6ְɬYf0y;Wb6(b5J?OC.n /Xvh܉Wh}P&:CM(,> endobj 2010 0 obj << /Length 2011 0 R /Filter /FlateDecode >> stream xUn0+b =u#4(dvFK8hd)Z2LohxP@sE*Q1 u=0- vghw5O[[['ڠ7wiuKg3J_Un{}EvrE\.R >L 7_ttAz{ gC0Sʪ45M0iͰdp`HSVi@hL^d[}~^iG> endobj 2013 0 obj << /Length 2014 0 R /Filter /FlateDecode >> stream xVn0+rD1Ǧ CF{HBX;De2Ly7HGq!̻b C4> 1ܢH?` ;vI?!ҟl᧗{>{7]c<M{W#!Ui#p_y>@ 6Org}2~UۇI;X%eX}>r^YW_7 t5l!p`W[%!wƔUR^k]YS<0QNb@!Gp^NbL>t4I./f*k^ct ~EfeV=TΔ-_Xʈ-hKԔq? M#Sj?6G˽&͡VC^g@%1IQ\[e ѩέ6Ztͼ}H:J&MvB7re6L,9 qVSR)𨨢ܦ*i&Iwx89JU p/QJu..%i:aV8nG4TMA!dC11nJ|rcF'jY:|UtJ8wSdzQDt=x'e^#'Ȧz;HpYXS5c[ê; `y|ts®/} endstream endobj 2014 0 obj 676 endobj 2015 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2013 0 R >> endobj 2016 0 obj << /Length 2017 0 R /Filter /FlateDecode >> stream xUK0+0cjզv$;ɶcyA3|1+-RqH oH"' JV2{&Cs#T?O`d?wݼWmם`**a*m?eUvT5P򉒑R!ZpcyħE{D2_0%BC2)x0 o1ZB5izs0mXBq =ˇ&)󪄼dݰ Zi~E=V#dB},r 3Sr f>*:v( p HUX;6?w\IJ[I*yL =.r6> endobj 2019 0 obj << /Length 2020 0 R /Filter /FlateDecode >> stream xVn0+rD1m 1CDBŔd_R C0g7G+pA!Cۇu4\ph, '{ܮ5ۛ g^8Yuxc-B҆ak_Y>9@06e9BxxQa>V1ܽ&S~EV~=ZWjeJYy/G} > endobj 2022 0 obj << /Length 2023 0 R /Filter /FlateDecode >> stream xUM0+[j=lWKq !ax?ƛR1Ȋ`s(Hc7v+Ρsp& W2x>@ų\ TBL8S )7my%$$_IoWY_#sIKH6 tuuꐛ*Y^__Ҭ3R2btkX a#R82r$oNk^[]¢2`WJV *{vۻ `[?#DQ䍑SYj %R[ҸSq"/1~nӉR!IRTZݟ2-}Wk3g }\4R#ƮNٲmq T Ȫ2K p(ztg~1i1p'/t#,w`z}[ߞ|ASԱ':F.>C:k/Cz E .C]?P endstream endobj 2023 0 obj 550 endobj 2024 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2022 0 R >> endobj 2025 0 obj << /Length 2026 0 R /Filter /FlateDecode >> stream xVKo0+J;~`TzX4awQwI1,ɲh7aucDkac`H}hܠw?A7cUvlL>,ᇗz_[ޓ݇gqN bCXxf/>p|'̗Z0) zΊIYqf߼ϳl%,ۋ:A8,!SH վB4Ր"]|zZ>E)bEH*.tV(9?[4% VP=??0]epyʸxJj 2U+ȳZyK:1D@ZHډd?iIB$V1kkиS\HP%?1Rq+tX. CU0ysRijmpO`5=qu$fL5؇l4!AٹSʢlGҽQ)."ɫ$KZZ$69}4>{- lj=p?AQX!ɵ)5$.b˨ ;W)PGvN‰V6)ٵfTo|`OA8l = >J2 endstream endobj 2026 0 obj 640 endobj 2027 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2025 0 R >> endobj 2028 0 obj << /Length 2029 0 R /Filter /FlateDecode >> stream xUMs0W=DՇmY9vC'$LzH3c  J `w4<ݷOw溲 ٶN| .~_acS>@YO's0|u ܃ӄwά')mVǹ|b-c" @ 0OYs;V0 -0|T}cj}uʺwysT7촅x a@1⦯2[Ƙ*׺T!3ō;#Q0&80{:L C{V@b e7 $2+;JS*y1}zhwY^DwT1Rp> xSy e&}!I:K\MW$]˳GD\KvG%XHɭt9-V,TBVORAu*P!H/^!Z$ŴVaƱZ~-<I9ғrcS,=ɳK\*$TaD7TxMMZ3"WH.=w,L崎RȨ8aqx{.x a} ?LP{=18Qp2Wv^%1@8 endstream endobj 2029 0 obj 612 endobj 2030 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2028 0 R >> endobj 2031 0 obj << /Length 2032 0 R /Filter /FlateDecode >> stream xVMs0+4@(6t҃'0!΁bfbȸ]{jb<^xv/Ǖ搬&@qq0IE~cY}xNcۓ2w St[7nB?Tm| M|!֡!\h#Sn9kk'~xߢnqU_EYyW@c *SGD[5T4¬.56ɳ$8'$!HN82l?)v@&UHI1\r=tZͳw16sϖ8+L. }S&avYJoоW8Ɵ&Umd Sv #@>CS :5)hig KS`!(a]Nqg3 _ɩEE-1qoi8X-u_ҁ=톢~(aG/!B׎wVXf endstream endobj 2032 0 obj 656 endobj 2033 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2031 0 R >> endobj 2034 0 obj << /Length 2035 0 R /Filter /FlateDecode >> stream xTMs0+V!I;C0!J`b#ȸ۴&ƃ~<=5*xb#Qf3vk aϠ]8@-Iz NiS_b} ܩ#)CV@b+̺f25[Uj¤5+MVF'1Hb"w5v|D:<4#RC#@r*s[@jW륩M׉Pa(0 z*:>!LUEqK~,;'${#E|fv]\*!OY|pSt*- .pxHM}ĸu OPgyyA&3.(׶ͯ]bIa$3>cj 6Yfao8>P׷(!nGGC9?pdqo\ שׁ? endstream endobj 2035 0 obj 528 endobj 2036 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2034 0 R >> endobj 2037 0 obj << /Length 2038 0 R /Filter /FlateDecode >> stream xVMs0W=՗-;4Ӥig2$t\,cL}%@@pj 6޾'0 >?C '@B' (4^T@_ O/xChY\zw*xO^z7F"M`}L`|SZeqGD>%~HVpZO|$i݈=$_OɖZS{Qv!@7]p] \eԣ\c S8=mg/LE_e0LJ85 3E7(DOKQB t ZRF T%:paueU7y3Bcq5h]&40V~ w.Bv{y$0 2K7dWGqm5 7|D\V+ȤzҙEMzy6Fq)LȣIi젹l~seQiW􋪧;! ~vpih9,]ųm6~7idZF6FhBٽl&> endobj 2040 0 obj << /Length 2041 0 R /Filter /FlateDecode >> stream x͖r0~$=;H!ͽ@rᾉ!0-E v'ޱn=ؚh^Q]ߠuv.7)>| Qo_J+ ~89\b q1~ws`e{׸l+I#} ƸND]VohTRfSs}zZR17˶2Gs™a#8bd.s9y<<~TgM#!$K,l> endobj 2043 0 obj << /Length 2044 0 R /Filter /FlateDecode >> stream xVKs0+fN{$ 6S+ oW,wH!-c 9bA'<@e~A-xBsگ-DJg \O.W!} QO E+""rqouP_y8X]1>V0ʲlk\6'I@-$pNľWo*J٘Vvk5e+|N82Lf fvdQ$Gf~r.ptgPhk*6k]>zHJ0tzcYmln{:򉒑R!Zdsħ5=Yo3f$ar4,23Y,FqރVS4dyRU _.FMC Tiq֤=*6`/"_?λCQx~zr(un4>E0j9B`G6#ipXk1 3 hcV|IUnN[*{ ׆{`V4"L+jUeO{ǀTფ#Xlu*OW:gL|;]tf8tJXCv? ь}`)0J G/xb endstream endobj 2044 0 obj 674 endobj 2045 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2043 0 R >> endobj 2046 0 obj << /Length 2047 0 R /Filter /FlateDecode >> stream xUMs0+$@(vN{c99`[p,2 `[`,YOowX=y+7(-`yO A aAg" fa;{nƶ۱}{_BpZ̛w{nꥴR@Z(I% Ĕbk5{7q'[;vZWIV(VhڵSu$d|B4UQ6틹.;fM캮̙ .9eq5"bA1 9FɸmLD!3&k,]""2%aVUBc^lj[>V֡j01M.$Q??9IPX *MȅPuoU$y#eBkI-T$C+\,G5d Lv^ _4˱M!j`C7ep=lŦW{khz۩w>4Aѵ=ǰ zsQ‘EӆNWJz endstream endobj 2047 0 obj 556 endobj 2048 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2046 0 R >> endobj 2049 0 obj << /Length 2050 0 R /Filter /FlateDecode >> stream xTn@uT/дH92YcT=)6 W˫H_Sqdt0 X8,ſџxlOa >V#(/9!@ӣ@]ņ >%!pd"4,3)$fWտtls.9Vrβ.h6t Ց i QMAD i s dmu tFfLp)q+Йٓy3?DŽh3ֹtia J;$ }"YE^ ݙ=ƭ@5gr7Dܑ.&=  Q3=}ڽg{+͢:\S2-Bb@fE2ew#ng c-Nύu@b5P`YS=PeٶmAE3.2۪lfyL ]"j|C[ *#{E?K1xd]0,>2ċCU_DZ endstream endobj 2050 0 obj 543 endobj 2051 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2049 0 R >> endobj 2052 0 obj << /Length 2053 0 R /Filter /FlateDecode >> stream xVR0}W#̀mYQ2{`:bJvg"g{hǀuh8Sᄉ1DibA'<@s f0t56&(zW7h=׸[/Qޛ0 IZH |T@DW!ޙ.+n!Nfo l, φ+-ָVGDb]=WJ4*Jhˡ>:AU2+g8[$#9LP0q2)1e5 ]8IVLU))~H#H&) H&cQΪUR>Q2R*Q*+,d$_uT|I\?|z2 O4X$5,'Y:MgeQ2%j&E6[IGnnAOU=w끾texT*H`@saa\ΧIXdzMiVg<,ذwCL#n:>}79s]@*=F3M>8g$=[<ˉ$hD0O|ՠOʢ*<64> endobj 2055 0 obj << /Length 2056 0 R /Filter /FlateDecode >> stream xTr0{LQW+$!3n9FȸJ1Ĵ& }osy M8(Cgѧ8B8X+4Z1LAlm*!i!]fG Ni_+K-ZpB\_vmUԈ(vƔi&&/s-V*Go8-SĈ D+}_knXȏ(#2y~ɜʇpdd1?g endstream endobj 2056 0 obj 529 endobj 2057 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2055 0 R >> endobj 2058 0 obj << /Length 2059 0 R /Filter /FlateDecode >> stream xVKS@+UO<`NZ'\TA@W!\ɥ.7yf3Au_EYǷ$U][upJ$վBUQQJE#̪:Y$5qe:n9" gR {Ȱ8 i9~6 "@X~^kSo_.4ڤuđoő5KLjZ:rR>jQ!hĥ︢v;Z`*-9̕%vK20V$X>8:u* )"[7*M4Jb,쿿+G9mW`b#F؍&FCaKXKM1[Wc/[e5]D33R3?dF`rq tߟ3neR !fmaOQ@5Fy4ZQ>h/Dž0a︪v-Jwtj %. ܎<:8> endobj 2061 0 obj << /Length 2062 0 R /Filter /FlateDecode >> stream xVMs0+ |GidBC9fj#I`㞚%/zVO+ (![OkAD&F$![4h~ļۧ5Mg2%Gkx\o*6 $x9F!v MB!q1\dgM\EIt>[pV0f{P6H@)VyUhԔRfi3% UeiXSljt@i3A)t-E! W'Tbs1t1%t&2t5l# > endobj 2064 0 obj << /Length 2065 0 R /Filter /FlateDecode >> stream xVr0w.BJ]d mi(6IӯȐvx,|9:Σ@:T w(H 0ܢȦm=ndӶ!YO|.0b<nBȫF`}w'P.\J(L87~(X@^Af){e=o5w~o!/W®»Ĭrʯ>763+"gBq#ph[vG 2_!@L$. $ {nYA.$0E2@Ձ (+)S⤌0|"xܮ ]N*Flh@fUVBQrcdu5װ>:}XT:+:+Ut0ugӼ$i61$E EIJ/5XP/цƘpU?:u>]Z܏Q2昇i!cr~3-āt,Tװ6AcNp0ԕ^뢶;gLdhY5.f\p%WrDcYƴ /QXάݢ`!˝mzwFnϠ@C|#݉P,91.B([ Ϊlx endstream endobj 2065 0 obj 674 endobj 2066 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2064 0 R >> endobj 2067 0 obj << /Length 2068 0 R /Filter /FlateDecode >> stream xVv0LQ+="'9"<r\3lqWM%ݙ+Oׅ0M }|`.hvŢ^;۱1d?̡Ź@kvVNn sn{DFa|wW0 cZ'\TA@W!LZU^NQQis7s[mͯYkWZ@͎ND]fJ4*J$(󉾼\)9f8e5 :f7 731DYu{$\X~q.mU{L?5D7y; YwKO7f9&#?SRg4\/ 8ڠ[M5/<~SDfQ:Nd 1Y*fx\pPo "/xƞwч#ʁNG`l]8~r ??ǣ#a!8q9Uny2w:2ζ5y.M{gn諃zdH a{/3󏾾rVP| endstream endobj 2068 0 obj 698 endobj 2069 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2067 0 R >> endobj 2070 0 obj << /Length 2071 0 R /Filter /FlateDecode >> stream xVr0w.BN.,m&$u>?馉X9:ˣG BRdc# (0DGԷ~/cQݽ۱d?Ż}X{t-uW y| .L"q)eCC!͵2|HDR+o`WQCW@C *ϐUؠ&1˲UDZIguf䗇)aL*NoQ,(]UZ* oUB VDi _?@fLKan4tsv!0 CnbSB,H hX$!Y/VjKi ºeQE1ˍ.VD>8c ;QN?NXڂ%wm\ɼ‘m9h@M|Ůun 7?4^91[ƒ7拓(/Uw<Zv endstream endobj 2071 0 obj 669 endobj 2072 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2070 0 R >> endobj 2073 0 obj << /Length 2074 0 R /Filter /FlateDecode >> stream xTMs0+ $؏tL=!ۊaj>rwfzjb](i!&pںmY̊IX/x[+Mz_@T )Q R0U]fY˼YںM]tYjp&(e(ЅٓY0)vjLpնmj ֐8gʁ+ |r4B̫uvPxUl$"<edMO5'1HgUJ͸ r"E6Yo>3=Nͤ"+B-س'O17,`P[\jyBNQ"ɧk8bĘ˳|.3kM_"}( g)3sΉhwU|*Z+[' ~N\~@o-b]Ͻ\1Ftt=U_Nmà endstream endobj 2074 0 obj 550 endobj 2075 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2073 0 R >> endobj 2076 0 obj << /Length 2077 0 R /Filter /FlateDecode >> stream xT=O0+n|9 @UPuiXq*=@J^|.h̆(mɮDp S!Q5pXJjD+ ttC̏Ei8uV;y͌3|>QE;ưw_[#&_ăs g endstream endobj 2077 0 obj 340 endobj 2078 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2076 0 R >> endobj 2079 0 obj << /Length 2080 0 R /Filter /FlateDecode >> stream xTMO0W#>ۉ?z[$v{"uKD$yGm y\\郯!+_B]d;'UB~}͖Mn$} o3ލi3 $rCz-5:2Hu7ŴC1兯wUؔSz4䲅Dr)M|SDi+Hi #\)ys ݆٬UU]桄 HwV):m✡h5ѿ1!/j_BC^vʹ ki7c} v_'g"E ;WxBbW endstream endobj 2080 0 obj 474 endobj 2081 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2079 0 R >> endobj 2082 0 obj << /Length 2083 0 R /Filter /FlateDecode >> stream xTMO1Wc{V+;l6k{ e3 Y0_1P܇X)p=øI_q{" |'W7x Hn$"!,yE|+!Tgi C5CD&h*jW'~h;fNoA. ?N_*|ãh2t>*;ep*x:a ,b]dR;.]64&SDP:lLЧ%`RQ&#)_\gREHvug[Xfh[g$ Q]dRHLT_כz3EJj6FrikDI$駧3b`kܮvNRƨ`z,bk%;݃2Φeo4(=?MTjBGPt endstream endobj 2083 0 obj 466 endobj 2084 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2082 0 R >> endobj 2085 0 obj << /Length 2086 0 R /Filter /FlateDecode >> stream xTMO0 W$N$n J1Q@{~ Z6iib9/L}$RbeD&n!/e3vka,cG5&]x&"W4bB46p<(+%!J*=DUW;.YT gNj~u7~ckpܒC[-R(u6<K~>Mu*˪hڦqR(% 4y63@=ϭv` 5` "Y,߁?!q.d z_qgT^z ȍ1mm2)PE;:gdk(͸t{P/szNI(d6IX҆1BJ;n9KkZ]w-(zFicU^mO!}#x>D {2rqϪu/| endstream endobj 2086 0 obj 471 endobj 2087 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2085 0 R >> endobj 2088 0 obj << /Length 2089 0 R /Filter /FlateDecode >> stream xTMo0 WFI>r[nA E:XNmgC((aI"Hp ^A[AӂZP!+#&b;+Wwl݇saDGސ{D_ҹ o|D>7kr?bʁ&e&IA&e54Yn묙'E*d[~m4kg~\>2 `kPܪ(EY\䥛ja,nWt H0%ʌѼN~N: W1(N-cA8&Zٶ*2-7@5,ݲb1A[/_Veͮ{nӲz[G99qGc:.(>[jeY}ir[`jsì6*azk)1lP}J<,wZ52:CJsLdƢ?bq8g`2 1G;\87nOQc VnI82&9jRɋ U?V endstream endobj 2089 0 obj 511 endobj 2090 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2088 0 R >> endobj 2091 0 obj << /Length 2092 0 R /Filter /FlateDecode >> stream xTQO0~ﯸGH^ۭ]yDM|#.AAH {6dM}}oL=pKVcې5ː* 7 z{XAL^ ݍ }"<VkoبC7;e!~6<(+i%!^]&&%ēU1"nUgƃeH<-5ZHբ,ʼhKHg*& I?Db}'EǴ)O9QdL Z;L4[ {5ZF5AvDV{pѼ;%B OzI%m8=BuXk[>o{ }!KոE`F5bXN͸> endobj 2094 0 obj << /Length 2095 0 R /Filter /FlateDecode >> stream xTMo0 WFId[݂ء)u`c([v|v`*$D @z/1VBV 0B" ".c( z]r!9pɮo'A F'2p%$\ϮW@y3N*UB~Jnˮo$ g9mӁ2 $rC=Rr5ZHQZ5-5sn*ڢ DKHg*<00ӍIN'q06]X\ʬ܅n]aŭ۬RM[ 1+*'3i.͔WZ&N Z0-r_o!Ԟ[$jz9Rz+b(mJB> endobj 2097 0 obj << /Length 2098 0 R /Filter /FlateDecode >> stream xTMO0 W$Nc7D%01˜`h;'m`mդb @`6#A.$R "2%v }aK\}XCN } "@͝iitm*ӯID2ywNBm&ٓ(U P bh2awfdvn&s)wfj?P endstream endobj 2098 0 obj 465 endobj 2099 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2097 0 R >> endobj 2100 0 obj << /Length 2101 0 R /Filter /FlateDecode >> stream xTn0+ $%>|K6@oF0r$EKJr"?[Q g9 @jq0N¢dO=&HPz \ȸ X8 !g}Z;(s3"妴9y= endstream endobj 2101 0 obj 475 endobj 2102 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2100 0 R >> endobj 2103 0 obj << /Length 2104 0 R /Filter /FlateDecode >> stream xVMs0W=D՗-+~3i4f2);i6&X 85 2k}O#37(a;A$&'$1[ hp=y{[(|z~G 2 /*6 mQȦ[i&)2 %k-e9ejeeא}>d; _X&_E햏j28% k:BFD'rUyhCr[ެL~۪O$' 3 GdAq6ɹTU>3hssN0D1ߛfpjU@EEI8gXemirY =%*:,˸ r|"E{>0=- 3OR؀aA8Ô+M-`ef]Nyڃ}`'u4O󅝯>glѧxa}@9VЬ0g<> endobj 2106 0 obj << /Length 2107 0 R /Filter /FlateDecode >> stream xVn@}+1`HQ^RUXCETu\M 3sfه].@qѮ0IxE ŝO{c^vD{ ;hu}SQGt+$fR&Dp~F >,_Q:ѷh'S_y.vGƍ28% {:BFD+ʲ,驭!IVܖ&T2oD's * = W,R$rqp)Ɯ>@fEdf4dt?#Jcе˦!> endobj 2109 0 obj << /Length 2110 0 R /Filter /FlateDecode >> stream xVMs0W=D՗-+~3iL^+S_I%IxUSV\8dZRnXh5D̸ r|"EG>{4-/T$IQDE@Y>u_/0 Pxä8pU>PSiHR:|~('P[9s;[ AߗeU"X4>{θ[iW-BpT0W¨V#=HSK&hJO|(ZHN5.o*<:$6zhxi-A4&,Vܴvi:qk(l1%y^Y1!>JewW,d L&fnwXҁookީ9|R°wNBу'V_{T endstream endobj 2110 0 obj 700 endobj 2111 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2109 0 R >> endobj 2112 0 obj << /Length 2113 0 R /Filter /FlateDecode >> stream xVn@}+1`HQ^RU!" :_Y.v 6Sc8sf31x("61?& \h{A uo̪_Zh{sW^Q]ߠuv] .:w9>(DRQJPqp}t'L Q<-T02(W*QqNšzШQ ш(;szj+mHOEZRrYdJtAr™@1\Ak)F[P5\uY2[4 XO X1Dw3GEr]gNF2ȫ( ɫ[e¦v/= %*:uC ")'RԾ~dzY#yIEPj*dO޵g|*(<:a@w2HiH+!ud'B\9td~y' jrw^& ~=Ul0Is=LO0:bp+c? |t<-Ep@=Z4P݊)WC"s(M)Klcc=nU;:SxNt.}WA 5+-%jlW (70 r{IHv<56)E|pPEGkYXq0dk fS!=VsacL;wO^"C^`̒M͖d=}If~cXۭ6_m.D pk(ۻ-|cU endstream endobj 2113 0 obj 780 endobj 2114 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2112 0 R >> endobj 2115 0 obj << /Length 2116 0 R /Filter /FlateDecode >> stream xUMs0+ rltN=aCFm}W|8lSA۷y (^nQCv 0IE nq Ț_>~mMO/(|n >Zw=[*6 kc}QVJMBF)eBAH!M<>9d*g.ʦn8ig1,( (eUܛKhC搸!HN8/q =a1Hʦ1@ m0UCCG+\n' endstream endobj 2116 0 obj 635 endobj 2117 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2115 0 R >> endobj 2118 0 obj << /Length 2119 0 R /Filter /FlateDecode >> stream xTn0+’KJ$s#z(FhqBBle.Eɉ)eHpWNEXE(ɪhmC"@()Ň_̻?afpT ;u2)8<$U C>}VYf\H Iᇐ/.] d]{~Kթ:uu); 53ڶ23Mz} $EY6/wy;mX1ckM: $@aT2iW4gw )YM`F|,˲M򷪗*f6CI>[d#Q29&5%-fQQTM^CĀz 3&dxlZ=e)ە4nE]B%{xtM B4̐-ES.۲>]$#=~y$S Ѯ؜TǟPFx?e^aͷ+,ׁ"83[S\jytv~- endstream endobj 2119 0 obj 545 endobj 2120 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2118 0 R >> endobj 2121 0 obj << /Length 2122 0 R /Filter /FlateDecode >> stream xUKs0+4^ \6S7LzsD`miNMiqP|.4hlAx"z$.km^PT{ڮ%rRW(wSkΤ}WQX8 B0Q+5 >\`gYdJua9_L,I_岪_E38% kjTU(HhHY\^7$MXc 9L IP[p b< r!]yqߞ{/_Ey6_6E\P}$G-VkбƼ2.p&Ϧs.^T Ͽ`qsܥ{x<2dƧf=pn6Miq-<&>2EYSU ^U0z*N1A15plj \T7E=IК-Z][)}"9x[Pw'f%p#>v+Qm JHFyhYoUY"N8]X;mmO!뼮# їf1`oi,QiƬ/.4. endstream endobj 2122 0 obj 644 endobj 2123 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2121 0 R >> endobj 2124 0 obj << /Length 2125 0 R /Filter /FlateDecode >> stream xV]O0}ϯ I#U`xBp!"Mnǎ@4hܓǀ6ׁqA!_]b ! ;o&`oe;w]_" ߃k5.]<NGB҆.O" @ !A .rdiԲٿGpnT`Zʶoys6f688ÀbMOt &(A3eyx[oPdHdRh QŒϦK4Iđ0ْR>>9pdz85}VO#W8Fq[Wx*^BP"!b8v9 K;+Wr6Srr'4K:˝Om_ XR?g,Ff~ JAF*[B94}S/Qy(ʵu u7KY4ʡWy.3OP:~:t \ZO& j߯+7Tʯi8VV׷yf3~j>%h+&w 7kXil'"^ƒT,;sypbV)O(Q]5_[G(XuFP3ꤽIPQbV{AԹ*#E,"tBI Y:U^tʺmlسwu(.p}wrx?1;ByƣǛwv^Oۇ endstream endobj 2125 0 obj 712 endobj 2126 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2124 0 R >> endobj 2127 0 obj << /Length 2128 0 R /Filter /FlateDecode >> stream xVMs0+ʱLgi= vdGSDҺ+8FS1x}S0D?hjGkN &)^}sիZ(rm_e1i`](u+h5{xbJIah(!ӃNϬ> endobj 2130 0 obj << /Length 2131 0 R /Filter /FlateDecode >> stream xVn@}+1^e#EzI>T8^;68,N~}g1?513g̰ǙH!]x ] B`>.h{>y{]n= _[NoqGU/b0>xW$bR&$DDpeܜ NFW; XWu|5e7s>6n)SW% $ZQeqM )u2*]]*F}:Gs™@1#\AkぅC_ce ]T|e"b mL2PTgOzOY]6@Mкák&ΉZri,):ɶy49ȏj*()hzXF?_4~&#(A+%rVEZ`?ZUJ\+|spjA%9=$yx7?kٲe9{$,F+^f6G; (gl' 4Kl=,x`jR \^`md3:FkZݴm^/ûEi!hg(<;|eU endstream endobj 2131 0 obj 770 endobj 2132 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2130 0 R >> endobj 2133 0 obj << /Length 2134 0 R /Filter /FlateDecode >> stream xVMo@+/vJZ5 jiTa{mĭ3 ؎`7o>`@q;m8}c9ub& 1\v_~zL:DsdF'OPoV!EFa7W!0 t/4$bR&4DDp?%ܾǿm qr|}C|Щ`uz]WQVդ2}t)#SSOK5 $QVE>҆6ki3b}x`B#Jn6@ tf3H`iKfiۺMn9FPG::h\xxmԒOSS,_rfFţ=cK!R)ߓŃq"cIMT$ 4Mb{s?Ze>Pa홇iȒ@ )AeaNZ \'H;f>T3E^$37H4Rp]HPmS sz(6 s6Ū0uAaŸ.JBp"95~jՠxnwlb3%g÷k{E*<BBCxAwYe~b3UyTRi^ '(^yکX 0}EzM|~mw^&'! w$t̪ endstream endobj 2134 0 obj 699 endobj 2135 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2133 0 R >> endobj 2136 0 obj << /Length 2137 0 R /Filter /FlateDecode >> stream xVn@}Wc#5۽zJRFAC*,*6iw`xj}̜f!`@:u6Eh"51+47(-hpRƼ~oڭv?: _[NЮwиWe/b0 >w t+4$bR&4DDp>F ys'lxYF_ϣL,:_M-]7h("gge )l, ƃubφ1mKGPC5lwo׃m6Nݯj<it#( ,;LCM]j+mfpl9>[xOt"=+ D[heTC _(I$[U ~9=$dx7?2)e|pPM؛liaKq0'14 ,0F2\BzLWY͹=lt`ҷ3h{lr?jaD;B  endstream endobj 2137 0 obj 768 endobj 2138 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2136 0 R >> endobj 2139 0 obj << /Length 2140 0 R /Filter /FlateDecode >> stream xVo0~篸VZ=JդMۤIVM(qҘvڧ!ۀ JsV1PD50& ܠh; ~B݌e=3mDۇ\E@kpu)C4˵}SQd($fR&Dp~\]oSA!|N: X5e]7s-Uw(TF /zSޘS[kC6&3i'o *^%v@&B!x¹Owcm:7)Pm].D腮(ȅ|=lrmsBh$ZZG> endobj 2142 0 obj << /Length 2143 0 R /Filter /FlateDecode >> stream xVMs0+ rG:әv L31ĭBŽ>51 /}O ;(![@qѾ0Ixf݀; jߘo?L (| nz~] {NsS9 )\]fc[=%%QY%/MY-@Zb#;hDROp.GeE!-DZai8&mib e'tt8I[9IE1ߌ@_WUSe b2]+<|ATShfE aAY@yN᠒'(nY(%L6͉_K?CvbR= ûl̟f TBdf`fE`(jAMeSThqHXiWԐDlˋcºH[Ѿf5ⶻRLwl<1c>`XfBIG5oYݑEF&9~R°A"fG>Ϭ} endstream endobj 2143 0 obj 691 endobj 2144 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2142 0 R >> endobj 2145 0 obj << /Length 2146 0 R /Filter /FlateDecode >> stream xV]O0}ϯ I#I`ҤMcTぢ)DkݯuPӧASM=ǧ׾ P lܵ1C,Gv( QƬyoڍ.DpFo0Yj0 ޏ0 Ƀ" 2!!!+0y5҅F[355o8~%ism7HcuUAVEU^chC*fc S*'r™@q>&ig$Lإji̹?ˤ*UN5\뼘֡󕾁WZ7)aJO#IIV#g] CDD'θ !$.trP8 G2Tb2"5df,g`|ڼA _Oz'< @߫.r +X^"k? !PN 4ri'b@(Q_Y:Ӓ6}Ha♉ -EC)0g(sayZ!{Vh'? O5 wТ5!l-]v !(E$T.Ç}" IȩfՂF/ME`O8Ip7Qa?jUKAG 4]de͖5s^n'ia jgs(RN!M;ɲֱbmG!m!JCc=3r>I a$[<4Σ jD endstream endobj 2146 0 obj 770 endobj 2147 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2145 0 R >> endobj 2148 0 obj << /Length 2149 0 R /Filter /FlateDecode >> stream xV]o0}ϯ ?8TMڴMih}(}H@$lc~$o+3HaqA|`.km ܯTvC['u(|v1z8u&Dʍy:o?y('i]EF)eBB@W!hh[r|cةT0*TUo8~%3GV28%=uNT(hDك.*mHE)mp9LX8 N60{Kf.hJR!oH􊗔o#i-⢅%+((ٵq2.K9>qE%;}DBD+Ԥ ?7BFTy6.y Bo fd|[vmd?ge60LXo4aZ !-\TnDMհ69i*rt|o˨4RXN 2EQws.fcryy/[+p~r}&? hbH"h=ƴ6CBJ0O\U!KK:OV<P;yҁ6ğ4@яѦ'huK4FIy8ª] endstream endobj 2149 0 obj 656 endobj 2150 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2148 0 R >> endobj 2151 0 obj << /Length 2152 0 R /Filter /FlateDecode >> stream xVMo0 W˖>:`5CW N$;nٯ%Ic'NNk2?>"1x]EE("78& \h/~Agڮ3ZvoN EFaM7W10 d'4D3J) 4tn/[A-^A)e*a^eEB\ ƭ28% k:BAD#rU gW3 c"=@b dW.~pxsB`^lQ70y1 lϞ{$IjJeSKja$1Jp]*0D˸ r]|keE>-$ZL,/!H<=0eb:x=Aك_C!/`NejXZU0u*Y<|3mk9"(Ű}@9j"aθ[y6uä=LSKzNWLUVȴiHtvT&BO1weQ?PɩހҙE[̸ vnʗU^:&,VW:pb#;͋w=>m{1hKdCz7?O.fn[,xk;+Ytma4N wZ==r endstream endobj 2152 0 obj 693 endobj 2153 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2151 0 R >> endobj 2154 0 obj << /Length 2155 0 R /Filter /FlateDecode >> stream xVn0+ M (%z(hqP(2%GӺ_ߡ'lƧ&! #y3!7(!] m #` v'͘׳>nlL{ (|o:A{] .zWY~=QMČRʄݏhGET0JT70|me*e^Քup+RvڸQFDaM=U*4jH,֜ZbM>Y)M*F]* 9LИϳ(FpedȆƜ>@azt9:]i$QDQ$Qmbi3A$ZZGSxOl v8΀tZ/oi?WR *b8 ԟtNWw u^gc0"칝&l2moЇ++OB"cuY[SVI VX = QA2'3b1-i &$ Fˇ"̟סE(TcjA;k(bNb34яƦe¿CPEXMkϳXH@"O+Nܺp|&@'m3,1{;!n`2Al[ސR>0]ca3zhP!6ڞ3ñbpy`攃0JsýV]qZ endstream endobj 2155 0 obj 760 endobj 2156 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2154 0 R >> endobj 2157 0 obj << /Length 2158 0 R /Filter /FlateDecode >> stream xVMs0+tf´4!0HRw`dۂowyZ>b@86&辵1Dkb*& WhnPt3'flLtsr?"9B-; _Yu|5e_MjGƮ28%5:F(UycOO]]+{US}N@r™"c.A'xL*/uBjf-n1`G#ż:_s\FszwQMdaMut N7y_m_E9-U (mvQBEYܚ[sCʬ27+Iie74=Gt r! ekLq„KCecUfE΀5Pt?B"Cd4T뢹iJRQ(Qں[fvȥDX}0.H(̖fm`R(Z+TfoҾa Φd{x}rt&5٣]2v|E ,2M@>j3E^i19laJ*?1CLzQLgɝ`Z5aڼPev}`ᕱ} y1>5MlwgZA@zɓ?CW,Խ^!ŖHh.Z?Pɩ~ՂFcGw3i-*lCa.e> endobj 2163 0 obj << /Length 2164 0 R /Filter /FlateDecode >> stream xVKo@+n}RVCEY;68fX^<70}qe8V}mc8kbaLBfA_ w,˻fL9AP\^!<x*6 }; Q;i!QJP8+|s~[q.{{ST02=/+)˺U,n*#S*4HԢ7==-Jm&uf$' u'xŹڢH 9xLh"69 .p /׾|z)J(򲩺Y.b2~NhqA$xEÏd`[R2H1 ˨!2'L\4n*B!fjXχۮ uW#2*dQLr15g =T}y]bjz i/,Y@!9SLs~Q̓UN@mVn㏛0HS9gqSP|kP|gakPvsuDlx3>bI.ͳIz*llFVtc H1H,~|04i3SuzhGCxCDz.z8/tb-6Z0// yUZ X endstream endobj 2164 0 obj 689 endobj 2165 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2163 0 R >> endobj 2166 0 obj << /Type /Action /S /GoTo /D [2006 0 R /XYZ 72.0 720.0 null] >> endobj 2167 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 264.53 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2166 0 R /H /I >> endobj 2168 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2166 0 R /H /I >> endobj 2169 0 obj << /Type /Action /S /GoTo /D [2009 0 R /XYZ 72.0 720.0 null] >> endobj 2170 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 275.63 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2169 0 R /H /I >> endobj 2171 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2169 0 R /H /I >> endobj 2172 0 obj << /Type /Action /S /GoTo /D [2012 0 R /XYZ 72.0 720.0 null] >> endobj 2173 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 241.19 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2172 0 R /H /I >> endobj 2174 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2172 0 R /H /I >> endobj 2175 0 obj << /Type /Action /S /GoTo /D [2015 0 R /XYZ 72.0 720.0 null] >> endobj 2176 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 246.76 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2175 0 R /H /I >> endobj 2177 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2175 0 R /H /I >> endobj 2178 0 obj << /Type /Action /S /GoTo /D [2018 0 R /XYZ 72.0 720.0 null] >> endobj 2179 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 235.65 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2178 0 R /H /I >> endobj 2180 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2178 0 R /H /I >> endobj 2181 0 obj << /Type /Action /S /GoTo /D [2021 0 R /XYZ 72.0 720.0 null] >> endobj 2182 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 247.31 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2181 0 R /H /I >> endobj 2183 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2181 0 R /H /I >> endobj 2184 0 obj << /Type /Action /S /GoTo /D [2024 0 R /XYZ 72.0 720.0 null] >> endobj 2185 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 234.53 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2184 0 R /H /I >> endobj 2186 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2184 0 R /H /I >> endobj 2187 0 obj << /Type /Action /S /GoTo /D [2027 0 R /XYZ 72.0 720.0 null] >> endobj 2188 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 247.31 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2189 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2187 0 R /H /I >> endobj 2190 0 obj << /Type /Action /S /GoTo /D [2030 0 R /XYZ 72.0 720.0 null] >> endobj 2191 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 235.65 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2190 0 R /H /I >> endobj 2192 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2190 0 R /H /I >> endobj 2193 0 obj << /Type /Action /S /GoTo /D [2033 0 R /XYZ 72.0 720.0 null] >> endobj 2194 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 229.82 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2193 0 R /H /I >> endobj 2195 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2193 0 R /H /I >> endobj 2196 0 obj << /Type /Action /S /GoTo /D [2036 0 R /XYZ 72.0 720.0 null] >> endobj 2197 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 256.2 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2196 0 R /H /I >> endobj 2198 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 589.5 539.998 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2196 0 R /H /I >> endobj 2199 0 obj << /Type /Action /S /GoTo /D [2039 0 R /XYZ 72.0 720.0 null] >> endobj 2200 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 215.92 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2199 0 R /H /I >> endobj 2201 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2199 0 R /H /I >> endobj 2202 0 obj << /Type /Action /S /GoTo /D [2042 0 R /XYZ 72.0 720.0 null] >> endobj 2203 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 220.93 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2202 0 R /H /I >> endobj 2204 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2202 0 R /H /I >> endobj 2205 0 obj << /Type /Action /S /GoTo /D [2045 0 R /XYZ 72.0 720.0 null] >> endobj 2206 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 247.31 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2207 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2205 0 R /H /I >> endobj 2208 0 obj << /Type /Action /S /GoTo /D [2048 0 R /XYZ 72.0 720.0 null] >> endobj 2209 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 222.05 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2208 0 R /H /I >> endobj 2210 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2208 0 R /H /I >> endobj 2211 0 obj << /Type /Action /S /GoTo /D [2051 0 R /XYZ 72.0 720.0 null] >> endobj 2212 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 248.43 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2213 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2211 0 R /H /I >> endobj 2214 0 obj << /Type /Action /S /GoTo /D [2054 0 R /XYZ 72.0 720.0 null] >> endobj 2215 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 229.27 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2214 0 R /H /I >> endobj 2216 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2214 0 R /H /I >> endobj 2217 0 obj << /Type /Action /S /GoTo /D [2057 0 R /XYZ 72.0 720.0 null] >> endobj 2218 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 255.65 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2219 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 505.5 540.0 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2217 0 R /H /I >> endobj 2220 0 obj << /Type /Action /S /GoTo /D [2060 0 R /XYZ 72.0 720.0 null] >> endobj 2221 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 232.6 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2222 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2220 0 R /H /I >> endobj 2223 0 obj << /Type /Action /S /GoTo /D [2063 0 R /XYZ 72.0 720.0 null] >> endobj 2224 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 258.98 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2223 0 R /H /I >> endobj 2225 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2223 0 R /H /I >> endobj 2226 0 obj << /Type /Action /S /GoTo /D [2066 0 R /XYZ 72.0 720.0 null] >> endobj 2227 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 223.71 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2228 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2226 0 R /H /I >> endobj 2229 0 obj << /Type /Action /S /GoTo /D [2069 0 R /XYZ 72.0 720.0 null] >> endobj 2230 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 250.09 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2229 0 R /H /I >> endobj 2231 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2229 0 R /H /I >> endobj 2232 0 obj << /Type /Action /S /GoTo /D [2072 0 R /XYZ 72.0 720.0 null] >> endobj 2233 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 224.83 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2232 0 R /H /I >> endobj 2234 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2232 0 R /H /I >> endobj 2235 0 obj << /Type /Action /S /GoTo /D [2075 0 R /XYZ 72.0 720.0 null] >> endobj 2236 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 251.21 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2237 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2235 0 R /H /I >> endobj 2238 0 obj << /Type /Action /S /GoTo /D [2078 0 R /XYZ 72.0 720.0 null] >> endobj 2239 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 421.5 193.459 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2240 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 421.5 539.998 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2238 0 R /H /I >> endobj 2241 0 obj << /Type /Action /S /GoTo /D [2081 0 R /XYZ 72.0 720.0 null] >> endobj 2242 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 258.99 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2241 0 R /H /I >> endobj 2243 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2241 0 R /H /I >> endobj 2244 0 obj << /Type /Action /S /GoTo /D [2084 0 R /XYZ 72.0 720.0 null] >> endobj 2245 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 260.66 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2244 0 R /H /I >> endobj 2246 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2244 0 R /H /I >> endobj 2247 0 obj << /Type /Action /S /GoTo /D [2087 0 R /XYZ 72.0 720.0 null] >> endobj 2248 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 259.55 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2249 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2247 0 R /H /I >> endobj 2250 0 obj << /Type /Action /S /GoTo /D [2090 0 R /XYZ 72.0 720.0 null] >> endobj 2251 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 259.55 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2250 0 R /H /I >> endobj 2252 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2250 0 R /H /I >> endobj 2253 0 obj << /Type /Action /S /GoTo /D [2093 0 R /XYZ 72.0 720.0 null] >> endobj 2254 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 260.11 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2253 0 R /H /I >> endobj 2255 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2253 0 R /H /I >> endobj 2256 0 obj << /Type /Action /S /GoTo /D [2096 0 R /XYZ 72.0 720.0 null] >> endobj 2257 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 260.11 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2256 0 R /H /I >> endobj 2258 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2256 0 R /H /I >> endobj 2259 0 obj << /Type /Action /S /GoTo /D [2099 0 R /XYZ 72.0 720.0 null] >> endobj 2260 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 262.33 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2261 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2259 0 R /H /I >> endobj 2262 0 obj << /Type /Action /S /GoTo /D [2102 0 R /XYZ 72.0 720.0 null] >> endobj 2263 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 262.33 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2264 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2262 0 R /H /I >> endobj 2265 0 obj << /Type /Action /S /GoTo /D [2105 0 R /XYZ 72.0 720.0 null] >> endobj 2266 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 234.81 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2267 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2265 0 R /H /I >> endobj 2268 0 obj << /Type /Action /S /GoTo /D [2108 0 R /XYZ 72.0 720.0 null] >> endobj 2269 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 261.19 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2268 0 R /H /I >> endobj 2270 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 301.5 539.998 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2268 0 R /H /I >> endobj 2271 0 obj << /Type /Action /S /GoTo /D [2111 0 R /XYZ 72.0 720.0 null] >> endobj 2272 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 238.15 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2273 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2271 0 R /H /I >> endobj 2274 0 obj << /Type /Action /S /GoTo /D [2114 0 R /XYZ 72.0 720.0 null] >> endobj 2275 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 264.53 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2274 0 R /H /I >> endobj 2276 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2274 0 R /H /I >> endobj 2277 0 obj << /Type /Action /S /GoTo /D [2117 0 R /XYZ 72.0 720.0 null] >> endobj 2278 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 220.93 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2277 0 R /H /I >> endobj 2279 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2277 0 R /H /I >> endobj 2280 0 obj << /Type /Action /S /GoTo /D [2120 0 R /XYZ 72.0 720.0 null] >> endobj 2281 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 247.31 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2282 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2280 0 R /H /I >> endobj 2283 0 obj << /Type /Action /S /GoTo /D [2123 0 R /XYZ 72.0 720.0 null] >> endobj 2284 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 224.25 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2283 0 R /H /I >> endobj 2285 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2283 0 R /H /I >> endobj 2286 0 obj << /Type /Action /S /GoTo /D [2126 0 R /XYZ 72.0 720.0 null] >> endobj 2287 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 250.63 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2286 0 R /H /I >> endobj 2288 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 229.5 539.998 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2286 0 R /H /I >> endobj 2289 0 obj << /Type /Action /S /GoTo /D [2129 0 R /XYZ 72.0 720.0 null] >> endobj 2290 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 235.92 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2291 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2289 0 R /H /I >> endobj 2292 0 obj << /Type /Action /S /GoTo /D [2132 0 R /XYZ 72.0 720.0 null] >> endobj 2293 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 262.3 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2294 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2292 0 R /H /I >> endobj 2295 0 obj << /Type /Action /S /GoTo /D [2135 0 R /XYZ 72.0 720.0 null] >> endobj 2296 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 222.59 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2297 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2295 0 R /H /I >> endobj 2298 0 obj << /Type /Action /S /GoTo /D [2138 0 R /XYZ 72.0 720.0 null] >> endobj 2299 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 248.97 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2298 0 R /H /I >> endobj 2300 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 181.5 539.998 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2298 0 R /H /I >> endobj 2301 0 obj << /Type /Action /S /GoTo /D [2141 0 R /XYZ 72.0 720.0 null] >> endobj 2302 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 229.25 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2301 0 R /H /I >> endobj 2303 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2301 0 R /H /I >> endobj 2304 0 obj << /Type /Action /S /GoTo /D [2144 0 R /XYZ 72.0 720.0 null] >> endobj 2305 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 234.26 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2306 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2304 0 R /H /I >> endobj 2307 0 obj << /Type /Action /S /GoTo /D [2147 0 R /XYZ 72.0 720.0 null] >> endobj 2308 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 260.64 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2309 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2307 0 R /H /I >> endobj 2310 0 obj << /Type /Action /S /GoTo /D [2150 0 R /XYZ 72.0 720.0 null] >> endobj 2311 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 218.71 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2312 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2310 0 R /H /I >> endobj 2313 0 obj << /Type /Action /S /GoTo /D [2153 0 R /XYZ 72.0 720.0 null] >> endobj 2314 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 235.38 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2315 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2313 0 R /H /I >> endobj 2316 0 obj << /Type /Action /S /GoTo /D [2156 0 R /XYZ 72.0 720.0 null] >> endobj 2317 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 261.76 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2318 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2316 0 R /H /I >> endobj 2319 0 obj << /Type /Action /S /GoTo /D [2159 0 R /XYZ 72.0 720.0 null] >> endobj 2320 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 239.26 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2319 0 R /H /I >> endobj 2321 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2319 0 R /H /I >> endobj 2322 0 obj << /Type /Action /S /GoTo /D [2162 0 R /XYZ 72.0 720.0 null] >> endobj 2323 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 265.64 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2322 0 R /H /I >> endobj 2324 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2322 0 R /H /I >> endobj 2325 0 obj << /Type /Action /S /GoTo /D [2165 0 R /XYZ 72.0 720.0 null] >> endobj 2326 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 225.93 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2327 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 73.5 540.0 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2325 0 R /H /I >> endobj 2328 0 obj << /Length 2329 0 R /Filter /FlateDecode >> stream xMdu9~E;#˻]/ݙK廎_t}ai;V[_˗_ſ}Oﮯwݗ7r_{;ook1n2?ʻ?ߟ>7w?||˻|ݿ8e%oQ*<u~z??o?_wG!q9NSyH7'ĥH ````````*U6l"E`.C"8Ep` q/1 Q@0 F*U6l"D`.]"8Ep y`  y` `"!!!))ׇ~}>> GԯR|^쩹\Z1_yuJ}}lR=>HTw/RdddddYɲe%F,Y6dɲ A,'YNd92C,82NS,e"ׯJddddddYɲe%J,Y6dɲ A,YNd92C,<2OS,,bE,eeeeeee(=>^o^痯>ƒ"_~볯C볯Iu+uPݨPC,!re9ŲbYX"e)dddddddYɲe%J,Y6dɲ A,YNd92C,82NS,(bE,eeeeeeee%J,Y6ldɲe'N,Yd9rebX!yebX)Y2Xf! $$80ޚt?qD3*#꠺Q=>J]PmR'bv H-kbv H-kAAAIIII,+Y^P{F}}@:R_PSԕjd9rTI XRMu˵@j LLLdYɲe#F,Yvdr A,'YNbvH-kԧXRo XReeeeee(b<#j{{񧟿~^˙|jx-fޏⵒy?N;k~b\8Ap- E0D0D0D0E0E0E`*U6l"E`!C"8EpZ15 k g E0D0D0D0E0E0E0E`*M6"E`!CN"8Ap-€ Ap-Z|x"֔ʇO ~?Wy65:Rσ꠺Q=^+bR @]r5E:22222ɲe%J,Y6ldɲe'A,Yd9r.H-k)k XE,הAj LLLLdYɲe#F,;Yvdr A,'YN\r 5Z,"k !5YYYYY&Y&Y>ޕs/#u{}/ކ:R꠺Q=jby۵X_uf}eobyśu /ޮ2222222ɲe%J,Y6dɲe'A,YNd92 Z,/x>:kZ,x LLLdYɲe#F,Yvdr A,'YNbyW۵Xߖf}}obyc۵XߙvMAAAII5q2>:ˏ/p;uzHꀍ:R:ccrs6vj|}F}6vj|}N-ة222222ɲe%J,Y6ldɲe'A,Yd9r8vj|}F}8vj|}F];5YYYY&Y&Y&Y&YVdYɲe#F,;Yvd9r I,X>cgubZ,_ױQ|}bNMAAAAII5T˓)J?~|a,r^q7'X^-S>Mu4Ik\C9' 夺6PnaaaiiiTVSLj3nTS:Lu4iTR]M5L5L5L5L5M5Mu |2*8~?}ɀzP䕞 (˛S5`Z>(?OrR]Iu (7000444jTk{~[˫~ZwayXnTNS 0H~0PNk y!5`TTTTTTTTVSLj3nTvS:Lu4iT׀rR]Iu ('5`0Pnaaaaii:}:IYLDZIǗ/?gMjNJq'HIIMH^-_oRMTS:Lu4I-'rj9HZNR-'^?#-'RL5L5L5L5L5M5M5Mj5z^ <紝Iy/W<-7iTNRT 8H5NRT$(TjS S S SMSMSMSZMj5fTvSMu0aTNSAyj'IyjRBYL5L5L5L5M5M5M>"ۓAWƙt~0,Z߯Ɠ-۳ay|R~{Z>(:Lu4iT'TA rj9IZ Bj)ZMj5jT6SM0aTNS:I5RT 8I5NRT$(Tjjjjjjjj5jT6SmMj7nTS:MuZ|E9WZ|E9WR](7000044ׇ%?L}W3oz}G멂ITAy|P~=UPwʯ Mu0iT'TA rj9IZNR-TK!RL5L5L5L5M5M5M5Mj5]_O멂Y>)*(4iT_T !'IqjRBQL5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MujAyj'f!,TjjjjjPE'+&e4}u(>SwʧNS:IumT׆*OR]('յrR](7000444jT ^m-<έ|RnZ>(_7xIw ^:Lu4I$' ^zKrRy! ^jjjjjjjj5jT6SmMj7nTS:Mu/IvzKrRy! ^jjjjjjj'U6}9g'/8R_'T>.IRZ,X3Reeeeeeee%J,Y6ldɲe'N,Yd9rT$#X-2R u˵=Fj LLLdYɲe#F,Yvdr A,'YNb6H-k ԧX 0R"X/Reeeee=xZ>$_K*(O;Gf9Z[!yjjjjjjj5jqǜ;QS.y<,oO%WMu4IqZtA9e^PNk夺_HZMj5fT6SM0aTNS:IuʠT׺ OR]+3('յ6rR]3(700044cc q4߯ͯ~E?|Óv v@yX,_oW:Lu4iTIu$յ~rR]+H('յrS S S SMSMSMSZM^*3V>)ojqX0iT'%Z^"Ik 夺H^Hu-2TTTTTTTTVSLj3nTvS:Lu4iTIu?T IuAZB[1~?2}Z2}kMbE>ygC ;-f| 1(OR]C Iu 1('5ĠTTTTTTTVSZMj3fTvS:Lu0iT'!夺bH^Hu 1(70004444jT6SmLj7nTS:Mu$5ĠTrR]C Iu 1$/jjjjjjZ PEmOf|{v{~4/Sx$(O;ay|R~PnTNSTeɔ:rR]%K^HuTTTTTTTTVS/F~Q7'WAy|P>NrS:Mu$uY2夺.K$uY2夺.KTeɔjjjjjjj5jT6SmLj7nTS:Mu$uY2夺.K$uY2夺.K,rS S S SMSMSMS>GOfKgȷfKZSޗ.xg j..]P7''夺f]HZMjT|].yX,k%׵:Mu4IkvA9م'夺f]PnaaaiiiTVSLj3nTS:Lu4iTrR] OR] Iu.$/fjjjjjj枇<}v}y_]Ӈ} O/\YyCQY>))ʯGMj3fTvSMu0aTNSvQNk']veG9]vjjjjjjj5juz[˫~ZwayXnTNSvQNk']ve'y!յˎrS S S SMSMSMSMSZMj3fTvSMu0aTNR]('յˎrR]('յNBYH5ަ}:Iu~ _?ǿ~|_o?^& Qs>yLJby|H~JSn<,o+IvaaaiiiiTnwo7XAwo7XA7' 4iT /7XAN_nORr+I Vyjjjjjjj5jT6SmLj7nTS:Mu$/7XAN_nORr+I VjjjjjH|}ϓ~~O ץ'/tw&&f|]k/y|P^HumbTTTTTTTTVSLj3fTvS:Lu4iT'MLz7$յrR]夺61QnaaaiiiTVSLj3nTS:Lu4iT&&Iumb$յrR]$/61Qnaaaiii5T'# >_?OZoO^q7˧kAS^HumST6TTTTTTVS> ּV>)> R^-_)O;DrS:Mu$յMrR]$?IumST6 m jjjjjjjj5jT6SmMj7nTS:Muڦ@9m ڦ@9m R](7000044ջydp_dpF,6jnpBToaaaiiiT 6I`#yZ)laS:Mu`#'IToTVSZMj3fTvS:Lu0iT'6rRlz?8I~pv^H~pjjjjjj!Oc\rp?e G;}Z%_[(˛WTM5L5L5L5L5M5M5Mj5zWQ<,oO{Z>(iNS:Muڢ@9- (PNk"夺(PnaaaiiiTVSLj3nTS:Lu4iTIumQ$յErR][$/(Pnaaaiiiwo~yx_l]F7'wZ>(/z?9M5L5L5L5L5M5M5Mj5ջ`#˛F^-M6TNS:I~r$FNT'VSZMj3fTvS:Lu0aTNRlz?9x;?I~r`#7000444ջC~}29>69/\t#NjsēWz4˧kASTM5L5L5L5M5M5Mj5׃ǝ|RފASrS:Mu$յrR]$?Iu?T jjjjjjjj5jT6SmMj7nTS:Mu@9@9R](7000044S~d0>[^?V<ү6)`#FyZ)lz?M5L5L5L5M5M5Mj5ջF>)lA`#O;w#<,7aTNRlz?x;?I~`#70004444jT6SmLj7nTS:Mu$FN#TG9ޏ ޏ6rS S S S SMSMS>_? Gy|}@_/__>~}x~}(ǜ5_)O;ׇrf:IZR-TI$rj)Z baaaiiiiTVSmLj7nTS:Lu4IqjAqj'F!(TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5޲GO5gB<ּO|2 8q%K=P>$_Nڡ%yX,R]M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu ('5 T0rR] aZMj5fT6SM0aTNS:Iu ('5 $5 T0rR]M5L5L5L5M5M6 s,~=yx>|~b3xx_?0TOK.Q uPݨ˵IFj\[d>rmZ,rm,,,,,,,+YVdYɲe#F,;Yvd9r I,X=0R)kbv@]r},,,,,,,,+YVdȲe#N,;Yvd9r$IS,rmpZ,rmn"5YYYYY&Y&YxR]? F/12^>GO^|H=Pw蒇I]rR]$S S SMSMSMSMSZMj3fTvSMu0aTNR]('յrR]('յABkZMj5fT6SM0aTNS:Iu{T׺OR]('յrR](700044ջMy}`Ú}dVi <<_#wʯfzZ>(:Lu4iT'!Z"Ikq夺PNkZMj5jT6SM0aTNS:IuTOR]G('յ~DBk ZMj5fTvSM0aTNSPNkq 夺PNkTM5L5L5L5L5M5Mn(G/OR< ޤsC^ЃS>fverR]#9ޮIve aaaiiiTVSLj3nTS:Lu4iToWHN+c ?Ivez2B+c$70004444jT6SmLj7nTS:Mu$ە1Ivez2B+c$7000044ջC~z2_TǏ\ >އ=a/ 6 fx c7l ؕ2sWfnʔcS2ؔ)ǦL97eʹ)SMR6eJٔ)eW&vebW&vebW&werW&weLݕ2mWʴ]+weLߕ2cWf]+3weL2qlı)L2qnDٔ)eS0vebW&verW&werW]+SweڮLەi2}W]+3veƮؕ2sWfn)n 7eܔsSffndٔɲ)Ε cW&vebW&werW&wecD`|}Bdz7A\Zqȓz|M;.f|-lZ>(?Iu-lTIu-lTTTTTTTVSZMj3fTvS:Lu0iT' Z Ika夺6H^Hu-lTTTTTTTTVSLj3nTvS:Lu4iTIu-lTIu-lZ@]Gcz i}?yu ɫuiy|!yXnTogoHN7 ?Ivz;{CrR!VSz;{8c+ހZ>(yZ)yXnTNS II_ހTRrZMj5fTvSM0aTNS Iꗳ7 '/goTgɐfr1uHk^ޞq'l@YW巳( O;巳( '/gQ@naaaiiiTukd'kͮAZ+yZ)_z%Mu4iTrR]COR]CIu $/jjjjjjjj5jT6SmMj7nTS:MuPNk@9!夺R]CM5L5L5L5L5M5MYyd ycүNJzef|c뱂jz<-_0aTNR=,9$Òa TTTTTTTTVSLj3nTvS:Lu4iT ÒaOR=,9TowCZMj5fT6SM0aTNS:Ivz{TowKN%'ÒjjjjjZjP]?N o u|?q}oy:by|PVIwׁrR]}RNO @)70000444jT6SmLj7nTS:Mu4IpRIuT*IRIu`J9L)7000444jTVSmLj7nTS:Lu4IUIu*IUIu*y!u$+<|2@~}??\o~xrNvù~C`' !n7ù+3weܔ)ǦL96eʱ)SMrnʔsSMR6eJٔ)eW&vebW&verW&werW]+SweڮLەi2}W]+3veƮؕ2sWfnı)ǦL2qnĹ)L2Q6elDٕ]ؕ]ܕ]ܕ]+SweLەi2mW]+weƮؕ2sWfM<6eؔcS&M<7eܔsS&˦LM,2+2+2+2w{cǓ''?oiΙ|O߃GGN$ay|R~ NR-TA$rj9IZ Bjjjjjjjj5jn;cXY>)_%4iT յÄrR];L$?Iu0TIu0))iyZnTNS&W\I~\QNkrE9ZMj5jT6SM0aTNS:IuM('5$5TJBkrE-zyȯOFXW]#g׃E%G;5}Z>(>Swʯ甇:IvѲzhTo-KN%'E˒jjjjjjj5jT6SmLj7nTS:Mu$uL 夺L$u| 夺R:VrS S S SMSMSMSMSZMj3fTvSMu0aTNR]PNIuC9a$/TTTTTTT**F>heD}I} Wz|%5<,oO 3J(70004444jTb_vPnkiy|-<,oOb?ɫ:Mu$8HuQB93J$?IuQB93J('uFaaaaiiiTVSmLj3nTS:Lu4iT%:DT%:rR]gPnaaaiik<1Y@d_~{'Wyxay|R>A<-O˻ rj9HZNR-'TK!RHS S S S SMSMSMSZM)SvY>)}N^->o'OMu4iT 8H5RT$8I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'2.#Ik 夺H^HumTTTTTTT/'3b6rWl>8`JXP^-iy夺XHZMvIvj};yZ)}rN0iT'Aqj'IqjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR][,('յłrR][,('յBBkz|OOt=A\6C @y|P~=(PwʯrS:Mu$յ/rR]r$?IuˡT׾ }9jjjjjjjj5jT6SmMj7nTS:MuڗC9}9ڗ#y!յ/rS S S S SMSMSMSZMj3fTvSMu0aTNSPNk_'}9ڗC9}9jjjjjj'U/> endobj 2332 0 obj << /Length 2333 0 R /Filter /FlateDecode >> stream xVn@}Wc"5۽U%P5jBT9BM~}g}!S@}̜=ǀ]̽&@qv0IE }QĬzo^m0 YZI(L(ڽ8Ds9oSB/)Oo!}:N*7?TڶepJz: FD#ʢ!OEZ)L,Z]" 9LΡ6&+aжm9vfu'N Cg \2ոm ڽDP뀇/Iw7Dθ r#Eg<[ 72əT$eje䳽 .؏+G:ئ0_2BHo'iw)$7N. i!+׋ ͜q#$AuY<}LYA!~wʸniH+1~9YYAh<8G]d9fgh嵱zY>>=<$ wG:7)%jR (z0^aLA`9 qѼݎ?Ĺ=PEp0kY/X$[)fS7%b> endobj 2335 0 obj << /Length 2336 0 R /Filter /FlateDecode >> stream xTn0+ұC[Z! l N =d+yͳxM(^CA$#Fc`]:.С WZx"0|h$R} <2$ Ls;'ℌMEg+]fz{VYq^ ",CHm`CY~ab ,ZdZ0yHf).ѪHT᫶ŎE}_~e/x}pg/:U^0Pj_ϨP9 CZVSp嬚J endstream endobj 2336 0 obj 403 endobj 2337 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2335 0 R >> endobj 2338 0 obj << /Length 2339 0 R /Filter /FlateDecode >> stream xV[:~Wc o=EڪԇZb6h H0Ӓ(6cs Bj""<-R]:Ҩy֣Y̷68~CҦ8VxH$ry­! %%zzҦH,-77Y6iתT:f#9LP0 jsDct$`v+,J&GZ_?PVz! aY*dvBJ }*ti#Tph@dI ) 7.>3v\x*Qo{y겣LO&yoEUQ=E?g\]ID!XCΞ3  Kt)0u$5M#6ѥe'q(kz :,fy3ꖢj el2-!/Ω(" XAZ\` .' N+쌼T&҅UTbe+#|eSuđƌI욮TljSVFg'ͲDLSyX9޿;uJMUA;YU?׶^6q-:n9Q&?x&҅K'\) aN^.u6 f)ʸjDA9bb,@tom+tTA2gʧ C/Զ:b*}?4;'}ןs|Z$B=f~~8 endstream endobj 2339 0 obj 837 endobj 2340 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2338 0 R >> endobj 2341 0 obj << /Length 2342 0 R /Filter /FlateDecode >> stream xTMo0 WQmIVle5C[IjFQHvZ+G=HϙμpAg" c0&=Cc~a p…w}K:sқ8o7wy>IZP4¸! 9O*[ڴ!ZulOo!}b\m zkh_HwIUsh"АP'ie6K,]-6]UaN} `KDNL[̎L1 (;|aFuHp[1-\nx]xp YN՗(f$l!3J ݟO ٶ77'ê[.#;6Mv 2N`XNGM#E۸Jj[5k b$?5MgC\t0U>  yۦTBRׁ+MW)E lE`'] ?9pdzuK#WV=F endstream endobj 2342 0 obj 534 endobj 2343 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2341 0 R >> endobj 2344 0 obj << /Length 2345 0 R /Filter /FlateDecode >> stream xUn@}+1`Yjj:FCYbᢨY.5ˋ{fϜf,+3(![O-@qNbLn#ܰh7 `E͌]=vca Ģpm= F܆g | +m6gF^8pDi8M",/n}z9 YZ_d]Ae4G8% 'hh퉪$0fqW]^C#nK$' JfJhDKTPH:D+WkIvi(WӇEZAxS03 d&2,vOڇIyPF$Î+VXH5uMY'eCEWA rUE.D>'8!unvyMn%g0aHAgJBljwwUEa#T`_4uzz١WؒN4AisbѶFwsNF ֒;cgϓ7vz endstream endobj 2345 0 obj 580 endobj 2346 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2344 0 R >> endobj 2347 0 obj << /Length 2348 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=q6m:m "BL>j@l>ҐDu\{|<9$$(u:!D\G5pd;+l5Oq?[dkkz™ J9p>~s`k)Gv#F.~,uVIA. | 93BYF_eSAjh>,$р{PC̣€:{:-YRjUWj׺hn11@{:|Dqq*NS* bתj쮪,M&9C`yCt7ˋ2SH{H _J3NҞlsQ>ՇE^Hݔ?(ܵ7/_WH8&>MK4G4y>RbjxF50<*!uTA\q> endobj 2350 0 obj << /Length 2351 0 R /Filter /FlateDecode >> stream xUn0+ EEZ RE] ! Y!BпPcٲS0a@񹰓y10ppE ; j-6saqܡp\"z' 78.QX; B\!lOʓB9aY``U\Eo*뉲*28SHm D)W2jeV!]zW3Jms-hurGWuʪ/ endstream endobj 2351 0 obj 582 endobj 2352 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2350 0 R >> endobj 2353 0 obj << /Length 2354 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=i[iim%RԀ)wGB:\{|<: (vC:@rb%Ce~@fc ~r̡p\"zON'.Q8 ~ė^ \ۋCpŦHWUb2VyU|u>o,yٲ ?I2 I6#յ.j4JtuZ[f$O e):F,wp&(eҿĂ6.S(S\. -wM+K?0ER5Ev5'3y=UdϨOTZ\uM|5|X7w SatU~3j><Y%q)Pl4ʪL9W˪ᡎ#7IVETVPVEVP>,uOAA*v. WxOw[ LQ„}6 $ߧ<.qM~EU]dXA\Nd3T>v*qczJm=> endobj 2356 0 obj << /Length 2357 0 R /Filter /FlateDecode >> stream xV]o0}WvZ=}mڤM(q|`|=!}f\P7S "iCaϰ66- 8ssх=xvZws5"7 !\R+1*E!{MT%yaT(YA}g9_5MQ)B ՈňuCu,,6IVleV_V \(aqOк: @,0ľ[J؀\FuZAz.z:e U3r@AF2q|72^PTL(B}t5!yg'j4>E E\Ltqw.z#jKLӚ` \Vc֟_IfrVTUq*2rZ$,pTqDܶNmJ!RR5ٷ3y|(0K2)Liέ-\jk1k͂vGV{- ˺]$:ѡW8CH^T#dFQG(DWԻŬEJYe ^&B fc;#>~i*Z>fCXp!p2=\׌9K4D0"m%xhndd+g`b@SlUiTά @1/&\̭k,A:]%+kA;G's7c;PQ>qcw`?xL{cU_ endstream endobj 2357 0 obj 790 endobj 2358 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2356 0 R >> endobj 2359 0 obj << /Length 2360 0 R /Filter /FlateDecode >> stream xV]o }2u6mҦU$V5x1qm8p=.g)l#(>D La/5:}eŹ{R>8ֹo1r>|`VC !D.m5_6ViCR9994MQcIDb e뤇2 r-ɳryr.WiD$MQD19ZG;s})ec6gbי6"L@/9d;(b!d?%AC풌bA`b.E)ӝ)Pqrа#!."_ߟɧ([4+D'uZ[-MjQz3R|:Hs#*@mHUՉY$Oi8Qb E>#$#E9`8aun+8 큻|݌ $3PR و.ţ#^L4Y:ɨ!O[chJ8:m: 돭%u_! DV- ]2{:I%U=d.FGQ Fɺ,Tg BwmYTBU. :|) Xڑl6ϡ~<]#{S3=׮,jˆ5PCu+b[9䇚vEW*M,fu{'\k,An:[%/u̠K{xS%cWk1cOpmU5?rJ endstream endobj 2360 0 obj 799 endobj 2361 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2359 0 R >> endobj 2362 0 obj << /Length 2363 0 R /Filter /FlateDecode >> stream xTMO0W̭pۉ?֪-jV] MKثv>vN֋ˌI(B!K`屇;'vܶq; "%A8%W.@<'|SVcB!${kyD04h* CR?kbdQ_A|NF9 XV_ɶmh>.$Ղ[pWCVA=M[f3Ezk.v!3|6O.Ζb/cq.9WS> endobj 2365 0 obj << /Length 2366 0 R /Filter /FlateDecode >> stream xTn0+.)R ZE! Gm4}I=ؑPI ,# 迋0 / |)z~@f5s aXMTEWGgOwԦ|W,%͟e Ð IT nϮ| _˩+Ltc;[9۫9c)XWosEĚ|$&m^SbQĴ_mʶ8g^r_XWO4K?<>İ/ޜ#s!"{olx=}cU# endstream endobj 2366 0 obj 526 endobj 2367 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2365 0 R >> endobj 2368 0 obj << /Length 2369 0 R /Filter /FlateDecode >> stream xTn0+.W)֢m-F@I`l DEQKHI,+?HESq؅x,GbwQ8 Bbծޞ0vUp=81tCM0#o<>ٳ1!? $,$~jrj ]A:Mn/ |Jwj9-vA~6IFt-TNg2/hd,~MV:&nz%#"rWKyK 炘$tHsp[ayG !ɟJצ0C:R4GL{JW &/a"γ}|]qdIti䡉ck]T6oj:PT-w0/~Mw9'GSuS MY# Xcް>IFg}]y=2oYC8d~u=y G endstream endobj 2369 0 obj 520 endobj 2370 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2368 0 R >> endobj 2371 0 obj << /Length 2372 0 R /Filter /FlateDecode >> stream xTn0+.)Z ZE! Wm4}I=HI, ދ8Š |9a@saI.NK7^%"!̓Es=I2G$)SaPpsv̌'2 ɧb攲7Vn: F-(Dw=),TAgn(hU]6^OSit@LB)" Lx*4geLSp=nK[jiMwH8Q ћOcVڄSD g?O׶qiN[̬ 3Xةd7gx_z .}^߻v^VDn]W+߿/| endstream endobj 2372 0 obj 526 endobj 2373 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2371 0 R >> endobj 2374 0 obj << /Length 2375 0 R /Filter /FlateDecode >> stream xTn0+.II$}k6hu# $0\GB(%pNOM$$FpOUbSQ x $xa@9c0YmTE݃GgOwԥo|Sч,z9͟e1IG$0J|ƖSW ihwSS3> endobj 2377 0 obj << /Length 2378 0 R /Filter /FlateDecode >> stream xVr@}|d6McSxK$)I6# OA%fzzygy6P|G9fk㹔1P+bLnX6V'7"…9Mx1 wȸB?6 5(\KQ`pp0(7k/ \/Iww'g'6Ǘ+Onw Iš# U $J$xꟜ:xrebӂ  (rSeC7cվчo6'9$lYM&6=%eiTY&QaӒ#lDZ]uqA$8"E緷uh |IE,[:ȍsT>xsM'fC*B5QdFI^XIK0i2H6k-e7c&t g~:ۄ^}9'cUmU0(꭛c}^5u9f Y*%r}u0ABpF6;~kGMqũl/Iv_y\}g2sxiH)S){ֆ L:j7NUž8n^ ޹I*;o?̪~v} endstream endobj 2378 0 obj 771 endobj 2379 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2377 0 R >> endobj 2380 0 obj << /Length 2381 0 R /Filter /FlateDecode >> stream xVKs0+VUAnI[gi:Iʹ8<&vecSXJJWR5mF@rc3L`pյmTF_R5"Fʴmkmg%[ > ӵs)lڍ(8Z.)z,mpp68Yۍ[DiAqgsW2O*IVʎ#8%'*Qi#QzCOMWUmnԍfgia3RL%C;!p]L8cc!-|p[w!IP&yyAePt;0tDRbD6)K,:lAli!8nFe\'rz=w7.-:=˄$H̒(ή_9"U#a(x` nL%Y:1Ҩހɋm,We"(YMֶU?2ue7uQj %:L2{ g{+vx9&lbۈc2SXv(Fz ,B ī>] L%؝E 82AEq<Gʺyq q'bC}W҉5Z^ʍϑwn@i̹9bXL2͌pډDGy7ܹvK-߮o׳/0hgW AGSk*z_GZJI`m2aXGA7̪zpv endstream endobj 2381 0 obj 770 endobj 2382 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2380 0 R >> endobj 2383 0 obj << /Length 2384 0 R /Filter /FlateDecode >> stream xVMs0+U2B%mI3iiIç1Ў}W`1 x,hw>jy1PO ild $L>AqEz'THsڎgiK 'h̵S+lƹc|DrA,IeMLY\QZeyO|58;1k|:8$~7d-82S"1y¥ 27 OO|{bo LJq4:=&1Q2ܷȹ+LSV%nW" 2 |?,Ju涶cCRbYfCnefyw  JJYnBʸIFnRSt I,[(%1;jb(9g1r29\U~ bUQ^sp}bcTtB[Kx!A.7|(#JJhfVلPa\X^sΉIe9ƷĄaX3tznzC&Q Q26xlc%G4;qM8ABn!,Bԯ>R& k Vìq;[냱X~#vH*D(b{ePѻl' ak/8qd>"J`q!l8S"_ 6] }(Ι3|vzږǦu=c"H_T;/^};08Va;Z+ޘU}[W endstream endobj 2384 0 obj 752 endobj 2385 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2383 0 R >> endobj 2386 0 obj << /Length 2387 0 R /Filter /FlateDecode >> stream xVKs0+VU/4iǝIL{3E6LNMc-+oW40{^:pUvImTVtӠ4jL7m XEu9mxjwñuB?6 օo}nG[j$q%{?`|s} $J砌 +tyOߛ`W*O IUʆ#յU('Psar>WyEMP gRƘ.ftf¹j8}-]%%yGȂB ,s=!IͬaHk1(q0Y7^!$r=nmtЌ "))j7J71ah&q\y ˦2*.,RPP>i(|i"a6ziҏZӬfHM0$1Nse 469yK0=ҫC]bǙjsN$gڛ `Pbr|#5qc#|p}e3mE#F)݁ܙdJfٞR^R܊1 U1N8T! aԉNKk+1* BWH6N*|EX|ەtz\al>Wwq?;kBhPLe:IE69:lz=`T:mcOqtxs~y9~ƛU>s3͖P[Zjc 䃻ǁ9~#RƄQ݅$UG=̪y endstream endobj 2387 0 obj 785 endobj 2388 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2386 0 R >> endobj 2389 0 obj << /Length 2390 0 R /Filter /FlateDecode >> stream xVMs0+VUܒ345⌇0vN}Wm&&1Jib@>78DKc 99.0AƊn0N͌e={Wg ~[EuwéuB?6 ֕o}'[j #6W?hz{&Y*3߭/^6,_ ?I2/$Y+;lH]pDB얞b"-ӐLqZF*.zP-<pfS0!8LD؎PNf˾3d: n,DM E-tե`nX I뺆 keڙ#+ArH{(06㈰'Zwq1a`C $GmT.“$yUzUՓZ <\' :!*2φ:/c6@B AlUEQ`'fgoVyf5eJ ʚsNgXm FMQm_k&oOsȄF <̕]$]";`wV;)&,O>m L3=[#MB8tH&QE R3{Ye[48qw 6UoNl52e:“7~bnz0FeYŜw鏟LC?f>Oח?l;gיAZSjiv_G>A?0k1ax{_4z'^ޙUsEln endstream endobj 2390 0 obj 758 endobj 2391 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2389 0 R >> endobj 2392 0 obj << /Length 2393 0 R /Filter /FlateDecode >> stream xVKs0+VU/ʭiӎ;ac@ $_ 609AZVZ=CH x01- QS uMѻg exxTR&pԸ;"?7 Oƥc|ni)GFJ}Qp0Noanfa&=ӸrZ13B?XweAT*讝H1 ]MTW@b<.^a hM8Cjn1Q  {SbS⸟yۅ/a ^lQ jzXuLLm29B`dYBTIK]D=P8 g M~]y=uL@ͥ*= 8%E;,r/{;~ ʮqdv6ʒG^b։ALr/t=_A)uLэwh+mDe97?vaPVSJcN9G9sTy*@{@Tא]vpRHsȴ>L ([[\VAyŶy`LKAX)|Cqf~yUdRO@%A*70k+ig IS5­ޱo368Bl?)RUCOǗsL|> endobj 2395 0 obj << /Length 2396 0 R /Filter /FlateDecode >> stream xVMo@+V~5[R&F!,!A*m ʩ X}̼y;b1xRc !f;$6•>0NMeٻN ۗgc%#smkUcT(-әlU•&͌IDFX`1/W0iTw0fףKOtts7S»]Ζg=J-1Za>:-|32&u:v>XUs| endstream endobj 2396 0 obj 768 endobj 2397 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2395 0 R >> endobj 2398 0 obj << /Length 2399 0 R /Filter /FlateDecode >> stream xVIs0+ޭ!6tǩIs;00vaI&cLsj#={GVx 5ۏ?Zc]ixEx۸C4Prpf\uw Ýq@0юZʑ%~l~(p;M.0Q=xEHp4?0{93BYW*dUATjD%l8b@1<)U"mI!X^˕L4K$9)aLT>tƞsJEWуI) ,~r9<=xJ+RzәS[%N:,ҌM$&{'{#G؎cQ6J{(: qLg޺ *atl8BUJe% $EA@qB^d岀|(?z" X,:I?5?/T gq> +ԪId~ nGS,N60T۔R)֜)FuAWMiX ' 6iFZQڂXJvnA"Wjja,갋Urw̆8E\OKgѓxUyXSbdԽkK:uay:uKp&(w3"1I4cڍ v7-(QXjyh': b|C7h3;[(xr=9L]*1gr> endobj 2401 0 obj << /Length 2402 0 R /Filter /FlateDecode >> stream xVKs0+VU/ִiǝIǤ=60N}W 095Vo?z4P|OG9;㱒1Pu,bLnԢO-f۴"Z7w(Qn_4W+΍Y}W( >S%Տ 6w+ayyzi'w~7.ܣ,YpYdǟ"E͎I†# *:HI*8;]"?ux<+Z 9LP0Q#PZitipmlce*Xc 999x/A@>JRoYqsf>%ei>T.OqfQ#lDZ]* >qA$8"Ei嗷EZݾ̤"-GaJI:RoD !2bwPNMB`qTmV^(ITxd!,W0DQ|:GI n0GSd}`,9DrFY瘋hNTP2f#zj6&TV1-TQ4h0 C.n/v⹋Kr< NŘ {h1J, JLa)Zz%֖ ʆ:nm-pNp G2yO9`c&Z06 >iutЎrzC:nWs;_bvs1wIRަTJ,&Ve?T3|-RZQb]$プ7fU} endstream endobj 2402 0 obj 767 endobj 2403 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2401 0 R >> endobj 2404 0 obj << /Length 2405 0 R /Filter /FlateDecode >> stream xVs@~ط\I;v&L3(F#؎}T<5Go[xP>܎hKڱ Vfv}K/(eL%nI2Ϊ#҈ endstream endobj 2405 0 obj 790 endobj 2406 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2404 0 R >> endobj 2407 0 obj << /Length 2408 0 R /Filter /FlateDecode >> stream xVKs0+VU/-iӎ;6i{3EbJlc<ֲ~ix`FH R 9TM1،Xeܴ 73b WQkZo_rNax</QK9r6 .bT-0٬OzJb5=& E+?[{Z%EMPN% c֘86Bώ+zL)]1d"D:Xm5I:cҡB`8Bԕ4ZSٓH WJɔBTpV FqC.r)(ION<@XgsâtP_r&!0*Gvd`֑ADeLoyraF\MWp+]DYeM?TԔR)nhaԟ/U,1/om+fάRZ#]Wi<]!%z616E1"kZuҊKf|(w:Ƿқ\5;F}UwZl]('%cB0r.=7fռ[x" endstream endobj 2408 0 obj 764 endobj 2409 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2407 0 R >> endobj 2410 0 obj << /Length 2411 0 R /Filter /FlateDecode >> stream xVr0}+CT@(oIvܦd&x cm]&1={<[ (4\b !f;$6…<0LM(]}g#|bGQq~[u B7 zFa8I%q5 .\ zW_aϒ哗I Co= ?YZ΂7M/Wǟ"y IV#U *5 %JydDaNH?uN -]p&(eο@hkΔM.վivy3Hf1ηIhR(J1RRqHí>D+WkQG]DRnro^ 1~p&q\ ɍy 9_'aKHjAL0 P$dca1 } Y2D̼U+.@W&P .Å]9'3JM] KUU\J` d]iɰ mɊ*'vV‡i1 #F5=[|OfozEs\{ mfʸ`0kZ!Znjni(U([ mCL EQ2\9de[HBc W!μ Tx0j_gN#1v/.O^fjv%J|RU&F?l{#~Z2Kbĭ$[D ~ endstream endobj 2411 0 obj 772 endobj 2412 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2410 0 R >> endobj 2413 0 obj << /Length 2414 0 R /Filter /FlateDecode >> stream xVr0}+CTݸ1Mq'M^fL04yj٣J~.`e> endobj 2416 0 obj << /Length 2417 0 R /Filter /FlateDecode >> stream xVr0wWgU@(˴Iǝ4&3 "a14_Y5{=z<zui<Nl &Q) uMYAx#10|3n(܂g2 W"CqpoS 7|X?8Q nG0Nt(MVn[13B?XW%eAT8*j;x n4b@1*:\B jyVt.(),9:\&OrsVɴGr"JD[Pۘ 6[s]cSJyw_"! !2?<4dĴQHG%%IWYCC¦N5:  !Sbصr_y%@Ll*/@\2_K+028LY٢%[ FK ?,g܃jAW t)*_e毣rRLJ0tstG+_ȼ V/J~rc)1,p^҄CC[U XiE|kvX$~D`jUYj=2B02Zta/j:{kfv ,J"ke}j!}ν' 5b ୻:cڌ bH>dH[}~jGc|Gn=Sgg{r~q}fl59-5b}.C?;׋#zٺN^YUg endstream endobj 2417 0 obj 790 endobj 2418 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2416 0 R >> endobj 2419 0 obj << /Length 2420 0 R /Filter /FlateDecode >> stream xVKs0+VUAIӎ;uNg<pb}W8{;}Uk<d~H7Ge /(aK,I] |MjW"LW#.wĪKo9QjT 7F('8*-ܰq~Z䠽:M3,bH! b IԚ u5 {n^J9%qcX 0tocH N XFqQkI?g a[Ce@\IWH^}8fβ&NjX ZC-ׅ8ff ZG - K htGH4=r&򝔪\ohyjz`/TRMaX{W)k+?`2 endstream endobj 2420 0 obj 786 endobj 2421 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2419 0 R >> endobj 2422 0 obj << /Length 2423 0 R /Filter /FlateDecode >> stream xVMo0+^ +KECSE8-J4wIHz60xf޼yuP 9$ 1\[< C^1Woʴmd_j'cܵ]R(<;gB4]S%՟P8D x__e6͗J (Uuo"e|WC'IFwۍ$kN JTHS,:9biRoPYiC@p™K)dqcϰ>_"7Ce@y*3또c4{| 1y2k+yXI{ej9p  }f%k<󕲑1nh&$;6ʋAa LDՋD0L4^+0KO62 Jq?ZέOoL.Ϭߎ~tz]>\^\߷Ӡ9B sF5hsu<0_p6a[6_c>U q endstream endobj 2423 0 obj 763 endobj 2424 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2422 0 R >> endobj 2425 0 obj << /Length 2426 0 R /Filter /FlateDecode >> stream xVKs0+VU/^%iq$="al1r;]1Sij|\C^2.(1XmV"k_(Z.Rx}pV0qs 4֫P'Y AJAi4Kq8~n8kP9""hpPMb`7{ 3"UD$7`(9DrFK)w(MR5%CwfN?T/w`(^cC I >~UoҨ,A>x}2O5=`4^z*Yg![(TɐimlW`nRt5N[Ol.nJpúۼ*bFb2R/JuV7YiQwNσ6>m\p'VRs6np:]L5*b$93 Mi endstream endobj 2426 0 obj 774 endobj 2427 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2425 0 R >> endobj 2428 0 obj << /Length 2429 0 R /Filter /FlateDecode >> stream xVKs0+UAnMvҙt !xx D;]!6iOMcEg,/`$;./H0?Ģ=ڑhyVnQj= 5AN\xc]w£uX8(k #6!XK8ӢZ:+r²VoYa;תl3O66IG6pJ$f׺DW)"R:.YDN:uuj3RLɀNʄO\vm!13ejIA\4"T9E% Pӝq Z'G #-N@KE n 0߸;drM JPMUaqN/gNonO'}05A'ƊJfc]0ہ! xc\ endstream endobj 2429 0 obj 743 endobj 2430 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2428 0 R >> endobj 2431 0 obj << /Length 2432 0 R /Filter /FlateDecode >> stream xVQo0~W҇z16m: *BZh w@PBg/!Z[/`Cs$0AjcEzTXUeڌFE~[E9kwĺ 'ҷ>sQ;j RQ}{a4ys "۬2R˳GXc g] YUǟ"U-G6pJV>O8UC욞|E$$ ) A'.N8)ḛ0nZc("BrrmZBFǃlYlVX3Is])&Cյfy{'ryƨ7ЌDPom V۸qC3t)ʨX.<5?ϒ7PfgEFeq>At:~|?:Y"!1d(yT\W6={Kτ&*i9Q4#3< Q=V4g߈k+s6QxJG.a/T&i<)Zq={˽$4NnGۀΡ'@13qg7[!Gr8 .AQi('Za#|*mEO, V@  =ϕpтm(Nu>x2'.[gۚAzSivWGFQ?06J0J܃Oy;o endstream endobj 2432 0 obj 757 endobj 2433 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2431 0 R >> endobj 2434 0 obj << /Length 2435 0 R /Filter /FlateDecode >> stream xVKo@W̭pv_~lIӈJa!cbM6`7&6b=㝙o>ŀ}aWq7KcrN[l$FuiEf0XϴK[n'QotW# Sa|wqK\xDpe.0vQ·OnV΂OCYTǟK2zh[( X]MpJDtehFFX/3NvqA Q&(^L/7:k$=q nU#oqf>qu&q%r=F2ʸ r|#EW}P yI8TŢ(8濚 '0zng !Qoa2E[PNM&~T:zQO^a.!K44sUy F7(59DrF]PpHHAySQ74 B7Dag dY'fF(khL`此8,TNV6)JT.ioQdlV)8z/&se 5ɶ! ɐ4Ѣ9deWd:(%=o;.,X7=K)5nd_vn4Qo FW_8ݏonTu}%iych''}~r k$f endstream endobj 2435 0 obj 771 endobj 2436 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2434 0 R >> endobj 2437 0 obj << /Length 2438 0 R /Filter /FlateDecode >> stream xVKs0+U/1L&!x0 @;]!CllӞvoW+3Ct2EI][- (0?fŢ]9hE1܊Y0bn. S-BRHDaumK $J)WLqf䪩o!Z 9LP0dD̊'䮉;PSk5T:O"XiL-Q<2l1 j]+yQVY'@@ViocnDRo&~DF^[&| U[_Y^ԅ^5q Ua Q\| (LLC$r(69EwGNfQ]ewk&XWtlnW_!9LjzyliLgMg0L"JͱCz泃P獩γ)݀2mv]C]춘= nZӹ~>P|\{!U6W:I/' c@(fFRH7.kycSЦ`Nw\^Axm{x3 'XgqJ:r^/RjN:1κcPFQo}fH.~R2`Z endstream endobj 2438 0 obj 742 endobj 2439 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2437 0 R >> endobj 2440 0 obj << /Length 2441 0 R /Filter /FlateDecode >> stream xVMs0+UAIL:&d<| gӞˮjg /獌`"+(0?FcQkoi;6"N[.G&(w,NQYgBQq%5o.&߯o*O2YCǏ|.m?Xw5eAitHv)]"[̖*-bD= "k"xɋʺ``}A|˽h01DPozb:s-}PU{Ek]4:P"e c(q[(Gq60IQl>%* *n,{8^}0ۼ~ꋪUV3>s"8i+@8X 2J=4&3oK7=!X{AuL;YMln¨Ly\~{G㩡Vi6~sr0[H*ߗT٫#fmd M&u>E.`d+%ƅXo3wρz^gxt3S8No~I{:6 #a#R쾌n:hl{=ƄQ|S~xgV U endstream endobj 2441 0 obj 739 endobj 2442 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2440 0 R >> endobj 2443 0 obj << /Length 2444 0 R /Filter /FlateDecode >> stream xVKs0WU/VnMvL20!dcDlt,0nNMlIk߮sxBr^w2&E@8[-o4bv}~;3-wc} T0<;#@-Hx<>Qi <7d (aϞ`˹d1 EQPQFDž’##OWW'=Bb;zu2Uy)YTřem1 X;6:Y ΘRu)Us_+ke3!, tZ4Hk/oW88IA6 9/Uj'7 qLά`Qk7>R(e֜iŹZCeza0UQ A$q7!kv7A1UfQhr{356TX2>{G/\ZWUԔGW}SJcw_g# Ω^ 40EUT*a0Vl4^y1ـ![L[AtVGYe0#GX8,Vi0'a`]'~Pl`@[|6gk& ĥo(kڒ>ō4X }I6lXŸ^7^b*k/Po rQ_9W:|w~|s98vexwZq`oGQ!G"NEY5_=" endstream endobj 2444 0 obj 769 endobj 2445 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2443 0 R >> endobj 2446 0 obj << /Length 2447 0 R /Filter /FlateDecode >> stream xVMs0+VUAnMfҙdiq&0p;]a&&cvەīŀujnc 9nb L \XꆀSjfo+(\YOwU }T(,F!傸o>5<Ʒ7wp:4 huL8mw.]A`[]Z*s!kdU:{萵k"ɲsޒt~ |^a+Phm"('. W;qC3! ߗ/^횿I$S[\AmwQ:0Uq0 dAGd p6Ð%T NF35w X\69yGm]hoF0s"8ԩ:-@:'pP+u @.嬆` 6WIǰA/oǺ6+A5k=%Q's8p&V9Lt*sya!GFzޤKLamѲ?J׀RrT0;?Nz.V4\Հ6&ё{6q[!5zŸpOks~g~s}ޡpۋ>?\n˫q˓y9}%~@96Fs?GoGIFxc!v3) endstream endobj 2447 0 obj 782 endobj 2448 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2446 0 R >> endobj 2449 0 obj << /Length 2450 0 R /Filter /FlateDecode >> stream xTKO0 W0QôC5Rlm`ߓ -ҎlJT_/@FtG= cy>0rh l,^ ;Eo$d6IG78$/.&v˶̀_K –0QAaVNԝ񺳼\> endobj 2452 0 obj << /Length 2453 0 R /Filter /FlateDecode >> stream xVn0+1KR+sk6h{I=4Aʴ%&%PKDg{#geo1#S)DHhh 7؛^ac۸~{p6!{mһ?Tmޗ=! >  2{QHW\ɜW١ҟ޷tұOI臚5"(n@ǐhk̒wljR-7;M)h "J|i8r$ Q`k4!~θ]pI!*rHTl7[*hbE1FQY6壐zWbqXD,s=t'؝yz=7cbE 2,T2%cSg>;d#ڳZBt8zCIo5*W %QBQ@|?(+8UDqSmp=szDPyMj&'( g?K ftKQk':J źrlo6#|L2ljm,ŰV*{t*>LkT xV L/G3z:qԕgWv[ܓTȘsf3n֭j QӌC~,莹,Ŕ^꯬(OA2!21怴eۡ7P0@SӝJa_8:|@=P93?ON+7غɻL@ٳo.̪%tc endstream endobj 2453 0 obj 777 endobj 2454 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2452 0 R >> endobj 2455 0 obj << /Length 2456 0 R /Filter /FlateDecode >> stream xTn0+hE)ZtZ9Aڴ-J/r&a3`n1uwNES- }v6½OyzwX> endobj 2458 0 obj << /Length 2459 0 R /Filter /FlateDecode >> stream xUMo0 WF}YR/Ænˊء- QNQJ:NkRh||z#H$ bBn CsaCzؘwEߣ;ɮ9ju+lK}#$R2."2)\$k9?"d)}u~ɏkrPU|US3աLm >KԐ1%[rlVyvqQMM:oaZYP .9r24Qz_b:dG:ʭfO9eKy澜l"_C6~*xa)bq&Koʴ\ cu.Cag=;.5SImrYc # cULwj̘C50m*ǭ/^F&%Fn"NHpdpN-B/Pj[d+O͗yEM"[^Zh {$$`ي @B ƉJ9q>aVsOgU|3yO2kth֌lH8ܩSޝA{Vx CC?4Wgہ9~~‘كSI~|cVh endstream endobj 2459 0 obj 638 endobj 2460 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2458 0 R >> endobj 2461 0 obj << /Length 2462 0 R /Filter /FlateDecode >> stream xTO0~_q w8m6iUDE(+DwΏBR4Hrw;?2HiXX%d 8qy⡵~a 6+Cʮo#}A d*ťAz+i#![w[;?ra,mo .QJVͯ=I?&H!zjQ'~MQ&%nnk[uO"ɥPy+t"\D2qR}rd-\9gMBlP2ńںAĆ')qgZpZr—t~/ :P #)AlUxԇ*Qug=n .`EM;j'>F1̮b؏ޝyE OGf䫗;޿o\ endstream endobj 2462 0 obj 504 endobj 2463 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2461 0 R >> endobj 2464 0 obj << /Length 2465 0 R /Filter /FlateDecode >> stream xUMs0+$@(6Mř0!t-׌ 8Ϳ1&=5%=ݧj) }n!)L# (h"a#Ya?79,GPw> endobj 2467 0 obj << /Length 2468 0 R /Filter /FlateDecode >> stream xVMo@+hv`ҏTjQ瀝cS; oٙ0s{Q|=0!$>΋?m ZK/\ƻ$BTnއFaV5pvIGMQ$ZyrP`U|]WY"e*aHD, AKؑγvl掛e 8\Ə Iar˲4u eqx 5[$y ^bÃ$˃r1oٺUԮ%*:s+zT.(٘P'&K\ZJ-a6M3C;|QpGN0 7NremfXu{ Klk`ܬLZݬ1QQ5+ Sߣ/H&a9=@*( FG)AY߿rXʊ endstream endobj 2468 0 obj 833 endobj 2469 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2467 0 R >> endobj 2470 0 obj << /Length 2471 0 R /Filter /FlateDecode >> stream xVMS0WLAՇmYigR21 xjAﻒ@ĴB`o[ɷwCV} b`!;.p' {:\nn{`  ^a-&ȌJŝVL[^"4L[xr~f;3~ UMe}Lm;> endobj 2473 0 obj << /Length 2474 0 R /Filter /FlateDecode >> stream xUn0+ Mcۤ@{i=96mH ;jykOM$$43o' JsgS1PD0Vpy{wNh?I{>{.az{n}S(F!Z Ax!\CWS&oe17UQL}&d,c5Mp)ݴT (]UJtbf[uy6GT!HN82h= vL00쁇}yn\eYdE ѐ%( %Z'ۼXWv0GՒhj5:幨 "KD8}6CP yIEPjy0'7%> endobj 2476 0 obj << /Length 2477 0 R /Filter /FlateDecode >> stream xVKs0Wv lYx.te%QMN~=H2ַkY"$yomHሆܢpwqدH1 w| wg]8{u"6x/.C e/-cJ>N1*BOu bUڞc.˘e|kB6COH4ƝB (FP%T8m)b_+[uPSjsBh1qLJ8G8vI̎P*`WmEǙ,i;^`E^>7yQ֦D#)b)#<uEzE=L@Q̥!UheHt <V*_lva̴o;M&KrVUx  C_ p11 !OeQJe̤nlJϕՋi$d|x ŲHS({D1 NIeM[h6ES,õ%9\H鶸y78,Us7J3V墟5K o|,Zy *3y`_TV{I2uU2=]#_VʔT#KSF!]鼟~q`5VoYVE϶zCRZmeź>IjuGKx] ~M?@NeW^t,P[Cr<{+vh#_8QwTL  endstream endobj 2477 0 obj 825 endobj 2478 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2476 0 R >> endobj 2479 0 obj << /Length 2480 0 R /Filter /FlateDecode >> stream xTKs0+VHgڙL=fC8]pcӞ}w/d$!F ᎅ€_ U{p?"@\]3`{ٙ?e;=šڈt4)HGtu)6"\_&R?veqgʡ M1t#dK7n1,(1W>&jd\o|׮|vpnmY;He^4\vQg:'8:=ozua?C?@/k> endobj 2482 0 obj << /Length 2483 0 R /Filter /FlateDecode >> stream x͔=O0wa9;vA`ڤicNIie+g=_dO3Da#1xX ),p3t;*{!vE &OdtcyGҕd~"/JX]ũsknr!–ܥ1R)y$~r)1! Ҭiss֊H(LJ[ɮJZlO4CUmZo|FF}(³MLCJU4={BbzCY2]ז|b;¥0>A2`VG endstream endobj 2483 0 obj 341 endobj 2484 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2482 0 R >> endobj 2485 0 obj << /Length 2486 0 R /Filter /FlateDecode >> stream xTMo0W19Z6H=$QvYĚ,;,ޚ`'LҸ6{v0F Bˀlj? Etǹx_1-a}#g !c_b[!޽J GY~IZ{3'u\?@}'*!?X.7^;18*@"7Suh!"Dٵn[y]du΂:- QP%B@cd ed-ĸ ~M[\O|M > b0a1K^\\#.H 0Dֆ2ҡUQ*4ߙp:\eTkT(\H[k6="aҺy5> endobj 2488 0 obj << /Length 2489 0 R /Filter /FlateDecode >> stream xTMO0WxvbǽJH EmFJ]磐vo q[O~733HOJX~ JO!j!= lj?Eǹp\l7s ?&<7H~)moBVe!J%y.\R@|2ő-Fkojŕu^T;c@ͭ23u`Q.{HVMB߫rsA IQCV(Pt> endobj 2491 0 obj << /Length 2492 0 R /Filter /FlateDecode >> stream xTMo0 WJIeۀݲء-4q\X2QHc'nk I @zoݢ# -u-ACHK [tyc}~m!7/ {x"tMXwgTR5fw}]Zy"zT!WmIx WYZ,so&OdAJOԍṀ\SMCU'ʦ.V6+,3 \&V3 {!xK2(_E\DyR)غ* m$`+ J reEA0Π(mrȐT#4S8tWC|3]3 xu Î(=CefyYWvi^ }k *.*:Ë B/4X玿x9z]%@,[®N=&QH|ÉE9614](~Wc :d|˃V;<Xϓ޿l endstream endobj 2492 0 obj 516 endobj 2493 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2491 0 R >> endobj 2494 0 obj << /Type /Action /S /GoTo /D [2334 0 R /XYZ 72.0 720.0 null] >> endobj 2495 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 252.31 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2494 0 R /H /I >> endobj 2496 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2494 0 R /H /I >> endobj 2497 0 obj << /Type /Action /S /GoTo /D [2337 0 R /XYZ 72.0 720.0 null] >> endobj 2498 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 697.5 244.283 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2497 0 R /H /I >> endobj 2499 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2497 0 R /H /I >> endobj 2500 0 obj << /Type /Action /S /GoTo /D [2340 0 R /XYZ 72.0 720.0 null] >> endobj 2501 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 250.11 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2500 0 R /H /I >> endobj 2502 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2500 0 R /H /I >> endobj 2503 0 obj << /Type /Action /S /GoTo /D [2343 0 R /XYZ 72.0 720.0 null] >> endobj 2504 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 249.56 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2503 0 R /H /I >> endobj 2505 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2503 0 R /H /I >> endobj 2506 0 obj << /Type /Action /S /GoTo /D [2346 0 R /XYZ 72.0 720.0 null] >> endobj 2507 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 253.44 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2506 0 R /H /I >> endobj 2508 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2506 0 R /H /I >> endobj 2509 0 obj << /Type /Action /S /GoTo /D [2349 0 R /XYZ 72.0 720.0 null] >> endobj 2510 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 261.77 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2509 0 R /H /I >> endobj 2511 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 649.5 539.998 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2509 0 R /H /I >> endobj 2512 0 obj << /Type /Action /S /GoTo /D [2352 0 R /XYZ 72.0 720.0 null] >> endobj 2513 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 269.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2512 0 R /H /I >> endobj 2514 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2512 0 R /H /I >> endobj 2515 0 obj << /Type /Action /S /GoTo /D [2355 0 R /XYZ 72.0 720.0 null] >> endobj 2516 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 277.33 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2515 0 R /H /I >> endobj 2517 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2515 0 R /H /I >> endobj 2518 0 obj << /Type /Action /S /GoTo /D [2358 0 R /XYZ 72.0 720.0 null] >> endobj 2519 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 262.89 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2518 0 R /H /I >> endobj 2520 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2518 0 R /H /I >> endobj 2521 0 obj << /Type /Action /S /GoTo /D [2361 0 R /XYZ 72.0 720.0 null] >> endobj 2522 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 254.55 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2521 0 R /H /I >> endobj 2523 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2521 0 R /H /I >> endobj 2524 0 obj << /Type /Action /S /GoTo /D [2364 0 R /XYZ 72.0 720.0 null] >> endobj 2525 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 251.22 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2524 0 R /H /I >> endobj 2526 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2524 0 R /H /I >> endobj 2527 0 obj << /Type /Action /S /GoTo /D [2367 0 R /XYZ 72.0 720.0 null] >> endobj 2528 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 257.88 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2527 0 R /H /I >> endobj 2529 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2527 0 R /H /I >> endobj 2530 0 obj << /Type /Action /S /GoTo /D [2370 0 R /XYZ 72.0 720.0 null] >> endobj 2531 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 256.22 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2530 0 R /H /I >> endobj 2532 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2530 0 R /H /I >> endobj 2533 0 obj << /Type /Action /S /GoTo /D [2373 0 R /XYZ 72.0 720.0 null] >> endobj 2534 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 266.21 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2533 0 R /H /I >> endobj 2535 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2533 0 R /H /I >> endobj 2536 0 obj << /Type /Action /S /GoTo /D [2376 0 R /XYZ 72.0 720.0 null] >> endobj 2537 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 264.55 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2536 0 R /H /I >> endobj 2538 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2536 0 R /H /I >> endobj 2539 0 obj << /Type /Action /S /GoTo /D [2379 0 R /XYZ 72.0 720.0 null] >> endobj 2540 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 262.6 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2539 0 R /H /I >> endobj 2541 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2539 0 R /H /I >> endobj 2542 0 obj << /Type /Action /S /GoTo /D [2382 0 R /XYZ 72.0 720.0 null] >> endobj 2543 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 235.95 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2542 0 R /H /I >> endobj 2544 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2542 0 R /H /I >> endobj 2545 0 obj << /Type /Action /S /GoTo /D [2385 0 R /XYZ 72.0 720.0 null] >> endobj 2546 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 234.83 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2545 0 R /H /I >> endobj 2547 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2545 0 R /H /I >> endobj 2548 0 obj << /Type /Action /S /GoTo /D [2388 0 R /XYZ 72.0 720.0 null] >> endobj 2549 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 252.04 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2548 0 R /H /I >> endobj 2550 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2548 0 R /H /I >> endobj 2551 0 obj << /Type /Action /S /GoTo /D [2391 0 R /XYZ 72.0 720.0 null] >> endobj 2552 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 241.49 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2551 0 R /H /I >> endobj 2553 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2551 0 R /H /I >> endobj 2554 0 obj << /Type /Action /S /GoTo /D [2394 0 R /XYZ 72.0 720.0 null] >> endobj 2555 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 246.5 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2554 0 R /H /I >> endobj 2556 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2554 0 R /H /I >> endobj 2557 0 obj << /Type /Action /S /GoTo /D [2397 0 R /XYZ 72.0 720.0 null] >> endobj 2558 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 242.6 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2557 0 R /H /I >> endobj 2559 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2557 0 R /H /I >> endobj 2560 0 obj << /Type /Action /S /GoTo /D [2400 0 R /XYZ 72.0 720.0 null] >> endobj 2561 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 271.5 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2560 0 R /H /I >> endobj 2562 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2560 0 R /H /I >> endobj 2563 0 obj << /Type /Action /S /GoTo /D [2403 0 R /XYZ 72.0 720.0 null] >> endobj 2564 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 249.28 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2563 0 R /H /I >> endobj 2565 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2563 0 R /H /I >> endobj 2566 0 obj << /Type /Action /S /GoTo /D [2406 0 R /XYZ 72.0 720.0 null] >> endobj 2567 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 250.39 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2566 0 R /H /I >> endobj 2568 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2566 0 R /H /I >> endobj 2569 0 obj << /Type /Action /S /GoTo /D [2409 0 R /XYZ 72.0 720.0 null] >> endobj 2570 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 259.28 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2569 0 R /H /I >> endobj 2571 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 409.5 539.999 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2569 0 R /H /I >> endobj 2572 0 obj << /Type /Action /S /GoTo /D [2412 0 R /XYZ 72.0 720.0 null] >> endobj 2573 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 269.27 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2572 0 R /H /I >> endobj 2574 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2572 0 R /H /I >> endobj 2575 0 obj << /Type /Action /S /GoTo /D [2415 0 R /XYZ 72.0 720.0 null] >> endobj 2576 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 260.39 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2575 0 R /H /I >> endobj 2577 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2575 0 R /H /I >> endobj 2578 0 obj << /Type /Action /S /GoTo /D [2418 0 R /XYZ 72.0 720.0 null] >> endobj 2579 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 278.16 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2578 0 R /H /I >> endobj 2580 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2578 0 R /H /I >> endobj 2581 0 obj << /Type /Action /S /GoTo /D [2421 0 R /XYZ 72.0 720.0 null] >> endobj 2582 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 301.5 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2581 0 R /H /I >> endobj 2583 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2581 0 R /H /I >> endobj 2584 0 obj << /Type /Action /S /GoTo /D [2424 0 R /XYZ 72.0 720.0 null] >> endobj 2585 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 254.82 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2584 0 R /H /I >> endobj 2586 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2584 0 R /H /I >> endobj 2587 0 obj << /Type /Action /S /GoTo /D [2427 0 R /XYZ 72.0 720.0 null] >> endobj 2588 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 254.84 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2587 0 R /H /I >> endobj 2589 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 337.5 539.999 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2587 0 R /H /I >> endobj 2590 0 obj << /Type /Action /S /GoTo /D [2430 0 R /XYZ 72.0 720.0 null] >> endobj 2591 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 243.16 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2590 0 R /H /I >> endobj 2592 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2590 0 R /H /I >> endobj 2593 0 obj << /Type /Action /S /GoTo /D [2433 0 R /XYZ 72.0 720.0 null] >> endobj 2594 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 250.94 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2593 0 R /H /I >> endobj 2595 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2593 0 R /H /I >> endobj 2596 0 obj << /Type /Action /S /GoTo /D [2436 0 R /XYZ 72.0 720.0 null] >> endobj 2597 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 229.83 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2596 0 R /H /I >> endobj 2598 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2596 0 R /H /I >> endobj 2599 0 obj << /Type /Action /S /GoTo /D [2439 0 R /XYZ 72.0 720.0 null] >> endobj 2600 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 234.84 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2599 0 R /H /I >> endobj 2601 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2599 0 R /H /I >> endobj 2602 0 obj << /Type /Action /S /GoTo /D [2442 0 R /XYZ 72.0 720.0 null] >> endobj 2603 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 236.5 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2602 0 R /H /I >> endobj 2604 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2602 0 R /H /I >> endobj 2605 0 obj << /Type /Action /S /GoTo /D [2445 0 R /XYZ 72.0 720.0 null] >> endobj 2606 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 258.16 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2605 0 R /H /I >> endobj 2607 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2605 0 R /H /I >> endobj 2608 0 obj << /Type /Action /S /GoTo /D [2448 0 R /XYZ 72.0 720.0 null] >> endobj 2609 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 252.05 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2608 0 R /H /I >> endobj 2610 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2608 0 R /H /I >> endobj 2611 0 obj << /Type /Action /S /GoTo /D [2451 0 R /XYZ 72.0 720.0 null] >> endobj 2612 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 241.5 227.21 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2611 0 R /H /I >> endobj 2613 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2611 0 R /H /I >> endobj 2614 0 obj << /Type /Action /S /GoTo /D [2454 0 R /XYZ 72.0 720.0 null] >> endobj 2615 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 258.99 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2614 0 R /H /I >> endobj 2616 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2614 0 R /H /I >> endobj 2617 0 obj << /Type /Action /S /GoTo /D [2457 0 R /XYZ 72.0 720.0 null] >> endobj 2618 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 242.33 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2617 0 R /H /I >> endobj 2619 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2617 0 R /H /I >> endobj 2620 0 obj << /Type /Action /S /GoTo /D [2460 0 R /XYZ 72.0 720.0 null] >> endobj 2621 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 239.55 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2620 0 R /H /I >> endobj 2622 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 205.5 539.999 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2620 0 R /H /I >> endobj 2623 0 obj << /Type /Action /S /GoTo /D [2463 0 R /XYZ 72.0 720.0 null] >> endobj 2624 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 250.65 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2623 0 R /H /I >> endobj 2625 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2623 0 R /H /I >> endobj 2626 0 obj << /Type /Action /S /GoTo /D [2466 0 R /XYZ 72.0 720.0 null] >> endobj 2627 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 233.69 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2626 0 R /H /I >> endobj 2628 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2626 0 R /H /I >> endobj 2629 0 obj << /Type /Action /S /GoTo /D [2469 0 R /XYZ 72.0 720.0 null] >> endobj 2630 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 228.14 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2629 0 R /H /I >> endobj 2631 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2629 0 R /H /I >> endobj 2632 0 obj << /Type /Action /S /GoTo /D [2472 0 R /XYZ 72.0 720.0 null] >> endobj 2633 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 269.8 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2632 0 R /H /I >> endobj 2634 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2632 0 R /H /I >> endobj 2635 0 obj << /Type /Action /S /GoTo /D [2475 0 R /XYZ 72.0 720.0 null] >> endobj 2636 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 224.82 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2635 0 R /H /I >> endobj 2637 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2635 0 R /H /I >> endobj 2638 0 obj << /Type /Action /S /GoTo /D [2478 0 R /XYZ 72.0 720.0 null] >> endobj 2639 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 237.58 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2638 0 R /H /I >> endobj 2640 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2638 0 R /H /I >> endobj 2641 0 obj << /Type /Action /S /GoTo /D [2481 0 R /XYZ 72.0 720.0 null] >> endobj 2642 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 227.04 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2641 0 R /H /I >> endobj 2643 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2641 0 R /H /I >> endobj 2644 0 obj << /Type /Action /S /GoTo /D [2484 0 R /XYZ 72.0 720.0 null] >> endobj 2645 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 109.5 191.81 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2644 0 R /H /I >> endobj 2646 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 109.5 539.998 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2644 0 R /H /I >> endobj 2647 0 obj << /Type /Action /S /GoTo /D [2487 0 R /XYZ 72.0 720.0 null] >> endobj 2648 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 232.88 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2647 0 R /H /I >> endobj 2649 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2647 0 R /H /I >> endobj 2650 0 obj << /Type /Action /S /GoTo /D [2490 0 R /XYZ 72.0 720.0 null] >> endobj 2651 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 243.43 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2650 0 R /H /I >> endobj 2652 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2650 0 R /H /I >> endobj 2653 0 obj << /Type /Action /S /GoTo /D [2493 0 R /XYZ 72.0 720.0 null] >> endobj 2654 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 242.89 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2653 0 R /H /I >> endobj 2655 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2653 0 R /H /I >> endobj 2656 0 obj << /Length 2657 0 R /Filter /FlateDecode >> stream xM$u=~E/z"N1]RB&" u7DlLfD o%=q/,/c^^D{g,:~q[?~?}?{|O|}>r?~?~|!U_/ӥ-/8;eg_?}^\|o~O/߿gq%o+O~O_z{_~wo/O߾py爗q\ٯӗyy7'ijH\%q9NSyH r`) X "!!!))))UVl"D`.]"8Dp q` ^!' q`QD0D0D0D0D0E0E0E`*M6l"E`!CN"8Ep` y` 'f, `````f{qyc~KYu?7s_7Oo~o^%_?ʸ*eoO0.CL꠺Q=.2ŲbYN,XS,KRIJ,,,,,,,,+YV˲\?cNrmZ,& rm,,,,,,?mqW,~a͛/^}W_~?_f^Z2_~Х~dHT7'kuԕ!#Cj\.bV'H-kuAAAIII,+YVdȲe#N,;Yd9r$IS,rN˵:Aj\.bV'HMAAAIIII,+YVldȲe'N,;Yd9r$)kubV'H-kubV'@]rN,,,,,,,?1~xpۧo߼z8=~}w:wIuz'uPݨR\,,,,,,,,+YV~F}:R_S]ԕjd9r' r_j\ddddddddYɲe%F,Y6dɲ A,'YNd9r_j\ r_j\,,,,,,?>எ{_|/{sqܿ]oDm'}Tws'ʝoDsc+;W^ӯoV|JR^-_7rR]wjjjjjjj5j׽Wnnj<-_:Lu4I֞rR]7n)'u/y!uOVSZMj3fTvS:Lu0iT'{IuSNrR] ZAu}<?}n/~!`tsV<-񪐇IUIZ Bjjjjjjjj5j՜s>wuay|R]Z>(_'J4iT'Aqj'IqjRBQH5VSZMj3fTvS:Lu0aTNR̓T (iy| /(˛TrR] Iu /$S S S SMSMSMSZMj3fTvSMu0aTNS^H~^PNkxA9ZMj5jT6SM0aTNS:Iu /('5$5TBBkxA~>9L1&a3O#[ү1УAiy| (˛Jj9A夺 VSZMj3fTvS:Lu0iTNRT 8H5NRT$(TjS S S SMSMSMSZMj5fTvSMu0aTNS 4H~4PNk y!5hTTTTTTT**|Y !<'ay|J^j#ʟj#OIR-TK!RL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$7ӓ {_~׍˿}޾ݽzlg|2w Z/uzH}}JTwYr-ܗ,,,,,,,+YVdYɲe#F,;Yvd9r I,XRZ)kmbVC]r˗,,,,,,,,+YVdȲe#N,;Yvd9r$IS,{r-Z,{r-Zv/5YYYYY&Y&YwUyVܽW_Oo9gkzIy/W<-T' 夺f**ꚫPNkBVSZ/z XV>)ojqX0iT' 夺..H^Hu^(70004444jT6SmLj7nTS:Mu$5TTrR]sIuMf$/f3jjjjjj +)_JnTIu큑$յrR]{`$/PnaaaiiiiT^Gվ_)O;{sfzoNyTNS=0#Ik 夺PNkaaaaiiiTVSmLj3nTS:Lu4iTIu큑$յrR]{`('յrS S S SMSMS}6hF5s0j_~ۿyۻy͈-6/h*A|˫C5<-夺JPNk*!yjjjjjjj5jRͫ5wvZwayX,byTNSJPNk*A9TTrS S S S SMSMSMSZMj3fTvSMu0aTNSJH~JPNk*A9l*qL%<>Jx˻#0y5~R>(~Rwʯ)ڐC9 96PNkC夺6PnaaaiiiTKq<[˫~ZwayXnTNS6PNkC' 9ڐ#y!յ!rS S S SMSMSMSMSZMj3fTvSMu0aTNR]r('յ!rR]r('յ!GBkClr1SgO:o|~_}?86f7^W7ݞѲfq{Vq{Vq{Vq{N鑛鑛uӣnzM6=ڦG}ӣozM16={qyܞZyܞSӝ{'lu{glu{t鑛Q7=GhmӣmzM7=ccnzM1^~nvc0r{݇F]^鑛Q7=GmӣmzM7=cclzM1osMowϠ;^>|%ǔ7''ʫCPS~ZL9%͒R] )70004444jT6SmLj7nTS:Mu$յrR])'յVrR]+%/qSnaaaaiiiTVSmLj3nTS:Lu4iTsIuE$յ2rR])'յjrS S S SMSMS}.ϳx!CZ)~P7˧W'߭SN7픓;ZMjygO[Z>(iy|:Lu4Ik夺 H~ZB@9R] (70004444jT6SmLj7nTS:Mu$յrR]k#('յRrR]&$/VQPnaaaaiiFwyq?X{~i>+/hn@y|J^>VAʝ<-R-TK!RL5L5L5L5M5M5Mj5jT6SmMj7aTS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$Yn'ΨO*̏?߿Ч_:.P7'gZ>(/&jjjjjjjj5juZy;,˛^,iyZnTNS&mpIkr@9GHNkr@VSZMj3fTvS:Lu0aTNR̓T ))'C _RnaaaaiiiTVSmLj3nTS:Lu4iTׯ)'COR]:Tׯ)'CM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu!夺~u(IWաTׯ)7000444gq TbY?N%޿o%b"ñk,!yZ%%$˛5Toc jjjjjjjj5jT6SmLj7nTS:Mu$XBrR% ?I6Toc I6TTTTTTTVSZMj3fTvS:Lu0iT'm,IzK@^H6TTTTTTT%,ǃc~Koͻg:^n lS/6ulay|RlSF^-g:6rR-TI$rj)Z baaaiiiiTVSmLj7nTS:Lu4IqjAqj'F!(TTTTTTTTVSLj3fTvS:Lu4iT'Ayj'IyjRBYH5>Y܆#}z~rŕ/s?fH;f|=j$vIu=rR]OnTTTTTTTVSZMj3fTvS:Lu0iT'#('u'('uTQjjjjjjjj5jT6SmMj7nTS:Mu:rR]TPN Iua!y!u>R 1Ο8!߽ǧux w7ݐ7'ݐWݐiTNR-TA$rj9IR-TK!RL5L5L5L5M5M5Mj5۶|R~vy|P~vyZ)m;<,7aTNRT 8H5NRT$8I5 F!(ZMj5fTvSM0aTNSAyj'IyjRBYL5L5L5L5L5M5M .AF~%Ǜ/_~V3(xNw?|IǛ/wrSZR-TI$rj9IR-TK10004444jT6SmLj7nTS:Mu$8H5RT 8I5NRTjRbaaaaiiiTVSmLj3nTS:Lu4iT ;s''ggxnaaaiiiiTVSmLj7nTS:Lu4II;9>;s''ggxnTṓjjjjjjjj5jT6SmLj7nTS:Mu$ggx ύ$ggx ϝTṓjjjjjM]u]GwW=mG]_Q hOgZ>$_NyXNkA9a夺VSZ/ռNNNy?,˛Q,4iT0rR]Iu #('5FPnaaaaiiiTVSmLj3nTS:Lu4iT0rR]OR]Iu #('5TTTTTTb˳O?aI }?Oo_?}oxzOwz\wpwPwʯ;f3ZnTNR]('յ́rR]('յBBkCZMugp=?m' (˛΀j3<-7iTNR]8('յCTIumTM5L5L5L5M5M5Mj5jT6SmMj7aTS:MuڭB9+vPNk_T.M5L5L5L5M5M5M6Wsԑ: kx_y_}w߼yw_? ]5˫C"S(yX,'յ"rR]+R$S S SMSMSMSMSZMu=p\?׎;ziy|=PY>)_ZnTNR]+R('յ"rR]+R('յ"EBkE ZMj5fT6SM0aTNS:IuHT׊OR]+R('յ"rR]+R(700044g+ROׯ8pUn CIjzKLyZ%_K1('յrR]K1('յCBk)ZMFf˫-1iNS:MuZA9bPNk)夺bPnaaaiiiTVSLj3nTS:Lu4iTR Iu-Ő$յrR]K1$/bPnaaaiiiT@凛ֳӁWojw?˻xOHf|=Cj|=CK~{Ƈz{z{z{ToTTTTTTTTVS]qGF7"yX,gH^-H4iT'ޞh"9ޞoIHNgHN'HnaaaiiiTVSLj3nTS:Lu4iTonToq$C]$'#^ /z{lr__woޝromח7c>xDRݥ޴JT7'z*uzH}e9ŲbYX"e)dddddddYɲe%J,Y6dɲ A,YNd92C,82NS,(bE,eeeeeeee%J,Y6ldɲe'N,Yd9rebX!yebX)Y2Xf! $$gӆ<<6TO>O?}zS~䮝׽ʃ׸_?s!_?t%˛Wj|T'$ZIB9$ZI"y!յrS S S S SMSMSMSZMj3fTvSMu0aTNSVPNk%'$ZIB9$jjjjjjj5jT6SmLj7nTS:Mu$յrR]+I$?Iu$TJ $jjjjjj]f;?%ӳ|ӛG+OvAS~<,o4iT:#WT:#WB\M5L5L5L5M5M5M5Mj5zUd;y;-O;<,oOGZnTNR夺ȥT:#WB\M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu:#rR]gJ~:#rR]gRN\M5L5L5L5M5Mƃ*#ڱ1o%>k8~(gQ4iT'Z!Ik夺kPNkZMj5jT6SM0aTNS:Iu-נTr OR]5('յ\CBkl]QܮO]ďz\GGuAy;-O;<,oOGTNS:I6fToc&I6fToc& Ljjjjjjjj5jT6SmLj7nTS:Mu$5fTטITטrR]c&Iu(7000444jTVSmLj7nTS:Lu4IkD91'1夺LR]c&M5L5L5L5M5M5M٘.hLӃa>3}ջ#_˺~}{t݋HNN:[Y>)_xK^-'յrR]{q$?IušT^ 8jjjjjjjj5jR󇇿rNNz8ay|R'yTNS8ڋ#Ik/夺PNk/aaaaiiiTVSmLj3nTS:Lu4iT^Iuő$յrR]{q('յrS S S SMSMS}6~3w߽u`vG^zOyZ)S7'[ʫ:Mu$յnrR]v('յnrR]v$/PnaaaaiiiT^orxןş_~GwIkaqhP`-|PvIw.fj5jT6SMj7aTNS:ITꇳ 'gSANΦ ~8 rS S S S SMSMSMSZMj3fTvSMu0aTNSz4(96 B~mӠz4(96 JnaaaiiiTVSLj3nTS:Lu4iTo%'ۦAORmTo!Rl)m6[J-͖fKi҇c|gO>|z߼կzzw~o^}nXsY\rq?iOכyɫf^SKnT'TA rj9IZ Bj)ZMj5jT6SM0aTNS:I5RT 8I5NRT$(Tjjjjjjjj5jT6SmMj7nTS:MujAyj'IYH5 f1000044H'>=.n^ۻIG2p?xHz'LyX,_)QM:ITQM:IB&M5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I:rR]G5QN& (70000444jT6SmLj7nTS:Mu4I&Iu$I&IuD9(700044Տw_$?=O__yſ=}y7Xk1Y>) !oa.mzE$9vIN]DR"TTTTTTTTVS]Ud;E$yX,WkiNS:MumzEI]DmzE$VSZMj3fTvS:Lu0aTNR"To ?IHrR"mlrg7gϯOy]yŷ?o?~Oy;^z}׿߼8k{CǏ__^__?|~_/hXU_k v|0g?~qt!= endstream endobj 2657 0 obj 14466 endobj 2658 0 obj [ 2495 0 R 2496 0 R 2498 0 R 2499 0 R 2501 0 R 2502 0 R 2504 0 R 2505 0 R 2507 0 R 2508 0 R 2510 0 R 2511 0 R 2513 0 R 2514 0 R 2516 0 R 2517 0 R 2519 0 R 2520 0 R 2522 0 R 2523 0 R 2525 0 R 2526 0 R 2528 0 R 2529 0 R 2531 0 R 2532 0 R 2534 0 R 2535 0 R 2537 0 R 2538 0 R 2540 0 R 2541 0 R 2543 0 R 2544 0 R 2546 0 R 2547 0 R 2549 0 R 2550 0 R 2552 0 R 2553 0 R 2555 0 R 2556 0 R 2558 0 R 2559 0 R 2561 0 R 2562 0 R 2564 0 R 2565 0 R 2567 0 R 2568 0 R 2570 0 R 2571 0 R 2573 0 R 2574 0 R 2576 0 R 2577 0 R 2579 0 R 2580 0 R 2582 0 R 2583 0 R 2585 0 R 2586 0 R 2588 0 R 2589 0 R 2591 0 R 2592 0 R 2594 0 R 2595 0 R 2597 0 R 2598 0 R 2600 0 R 2601 0 R 2603 0 R 2604 0 R 2606 0 R 2607 0 R 2609 0 R 2610 0 R 2612 0 R 2613 0 R 2615 0 R 2616 0 R 2618 0 R 2619 0 R 2621 0 R 2622 0 R 2624 0 R 2625 0 R 2627 0 R 2628 0 R 2630 0 R 2631 0 R 2633 0 R 2634 0 R 2636 0 R 2637 0 R 2639 0 R 2640 0 R 2642 0 R 2643 0 R 2645 0 R 2646 0 R 2648 0 R 2649 0 R 2651 0 R 2652 0 R 2654 0 R 2655 0 R ] endobj 2659 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2658 0 R /Contents 2656 0 R >> endobj 2660 0 obj << /Length 2661 0 R /Filter /FlateDecode >> stream xTn0+."EZ-Л=$A bInѿzĒD2LzYΎ|fޛ0X'ac=&JPf Ā\&w,o0sa?g_? O7 [ w d2K![X 7ѣ\0%]nJo!M^?@}&*!Y˨/ns#cy rLCK-UoWE?y<6mݹs_\ ( %12\15sDE{}SƗPh ATk `Lc)8&fվٌTw ;:gdˢ؅E'jۊ~^[P ((}uyQs"sFRIsRysNS!ѢE\th+XUWQa'hiBN{p3vrNW <\jZW7v5qt endstream endobj 2661 0 obj 470 endobj 2662 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2660 0 R >> endobj 2663 0 obj << /Length 2664 0 R /Filter /FlateDecode >> stream xUMo0W̱H1]EV+Q"P*AH$l~" Ӷ gy0te)6q/ ӡ-*98o[,LҚMƋ]d2"v'o/v`'LZS\p¨3vXG)uM)q%RK*R[EUau$??ʚ0J·GJU( endstream endobj 2664 0 obj 594 endobj 2665 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2663 0 R >> endobj 2666 0 obj << /Length 2667 0 R /Filter /FlateDecode >> stream xTn0+,IQ$}k@oNʎr$A>Ka˕[0gY>3HUXܲ`$t H7,0xح g?߄kxaMx˦'৪ a;fjr(+u/ [쪼C}*!?YX_L}#gx4th^!OCG U+jIyfDB" QPg@ i4%0Ҝ{}+st2ߕyzb h T@Z@hc;i1a^}6UGu#zL3ֹTڶ:zR.(dvBi :SM3dȣg#Dee|02%ux(iRb_c&Pr;D>Xy endstream endobj 2667 0 obj 465 endobj 2668 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2666 0 R >> endobj 2669 0 obj << /Length 2670 0 R /Filter /FlateDecode >> stream xTMo@ﯘcrvv÷VJ"$ T] &`yGO;oo @z/bՖ#A1$b "2&a!/M>a 'JpIx XWnHe Tr-a_bMVr%}HZ'[;-2@=]&Ne 3z} endstream endobj 2670 0 obj 470 endobj 2671 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2669 0 R >> endobj 2672 0 obj << /Length 2673 0 R /Filter /FlateDecode >> stream xUMo@+eskVPzH#jҪ|81`RRcyWf޼ w-Hv]qdpq? nY/;mN?c |2wuMp~ymx-BEiCX{g!}GHCi dR-yE-DqQ5DAVפlFWypLSO=vj "ΔoixÒM~,ivZ4a A &DTSq @1 ^Ɓ =Gs,PPY H+"]"Mm,/f$+aK)~.9)mx{o)89W2FSُShc![7u3Se| Q=*(mbӟ]6,IѼYӻC9IwƴPեK\ڢNlꢺ!™)(&v#?LѰ}>1_,Q8>"yfW endstream endobj 2673 0 obj 525 endobj 2674 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2672 0 R >> endobj 2675 0 obj << /Length 2676 0 R /Filter /FlateDecode >> stream xTMo@ﯘc{vͱU[HNP{HU}gpiOMŮͼyX {1FǐbˈB_ m8|A8l6 3%tExXn ^D*mk>e>E 'k#䱲Sߒ\"BUkB}LG*!_Y/ }#oxhŸ}L( sw!"M;?o7|qw/kks:- QPUx("} yFJ3!H#yXjZRx R{L@jf#XͭIeґnŜ!H%V]%C B'ZCHi_R1e'OYPX$L|Qv tTe^gv?ƙ'8)>[^N{x@nP ? endstream endobj 2676 0 obj 483 endobj 2677 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2675 0 R >> endobj 2678 0 obj << /Length 2679 0 R /Filter /FlateDecode >> stream xVr0w.B礋N=aE`m&F{qibC&'cpGP0UuRjW&t2#7e2wz:G8|.mť.Jm)ʨ/8@a|Q8r$k uJZ #{cF!,&_ƚ|dz'ƨkqTjPNUjt%Iircכr: NCy^c09] ۶OwVbHCڗKBZ%nppBF0Dc endstream endobj 2679 0 obj 638 endobj 2680 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2678 0 R >> endobj 2681 0 obj << /Length 2682 0 R /Filter /FlateDecode >> stream xTKo0W̱=?8Vm*mC> ;ư .) F73gƅ} 0TLo,E_粫I],c:PM=U-"^.˦ӆ/nruk>EP:- QPF00=_)9|:w+( ȠqE ! Xyw[ I)LʼnJ(J/EY5fzXͭIeHBRqhl}8Td;{OQ5[yBUvql'V(Ѧ]uL!k،: ƙVG})}_@(x@MU?gy endstream endobj 2682 0 obj 484 endobj 2683 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2681 0 R >> endobj 2684 0 obj << /Length 2685 0 R /Filter /FlateDecode >> stream xVn0+%Q̭=0"$0Xڒ#)p]RE01gwv u1AiMtc B,NIc;~Ϩ[0v&+-91.@f#!Mi>fژDh )Mlﮊei֐mc}.JoҙSU7}(쩧Rޔm],ڢ*;{,Sp&(eXT LJ$.wAn8WcB,Z0MS- vEzTlٱT3ߘ̐/"K GxάxܨH0}*h+ζ?!l>@Mnc=ئt%8{bcw[Ĝ~#P(IdNMGZE endstream endobj 2685 0 obj 613 endobj 2686 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2684 0 R >> endobj 2687 0 obj << /Length 2688 0 R /Filter /FlateDecode >> stream xTKo0W̱=?8Ji*mCUt"-wa]S@k[fL{c%K0`O! 4B_=kps ##tCxX07j}}@ OFceQߒi 7ofuwo ĮIJW骏wyV1=xPFDnCG  JT?˶׆oٺ+*Ǜ{l\P:- QPF` aG_**ұ[)͜,wVp[X2 B8buU7cfK"RD̤2Jq2CqUH'D[X$X/%U5?ؿІljP$2 "} Bu r2q4.À?'Y1?ѵrBԑ<{e endstream endobj 2688 0 obj 488 endobj 2689 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2687 0 R >> endobj 2690 0 obj << /Length 2691 0 R /Filter /FlateDecode >> stream xUn0+bE=5"44Kʒc*jq.zb"7˛Eˍwa !>- EspBo2Jw}ChB^k'^zQ bCX{#Å!Z=I# 42)ܖ6p2_qQiohehk\6}#YrAe%O6a~||Q\Sa]pgP'8c q2_/v,@ʗGWV=. endstream endobj 2691 0 obj 538 endobj 2692 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2690 0 R >> endobj 2693 0 obj << /Length 2694 0 R /Filter /FlateDecode >> stream xUMo@+eskJU-F H`Jϼy3otE˝bB+&|v nq3twl_^c6vpĻ#tE&\Gy^"rCx_"ӥ!Z?[# 42)%y,٤8/moEtPU:%լna;#A S/ݡ[5ekJ^d {~^ްuV,Ɵ#`KDN&ʞ˕aҎR B .I)I7PtfW]rEH $ iIQ͑bFS2ҩzǔLl\G&١2W2FSkt'wcB[9Uѯ&qj;;>}'JKݲe ]fcІ9e4̀qnE~ՙ!̂YV?bg(U\ؼUqdiG~ GfQ?覨c0G#9Ҏ‘/.嫓7vCN endstream endobj 2694 0 obj 544 endobj 2695 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2693 0 R >> endobj 2696 0 obj << /Length 2697 0 R /Filter /FlateDecode >> stream xTn0+._cH\ ! աHJ}z8l=5 sfwG|dX'ac&JP&4,~16__[|cC;B 7r=qD]冰fʀ@HV/rQbdؒn?,6,B .AJwVɯ 􍤯ṀcpROvZ"ΔrT~K_?Yku Zr)E ZkA@}Ҏ (&[C{W-.g7w׾EdtFX( خe~gyQm4w6v.qKKS FIhՊݤ'O(YjD<#}m|!  ?cGn$;?("dݏ81b^5ư0W%sڴ"ǃ Ss|cW򨘴 endstream endobj 2697 0 obj 483 endobj 2698 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2696 0 R >> endobj 2699 0 obj << /Length 2700 0 R /Filter /FlateDecode >> stream xVn0+rњ[ E{(Dhq`c (GTb;D/,6,j7fC<˜p;NMz.ܢ}< 13fgk"v?r|wњ݇Ӻ{G|(nVΗJ y:'nc"33Z'<\g+%rHV$SNׄltxN6}e80↨1!wEVB6Z4mmFE1QN<:G9uzшcaM[6X dԒ&Wf|^ BH0Tՙx$s0E-h,ᩨq#[E"A10*B78Q h#"MKD1T``Rk(3:+b9e&j.ͬ6iA܋3TN3`Fble7M!=w\iXdd~S)rfWVrٔ*SpkY̥IAVLd0^v@mu2͈CF%> endobj 2702 0 obj << /Length 2703 0 R /Filter /FlateDecode >> stream xTMo0+?8ǪI*m$" ;+ݥ=5ߌ1 dcqd0WLw,Vsa_^!|no 7jP{Cy#ӵ!zxGHC42)ܔ29['٩YUwG endstream endobj 2703 0 obj 529 endobj 2704 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2702 0 R >> endobj 2705 0 obj << /Length 2706 0 R /Filter /FlateDecode >> stream xUn0+rz(DhIm )E_ߡ$Zܚ؆I<G6n }`p= jWi7QYOxzhÓ׻s b>/>0 r֧$ ?BAD]:퇛|ejt{q7*T02( IW<vƝ28%!T\QQJ JUeiC*mܬzqN+#p&(eyл˥> endobj 2708 0 obj << /Length 2709 0 R /Filter /FlateDecode >> stream xTn0+b9p#45fXJPc˶rK" "7<2H,nI+ هDb@h.{q373{xx,0% ax@]ņb3K!6AnG9HHZg%|.V!_C׍o?Bv.L,E_粫I],vVUZ"AzSM }Xa7}ڄ^#*R(DAhzK[0ƁR)o^!o*@usc׾1e)y,1Q;̿PMьTwD sF=iN9B*1Uo{~[лЖT;gl:RK > endobj 2711 0 obj << /Length 2712 0 R /Filter /FlateDecode >> stream xVN@}Wc"^|BU(P*} 9XbSڿﱍS!;gΞz1xr8Pa ,܇a 7.h {@ՌӺ-!Zw6KK4 ?*Z7azlDž,[ҵ뀊e|czD<&\x$h*iq~_<֖cQ2]OVX/5Đ;l0?5SıT-JՁ*pNB%;ng\^Uup~ endstream endobj 2712 0 obj 727 endobj 2713 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2711 0 R >> endobj 2714 0 obj << /Length 2715 0 R /Filter /FlateDecode >> stream xTr0+$䣫T吪`~ @ D/ȍrt)!WOI먀٦sM;he]u#鱼/մ|lQ [RKCDnqț{nA#2R(DA  E-M`ա[).w\deVnj *yL0BRuvzLLyAdHzP1 ew6kG;9#Á(ƒ{!(VqCB[nB휥 Ie\'7Q1W@6~K[vl %vͲҷA>S[l>Nzu ƅf/(6Vs wLy`NSprrj#No!AR endstream endobj 2715 0 obj 489 endobj 2716 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2714 0 R >> endobj 2717 0 obj << /Length 2718 0 R /Filter /FlateDecode >> stream xVr@s}f7Y).r!Ha, X ŗĖKiyrP\C 9Scp~y>0p n0}A9ݞ,᧓::w1,:7"Mqp>L_<`&NZ_HB"9E'k;MiIJ?yW`UzSS־<7 N=Wo 0()%/,kmHҸQ怶n.' JVq ~b\3g91S t *-ya*! 7-6i*-]"PJ .x,qE*K R&2*4NfV%f endstream endobj 2718 0 obj 796 endobj 2719 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2717 0 R >> endobj 2720 0 obj << /Length 2721 0 R /Filter /FlateDecode >> stream xXKo6WVHTzoŶM)ТI^DBd#},+饻q`qF̧g.(!(ΞEA^WA\!.}ŌRζǸ*ό049: MņbXh^^b#bX/xdi鮦}vs7[t)O$GdЂ="۠A<k r]ETC[DwyrEYa(t:Eݙ&#@%Dq$VFgr1;;-[z ~O]~䄱$4uS=WwhnyQ"d@h6cJlP քzGb]dg$b$;疶tزtKQ:1( 3-˚3֐nwULFE7#hl7,/Dh@d VT h֦vEzz~H7iE(Oގ o69)]E$wD6SLG Ns*$j9`W.ON 4 YWZgU)3繎D u]<fk R\#AyY}ƄƲ*]h~ue e(IQ9ZwL-˃nD*JHKKƒ4ef6w2zQ+^i4Z#HIHZS귿1YΉSF${!nad=Ԛ)R(63TRF~yrA E$c٩"Zͯ2 VgG |\]Or[ 1㕊;bqZaB㓒D9[+ߴ<w"9O 3oňkNM s7&(0~SQgxv }oQGzܧ;3Iv_9,95D5֌SJ֌2~TZG` u 52EǦXHlVl߬7\ߍ`k:y)0 mb,,]QUˠo!/CC[k[Xˋ|5"8OẫxY'zxD ʃ"B%QBOF mZ=W24k IK Fx]bK}OY픛1QvhH0{8T1C{>>xzm~AO~z$&.v ~+*>c endstream endobj 2721 0 obj 1388 endobj 2722 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2720 0 R >> endobj 2723 0 obj << /Length 2724 0 R /Filter /FlateDecode >> stream xUn0+bn-=5"40KؒmjKXɡhb"7qL<Hυy`H݇+&|knp t+slv_^!|o ޫõ+o1Jz>»k}dZZH Mpoum!ER)U*xe.*}Uʪo} goS32C=Zj(S6,*oXd)9%G.`KDN<Hk8@ǁ~ azXP4[Cur(sURm ҕ.j%?Y/Ҏj'ʷYXEP΅d dg=%]rJ=Εa:Pj4^fq3EN$aνMT`hZ@UP> endobj 2726 0 obj << /Length 2727 0 R /Filter /FlateDecode >> stream xTMo0 WQ lzmQHlv6ߏv/zHj ~1V|ö&HPQ Bsܲ_=Gcv_[{~!\{BGz O’]B"mC̆cWFDn^C[ U'JY;srͮ[ВKV:ܻ6P"IiFSY| Q@SM]]üؔk׸EȄ4# 5S{LAWuOG[Xˤ%A T\j;"8 BhD[k)6d! O<;eXyD릚>UڗOEqb,:E?ja70s&5"';TɛUF endstream endobj 2727 0 obj 489 endobj 2728 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2726 0 R >> endobj 2729 0 obj << /Length 2730 0 R /Filter /FlateDecode >> stream xVKO0WQV*"j5! q(wn*687L?: (~O%籵18hb%Cs bO#iwmLl৓9>;Wh]݃gq/QX;"'n'G/$~nuWGz)DqaTu| Wc4T02! H< jV{QRJE+JQbnNF= !p&(eˢhlu cXxy0xKTJgkc5ѡ!jSx2*LM;`%h;% M{D.A(4Rdq)W4^~ư R(]z1mB%N'*a7`Yeu֫e6e/|9КK({I6TM?e%haV,d -8eI|Gp፼Te S!1={$Si(m۸y62`Һ_1&V vŕseR6XN\N%Dr&Ǹ'qnlN{cn$z뛸7ӽq?Kgǩ!75C٫^f7vv1zXA5tnҦjE ڠ~J*:֙ hz2 W҅wxkY=}p^/FI88?{{eU/8r endstream endobj 2730 0 obj 769 endobj 2731 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2729 0 R >> endobj 2732 0 obj << /Length 2733 0 R /Filter /FlateDecode >> stream xTKo0+J;~qJ=TZ-jIhˢ@m߱M}&1o>fp@ܢm0bB<+&B/W,Jo|:@8m6=+C &eW !>$O!pd$m,.i fR-ilͲȫ$k:ۿK19Tr*]x~>Afy=WF@C@riڰKgQNbP .9/`(ʭznVEKCZkȠߴ6[AֻmSޮbAĤC(rgnr5't0xpp!BA_}ʝ,1:;Qo:d^(G*gVc endstream endobj 2733 0 obj 503 endobj 2734 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2732 0 R >> endobj 2735 0 obj << /Length 2736 0 R /Filter /FlateDecode >> stream xVKo0 W_C; +bl(FDN?"ٺE.<[Nqe]7Z?@ =.=.6g\psR,J! --_A7uvY ßos}X>~-3ÁǚK} BoI)57~wՃJӆ#;8fB19٫R.lJ1.<1f+8s Fe[ָ*GA2tAp6 0j:rVHd(;&t!cu2-V2Y-.<c xJW(5BБ*&*` M*; 4)1U]KY$Tr3G`nLLZ]-;mI>e`̓r%:7"O(r'>cgSnfјZJ0raD>=+ } h8RGOwVپo̬z߱,$Ԡ:yv) U0`N~-]1gtnч9r++a'ٝﶉɵ*altZjXW>7됙+Rb.w>~UF7Dpr+?jM endstream endobj 2736 0 obj 768 endobj 2737 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2735 0 R >> endobj 2738 0 obj << /Length 2739 0 R /Filter /FlateDecode >> stream xUn0+%Q-EhE ! Ŧm"j}z8$=% Xqvgc!`@ࡍ1PDtbaLbAn+zvcd?<9! tpzDFaOwB`Փ!%b"n:O3Hҙ-$_QWW}Hmٱ}T+#SSRAM)(宸3ֆGwogD^3A)FNg&#oL$0OU 07kk5* d0u1aSBS+Z{> endobj 2741 0 obj << /Length 2742 0 R /Filter /FlateDecode >> stream xT=o0+nlG☱R[C%DBJ$Pſ'@[!|֓K٠4,+ &<3ca `{hw$5AX/ቌ܃! aNCrC?zH}'4Tp4Z  y:I ECLF+tPWY_<}T *CuVe@%_eQ_b[|IBWzJF'THN9g"pv|28Z6?ιj. tsG"Ou4y$-Q1[QTmE\T}B-V>TmN ulK}&2^)9/Y5<'4G]1n?]4h0Rwª dw endstream endobj 2742 0 obj 418 endobj 2743 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2741 0 R >> endobj 2744 0 obj << /Length 2745 0 R /Filter /FlateDecode >> stream xTM0+J]wlҶR]!qT,V;6]Ao Qlx{1\Eq8hRM!)!} nqWN=k >wOЧ|S!l$))i# L %ܽ[2+ v!&7to}5ͳ zD)uS׭Om+/ nߔIglc\"rLЧ:$)>C}|R= K[rzR*Ƞ66[C (B:"&bPJ9S)OeUy;3MȌQ"fs!Y e[V큝OyCc4u"k.2炒ߎYhnkHMS%S0_2GlgK: J!P=Z=uӁ= DD 3n1xi>X^˗8,\/Wv=o endstream endobj 2745 0 obj 499 endobj 2746 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2744 0 R >> endobj 2747 0 obj << /Length 2748 0 R /Filter /FlateDecode >> stream xUR0+f@ö,vM;) - d !{G؉+$X:ҹk}H~TA|`.%Sc^ni,!ZI ߜ[Dg{jĹlB?TlF!|HQ  !j.`?&(3zyx wgne*`^.(VFDbM5AE)(YShCޢgJmvr™a{ @iacdz@v,\ n&s8yt~;mgygPSg"l<@%Ă}+Of&65UAD@)%iW}^ĥ6AW~E^;E]̕\$Hvųv' H`ZeZZrmV A4Jf}ޞ4ƐՋ`gMC!|ƑY"?F2YtVph$5ra:Aq42VҘI4vnzژXHc>N>xVzEY6 /(׍Y8MG8ګtvEv9Zlx6:??(A3=r.5o4Q]Rzߋa/dϥ=7roPj{hcj/tKKa[ە|o~gU/;8 endstream endobj 2748 0 obj 678 endobj 2749 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2747 0 R >> endobj 2750 0 obj << /Length 2751 0 R /Filter /FlateDecode >> stream xT=O0+n|a[E$!N)&IhR$FZYOwO.hpXmɾA> endobj 2753 0 obj << /Length 2754 0 R /Filter /FlateDecode >> stream xUMo@WKv쵹*C*r&k;Q}g&7oOT!;O @q1\$E퀀jpN۱h;­:~8wwũӵKg1"B?7 k|{i]NA.D>=]͍I3C?yxT`UGVU=;apJZj(nURh.ӸHt6Vyajih+}p&(eXƥxtaHAi{8@`%4lĀg%<$* ^b H$3g+V"lnjl]i8<sV7Q0:ɳ^i'Ldt`8Dr7jMrTR"sU]&l)v[KHn=0IUn9p~Y-gvxR?߄Y2\in_? |Rb&J7]6r&JFi1F:I3~?2;ʆ0J7TU?w endstream endobj 2754 0 obj 620 endobj 2755 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2753 0 R >> endobj 2756 0 obj << /Length 2757 0 R /Filter /FlateDecode >> stream xVMo@+C"%cVM*P) JqT{m#ap|`S2˛yft^ ,Sm ]ÄK ͅ b/^U'+N >E`ϮN3]YW QwMɯ Yde GV2I-d Ѯ5YEglU鯼Е6#:>8 n#r<8.|&$Eu|a.<S6*r(6 %{Q8]7I&g/~DyBV~oi㼁#sX _K}VEJ$K4]篳ԴOzߪhi^n<_RT) %1]1QPdT8m5.;Q*ȵVy/Nj(Ip@T$qJ$ 8S)Ȩ{M:ޙ5206mnicuY\-C76kQ7[ /:CTrD=Wep۲{anXKQң)Qܨ?` -(a# '} Z ʤ0hk@V+5ɞ=+=Ւ>36#j'^£66ڝupb&g۰6b};2?.tO~M oY endstream endobj 2757 0 obj 729 endobj 2758 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2756 0 R >> endobj 2759 0 obj << /Length 2760 0 R /Filter /FlateDecode >> stream xVMs0+{&QNN&g2ؖcMB0iOmci1x^A*˭H"> endobj 2762 0 obj << /Length 2763 0 R /Filter /FlateDecode >> stream xUKs0+ЙڇxHGڙ2MLIc waӞѮǷ 0x]9$;1TGj /vwa ¡ù{@ >:ףDʍ9(DkK u0 <fJ%DJD?PwVu__Aٹ>({b\!9h*PRJݖH, U<Źf[O g. 8㠇-$Aृ{"@'{K**[)!)kثrKUs؈ AI a|>ʪNPh@0 l3O_"/~M|>auZ @ vU?D0W6oil?j* gxa;p!$0L;z2mMVթl͒TVwϒ8ϟtXxo9*ɴF9ވ650;;Q'fN>vaϣm*>V,"Vmj0> endobj 2765 0 obj << /Length 2766 0 R /Filter /FlateDecode >> stream xTMo0 WF;nh ۡbQpԖ?NR:v\ ,^q$PSh%T(uD셧5t6 F ܉'BK#89񇸿 g(y~Sʩ֚f"/KL ³Pβ VR "1;xX}n{W2 ߿nmrȷr'ȿP.)MҔt7k `E̲53_CU2Yf4[SvO<3дE첪[S}5ر/xݵy\Rz\3/7ìW' u Sֽ5'koT9SH8(qۖqM:{>g>nekD!7+K _oPN(v*fU;Rs endstream endobj 2766 0 obj 422 endobj 2767 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2765 0 R >> endobj 2768 0 obj << /Length 2769 0 R /Filter /FlateDecode >> stream xUn0}+汑m.]]J }h H w$4Ӷ&gx[ (>S݉CY-@pC0pacE)+1zn?VnQj] B܅G˸ |D)nChip'6tfp}ՏhWjr7sxS7yï ǟ MG4` 9.݊J|6S4K۵*۲RFcp™M)͜Mo\Fg"p/,9c,bƀ<,8*ǴڀeQXBC b%Z l$<-0aOy+Ӳ3 h¨Gm' !]P::ysBFGH|ǨصO.cǬVrbH8k#?l '0^?2VN9mqpF{IK4_JVʇyIOҥ9frbԸusPGvSSn?}9INaմXOU'm-A3h1VP_#sڄQ:N5~&Q endstream endobj 2769 0 obj 617 endobj 2770 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2768 0 R >> endobj 2771 0 obj << /Length 2772 0 R /Filter /FlateDecode >> stream xTKo0 W9vSۭU BA-t &tҎkkފ ln 1RiQhsGy:pTr J=8>NgDƯ]˯dWkw@/%:aM#rw< C2_8\m`yF#G]$x[fM$+L>K5`. FGʌT|C-Sc5X4+Y[8d'[6ډբT e[YUձPbN'띟iM=(vt1:_eˑ9u P!R'5·ڮ΁: endstream endobj 2772 0 obj 376 endobj 2773 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2771 0 R >> endobj 2774 0 obj << /Length 2775 0 R /Filter /FlateDecode >> stream xTMS0W1PW+ےreI t&Ӗߕ?vj]mvqTlL!QRa*2\ G/¶s";C%Z╘҆cS !^<[89g5nFh s;<0Q7,vټ\xږ!c-$IiD[BMSiI OL_#ﲘKHg?vE0ȒutrzN{Ȳ AEԫ^=evmnt:mSy2^r:?HP:*NfbKk`"B'#8g8}*/z8rȽ2.)dbJJ63tæC9Uo'-f> endobj 2777 0 obj << /Length 2778 0 R /Filter /FlateDecode >> stream xTMS0W1PW+۲rkNIL b8N[=+l4zڧ]mv;c 4C.T )dfa1;=F?c]~:ƶ!l7C8p&.fM}rzVٯ'-f> endobj 2780 0 obj << /Length 2781 0 R /Filter /FlateDecode >> stream xTr0+4J$6i L`qcq:JcOOMAcWRs b $C,NEnX _ ϱ= |"79<ߤٮ#^IO*ms>%o?һv[iࠨ_GiHg7~!^W$ !CpHg_>2[gpswR@5nczQ׋-C*8L 2xB10>$O9}8Ej @}Րgn e*3tLefT0=8g==\@ֳI"M+M?\뎪aP- WdwkΧ"UVaXv/zi̕rj)E/(8峭9kwTz:b>(;mhߡ\1l{?irbSRwFJ=I_Uur endstream endobj 2781 0 obj 508 endobj 2782 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2780 0 R >> endobj 2783 0 obj << /Length 2784 0 R /Filter /FlateDecode >> stream xTn0+.Eڦ-Л=$96(G.8(hg5 @S 0T> endobj 2786 0 obj << /Length 2787 0 R /Filter /FlateDecode >> stream xSn0+T- jI(+@Tkh!zl"#v5G;Ñ0@s6Hᐑc1bP. u `}Vm8!vI o$'d7hhp74n1%7kl摴|=\ ;bPJ)_8ܓg{ѕIMQ:o36f{_sfb?(ktuGёJ-qRCdIz"k0!4dA u CE-TCQ9i eĐiɟ.S86{E%5է)GfT!mT㉉[ h$ endstream endobj 2787 0 obj 367 endobj 2788 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2786 0 R >> endobj 2789 0 obj << /Length 2790 0 R /Filter /FlateDecode >> stream xTM0Wq98umJ7R˪H&F|a ΋f_"H8 XlȤqP7,V<׫O؍ d ?"!| ]wl|WVm}#dOԒ((D R& l7wyi(c|ͲFͷGȾF^wׄ$YmiRْ iih&Pd[poll)Ă .) B3 ^gBsFT]T 4,d,In߻b[UG5rLѩ1HۏD9|UgsA R9ycmh1 E1|Q^!ҷ"wޖ h)2MWZ6S,Qunty1s_ʆو:|дöC۾:ANT G8M.opO0 endstream endobj 2790 0 obj 507 endobj 2791 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2789 0 R >> endobj 2792 0 obj << /Length 2793 0 R /Filter /FlateDecode >> stream xTM0W⎝ĎSFaYU68lbT;_ tO l=f̛7op@zG~QZ|cl= 4#o1ptqHi#"!a~%ܕndv0df:t>@#TrΪ4r}k 59jZ!d|v*5ivB-vҎٟ̭Z].% &xHzS >tK&9J<{*:O`iŶ(&fnǼC_H+JWȤtw>U_(dZ%ZKt$i׮r:ٸ(i3? ,BN>T-kq@#L&֊jen & %dz^[^BHP+{V>40C@MM<ʚzﱓIOJQ~s 1v7)YrrFz@ endstream endobj 2793 0 obj 537 endobj 2794 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2792 0 R >> endobj 2795 0 obj << /Length 2796 0 R /Filter /FlateDecode >> stream xUˎ0+rv?صCt"b2B DI*y3 s_>~ P|~Pl!$0Axpâ݀Yvcn (#1Y CFa|O#`űEIȍ8xvr?+I2x-vYդrn&4Mzj/4N8 ?q$^HK[ ꜠n`i.'͵Y1%RJoQ5FyҪ(muO_#2sj=ʊ|y_~ [Gn2>ć"0Fju'5F l4w$jvf|tW\qJ<ݚ"%l^юh*YQB0mլL^N dӨSove^:^;ȧ}__, !K׶ֶ-&ԑv7ZFQ]xѶvwy/7T>sWow endstream endobj 2796 0 obj 595 endobj 2797 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2795 0 R >> endobj 2798 0 obj << /Length 2799 0 R /Filter /FlateDecode >> stream xUKo0 WmImi]PDNmE(?򰝮v4IHQ//RsXV@rE1ՍTϨX2FE; nPݣ6C}As {@F1:.D("(GR"kqn-/nf+wLZH0O7q{ Ok|M8$dܳ%S"ώCSJ]WWjE-l6yjzo> endobj 2801 0 obj << /Length 2802 0 R /Filter /FlateDecode >> stream xTn0+h5M\|knaӶ[r$C-^7& 8ÙyPGaЖl=As $'o10 H-&eUL)e1" d/Yf(#r`^r~ɏkrV`U?k ZhR jr.)]pJ41șhZϊ|<^ԯ+_f1 K=K"4,3R^J9ח,rֆE( 24%J@nb[eUj{fTvi*tP 4NHPmOrAœzҊ-QFZQ=3}?,_\mǹ awK4㧼 `(Aw=+x10`挻jVf [:.i2rc=ӍNqPP ")§Ξ\ <2w=9)3Kzж݈K?4vɼupa {1 Z endstream endobj 2802 0 obj 566 endobj 2803 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2801 0 R >> endobj 2804 0 obj << /Length 2805 0 R /Filter /FlateDecode >> stream xTK0Wc[>J7R˪Jac'@{noq@#?I%`:gO3 )~a_Gd#/sSxZw]49#o2PD>!DJe)"r Mgw#m]`!nSq}~z- z% JJp2I:;m*Y%j3g*;[u OrH> endobj 2807 0 obj << /Length 2808 0 R /Filter /FlateDecode >> stream xTˎ0+vCt"u1FN^jfst/B1m $8aa8/ux۬wd"ãCO%juhr"?6e9>}K"dcj(&H3/_JlYGj;ZOUx E"{jc, endstream endobj 2808 0 obj 524 endobj 2809 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2807 0 R >> endobj 2810 0 obj << /Length 2811 0 R /Filter /FlateDecode >> stream xTn0+`vo-=Ս0`IEߗbGS0g͛0@N¢ eN; !TLRUʥ<0\kNn*g륃ؖYR!Z9RA#([VY՛33ѱ1;9=ݔz>zYUycw*L(*~:♜! biص^LsF?Z{-Fǔ4]ۥfP׊sN%gOնd^:UiaqJ?E}%Jtn ??oG!WqqJɳW endstream endobj 2811 0 obj 521 endobj 2812 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2810 0 R >> endobj 2813 0 obj << /Length 2814 0 R /Filter /FlateDecode >> stream xTKo0 WQCVn iY (QveyE(?ٝZ%I={MR o !xDHpgDsnG~a kw!xΛ a}IOBr/-RQ!Lpp}"J\\: ! 5Xi va9,(+#5$(u-ʪT cĔD3$ImMV›%H?U!;RD P(T=]ߋIxgV%t1t=7YZ !X 8b8򗶍)6NI(ҍRc40)dGv6b0+{]y?2\L8 Tp<}gU endstream endobj 2814 0 obj 534 endobj 2815 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2813 0 R >> endobj 2816 0 obj << /Length 2817 0 R /Filter /FlateDecode >> stream xUK0WGbZ!F !@8lbZ @=u7AxAH ]Rc/!p 1n ۱~E:=z|wC4iUyK`.OZR'c@0K^)בҦ|l'} ?Ӌ,uDO _P˒<ŀb$l+f JZͼ̂JܬB7tS)Ym6otjI b*d32` B\8\4ueB`9wZU*Sy#s9"Ӵf`vʔ^e0zuVim%(wS:쬿#SD"R [PαH*dPFan%uQբ.] 9)jßJ]ղW|lO{ʢ0Fy`JYuͅDHt?@pCjG$ (2ؼ J endstream endobj 2817 0 obj 587 endobj 2818 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2816 0 R >> endobj 2819 0 obj << /Length 2820 0 R /Filter /FlateDecode >> stream x͔?O0w7Psv @B,Q㤑SI Vr/%&@f,lM$pDB\Y4l;{1aGZ!.JT'ũܑkifĝ˹呃ݦy$I~8"0DZcuu:BJ,DHLfUL.ؔq_&VEVWS骶0UVM]BJ͉ھ~ˎU{ȕ&sqo"鏫7%k6Q#ll &1g3_˙oՎOHr endstream endobj 2820 0 obj 338 endobj 2821 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2819 0 R >> endobj 2822 0 obj << /Type /Action /S /GoTo /D [2662 0 R /XYZ 72.0 720.0 null] >> endobj 2823 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 230.66 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2822 0 R /H /I >> endobj 2824 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2822 0 R /H /I >> endobj 2825 0 obj << /Type /Action /S /GoTo /D [2665 0 R /XYZ 72.0 720.0 null] >> endobj 2826 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 241.21 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2825 0 R /H /I >> endobj 2827 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2825 0 R /H /I >> endobj 2828 0 obj << /Type /Action /S /GoTo /D [2668 0 R /XYZ 72.0 720.0 null] >> endobj 2829 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 221.78 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2828 0 R /H /I >> endobj 2830 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2828 0 R /H /I >> endobj 2831 0 obj << /Type /Action /S /GoTo /D [2671 0 R /XYZ 72.0 720.0 null] >> endobj 2832 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 246.78 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2831 0 R /H /I >> endobj 2833 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 673.5 539.998 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2831 0 R /H /I >> endobj 2834 0 obj << /Type /Action /S /GoTo /D [2674 0 R /XYZ 72.0 720.0 null] >> endobj 2835 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 257.59 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2834 0 R /H /I >> endobj 2836 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2834 0 R /H /I >> endobj 2837 0 obj << /Type /Action /S /GoTo /D [2677 0 R /XYZ 72.0 720.0 null] >> endobj 2838 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 283.97 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2837 0 R /H /I >> endobj 2839 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2837 0 R /H /I >> endobj 2840 0 obj << /Type /Action /S /GoTo /D [2680 0 R /XYZ 72.0 720.0 null] >> endobj 2841 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 242.59 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2840 0 R /H /I >> endobj 2842 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2840 0 R /H /I >> endobj 2843 0 obj << /Type /Action /S /GoTo /D [2683 0 R /XYZ 72.0 720.0 null] >> endobj 2844 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 268.97 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2843 0 R /H /I >> endobj 2845 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2843 0 R /H /I >> endobj 2846 0 obj << /Type /Action /S /GoTo /D [2686 0 R /XYZ 72.0 720.0 null] >> endobj 2847 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 238.16 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2846 0 R /H /I >> endobj 2848 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2846 0 R /H /I >> endobj 2849 0 obj << /Type /Action /S /GoTo /D [2689 0 R /XYZ 72.0 720.0 null] >> endobj 2850 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 264.54 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2849 0 R /H /I >> endobj 2851 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2849 0 R /H /I >> endobj 2852 0 obj << /Type /Action /S /GoTo /D [2692 0 R /XYZ 72.0 720.0 null] >> endobj 2853 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 218.72 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2852 0 R /H /I >> endobj 2854 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2852 0 R /H /I >> endobj 2855 0 obj << /Type /Action /S /GoTo /D [2695 0 R /XYZ 72.0 720.0 null] >> endobj 2856 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 242.59 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2855 0 R /H /I >> endobj 2857 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 577.5 539.999 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2855 0 R /H /I >> endobj 2858 0 obj << /Type /Action /S /GoTo /D [2698 0 R /XYZ 72.0 720.0 null] >> endobj 2859 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 268.97 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2858 0 R /H /I >> endobj 2860 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2858 0 R /H /I >> endobj 2861 0 obj << /Type /Action /S /GoTo /D [2701 0 R /XYZ 72.0 720.0 null] >> endobj 2862 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 225.38 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2861 0 R /H /I >> endobj 2863 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2861 0 R /H /I >> endobj 2864 0 obj << /Type /Action /S /GoTo /D [2704 0 R /XYZ 72.0 720.0 null] >> endobj 2865 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 251.76 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2864 0 R /H /I >> endobj 2866 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2864 0 R /H /I >> endobj 2867 0 obj << /Type /Action /S /GoTo /D [2707 0 R /XYZ 72.0 720.0 null] >> endobj 2868 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 230.94 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2867 0 R /H /I >> endobj 2869 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2867 0 R /H /I >> endobj 2870 0 obj << /Type /Action /S /GoTo /D [2710 0 R /XYZ 72.0 720.0 null] >> endobj 2871 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 257.32 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2870 0 R /H /I >> endobj 2872 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2870 0 R /H /I >> endobj 2873 0 obj << /Type /Action /S /GoTo /D [2713 0 R /XYZ 72.0 720.0 null] >> endobj 2874 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 237.6 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2873 0 R /H /I >> endobj 2875 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2873 0 R /H /I >> endobj 2876 0 obj << /Type /Action /S /GoTo /D [2716 0 R /XYZ 72.0 720.0 null] >> endobj 2877 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 263.98 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2876 0 R /H /I >> endobj 2878 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2876 0 R /H /I >> endobj 2879 0 obj << /Type /Action /S /GoTo /D [2719 0 R /XYZ 72.0 720.0 null] >> endobj 2880 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 217.05 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2879 0 R /H /I >> endobj 2881 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2879 0 R /H /I >> endobj 2882 0 obj << /Type /Action /S /GoTo /D [2722 0 R /XYZ 72.0 720.0 null] >> endobj 2883 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 243.43 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2882 0 R /H /I >> endobj 2884 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2882 0 R /H /I >> endobj 2885 0 obj << /Type /Action /S /GoTo /D [2725 0 R /XYZ 72.0 720.0 null] >> endobj 2886 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 262.6 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2885 0 R /H /I >> endobj 2887 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 457.5 540.0 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2885 0 R /H /I >> endobj 2888 0 obj << /Type /Action /S /GoTo /D [2728 0 R /XYZ 72.0 720.0 null] >> endobj 2889 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 288.98 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2888 0 R /H /I >> endobj 2890 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 445.5 539.998 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2888 0 R /H /I >> endobj 2891 0 obj << /Type /Action /S /GoTo /D [2731 0 R /XYZ 72.0 720.0 null] >> endobj 2892 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 237.62 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2891 0 R /H /I >> endobj 2893 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 433.5 539.999 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2891 0 R /H /I >> endobj 2894 0 obj << /Type /Action /S /GoTo /D [2734 0 R /XYZ 72.0 720.0 null] >> endobj 2895 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 264.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2894 0 R /H /I >> endobj 2896 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2894 0 R /H /I >> endobj 2897 0 obj << /Type /Action /S /GoTo /D [2737 0 R /XYZ 72.0 720.0 null] >> endobj 2898 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 232.62 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2897 0 R /H /I >> endobj 2899 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2897 0 R /H /I >> endobj 2900 0 obj << /Type /Action /S /GoTo /D [2740 0 R /XYZ 72.0 720.0 null] >> endobj 2901 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 224.84 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2900 0 R /H /I >> endobj 2902 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2900 0 R /H /I >> endobj 2903 0 obj << /Type /Action /S /GoTo /D [2743 0 R /XYZ 72.0 720.0 null] >> endobj 2904 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 251.22 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2903 0 R /H /I >> endobj 2905 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2903 0 R /H /I >> endobj 2906 0 obj << /Type /Action /S /GoTo /D [2746 0 R /XYZ 72.0 720.0 null] >> endobj 2907 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 254.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2906 0 R /H /I >> endobj 2908 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2906 0 R /H /I >> endobj 2909 0 obj << /Type /Action /S /GoTo /D [2749 0 R /XYZ 72.0 720.0 null] >> endobj 2910 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 229.82 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2909 0 R /H /I >> endobj 2911 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2909 0 R /H /I >> endobj 2912 0 obj << /Type /Action /S /GoTo /D [2752 0 R /XYZ 72.0 720.0 null] >> endobj 2913 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 349.5 189.038 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2912 0 R /H /I >> endobj 2914 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 349.5 539.998 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2912 0 R /H /I >> endobj 2915 0 obj << /Type /Action /S /GoTo /D [2755 0 R /XYZ 72.0 720.0 null] >> endobj 2916 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 218.99 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2915 0 R /H /I >> endobj 2917 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2915 0 R /H /I >> endobj 2918 0 obj << /Type /Action /S /GoTo /D [2758 0 R /XYZ 72.0 720.0 null] >> endobj 2919 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 221.77 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2918 0 R /H /I >> endobj 2920 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2918 0 R /H /I >> endobj 2921 0 obj << /Type /Action /S /GoTo /D [2761 0 R /XYZ 72.0 720.0 null] >> endobj 2922 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 216.77 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2921 0 R /H /I >> endobj 2923 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2921 0 R /H /I >> endobj 2924 0 obj << /Type /Action /S /GoTo /D [2764 0 R /XYZ 72.0 720.0 null] >> endobj 2925 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 218.99 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2924 0 R /H /I >> endobj 2926 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2924 0 R /H /I >> endobj 2927 0 obj << /Type /Action /S /GoTo /D [2767 0 R /XYZ 72.0 720.0 null] >> endobj 2928 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 289.5 200.633 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2927 0 R /H /I >> endobj 2929 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 289.5 539.998 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2927 0 R /H /I >> endobj 2930 0 obj << /Type /Action /S /GoTo /D [2770 0 R /XYZ 72.0 720.0 null] >> endobj 2931 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 244.56 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2930 0 R /H /I >> endobj 2932 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2930 0 R /H /I >> endobj 2933 0 obj << /Type /Action /S /GoTo /D [2773 0 R /XYZ 72.0 720.0 null] >> endobj 2934 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 265.5 194.552 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2933 0 R /H /I >> endobj 2935 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 265.5 539.998 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2933 0 R /H /I >> endobj 2936 0 obj << /Type /Action /S /GoTo /D [2776 0 R /XYZ 72.0 720.0 null] >> endobj 2937 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 216.78 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2936 0 R /H /I >> endobj 2938 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2936 0 R /H /I >> endobj 2939 0 obj << /Type /Action /S /GoTo /D [2779 0 R /XYZ 72.0 720.0 null] >> endobj 2940 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 216.22 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2939 0 R /H /I >> endobj 2941 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2939 0 R /H /I >> endobj 2942 0 obj << /Type /Action /S /GoTo /D [2782 0 R /XYZ 72.0 720.0 null] >> endobj 2943 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 219.55 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2942 0 R /H /I >> endobj 2944 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2942 0 R /H /I >> endobj 2945 0 obj << /Type /Action /S /GoTo /D [2785 0 R /XYZ 72.0 720.0 null] >> endobj 2946 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 246.76 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2945 0 R /H /I >> endobj 2947 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2945 0 R /H /I >> endobj 2948 0 obj << /Type /Action /S /GoTo /D [2788 0 R /XYZ 72.0 720.0 null] >> endobj 2949 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 205.5 263.505 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2948 0 R /H /I >> endobj 2950 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 205.5 539.998 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2948 0 R /H /I >> endobj 2951 0 obj << /Type /Action /S /GoTo /D [2791 0 R /XYZ 72.0 720.0 null] >> endobj 2952 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 214.55 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2951 0 R /H /I >> endobj 2953 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2951 0 R /H /I >> endobj 2954 0 obj << /Type /Action /S /GoTo /D [2794 0 R /XYZ 72.0 720.0 null] >> endobj 2955 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 210.11 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2954 0 R /H /I >> endobj 2956 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2954 0 R /H /I >> endobj 2957 0 obj << /Type /Action /S /GoTo /D [2797 0 R /XYZ 72.0 720.0 null] >> endobj 2958 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 259.55 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2957 0 R /H /I >> endobj 2959 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2957 0 R /H /I >> endobj 2960 0 obj << /Type /Action /S /GoTo /D [2800 0 R /XYZ 72.0 720.0 null] >> endobj 2961 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 287.32 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2960 0 R /H /I >> endobj 2962 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 157.5 539.998 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2960 0 R /H /I >> endobj 2963 0 obj << /Type /Action /S /GoTo /D [2803 0 R /XYZ 72.0 720.0 null] >> endobj 2964 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 263.44 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2963 0 R /H /I >> endobj 2965 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 145.5 540.0 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2963 0 R /H /I >> endobj 2966 0 obj << /Type /Action /S /GoTo /D [2806 0 R /XYZ 72.0 720.0 null] >> endobj 2967 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 231.77 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2966 0 R /H /I >> endobj 2968 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2966 0 R /H /I >> endobj 2969 0 obj << /Type /Action /S /GoTo /D [2809 0 R /XYZ 72.0 720.0 null] >> endobj 2970 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 227.33 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2969 0 R /H /I >> endobj 2971 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2969 0 R /H /I >> endobj 2972 0 obj << /Type /Action /S /GoTo /D [2812 0 R /XYZ 72.0 720.0 null] >> endobj 2973 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 228.44 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2972 0 R /H /I >> endobj 2974 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 109.5 539.999 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2972 0 R /H /I >> endobj 2975 0 obj << /Type /Action /S /GoTo /D [2815 0 R /XYZ 72.0 720.0 null] >> endobj 2976 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 258.42 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2975 0 R /H /I >> endobj 2977 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 97.5 540.0 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2975 0 R /H /I >> endobj 2978 0 obj << /Type /Action /S /GoTo /D [2818 0 R /XYZ 72.0 720.0 null] >> endobj 2979 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 251.77 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2978 0 R /H /I >> endobj 2980 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 85.5 540.0 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2978 0 R /H /I >> endobj 2981 0 obj << /Type /Action /S /GoTo /D [2821 0 R /XYZ 72.0 720.0 null] >> endobj 2982 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 73.5 200.086 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2981 0 R /H /I >> endobj 2983 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 73.5 539.998 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 2981 0 R /H /I >> endobj 2984 0 obj << /Length 2985 0 R /Filter /FlateDecode >> stream x_Wz{|]<{nݐX_ L69<~T/]] +{9_zC+s^?gyWl!|]~z[ŻK_׿_˿x}WO/'|lG}m7-my=vk(s<|ÿO߼}|yᄍ/{??^oyG__y僟__.ӏ?OV/uk*Gk7&N;}8$nOGJ< "8Ep`@l X6,eR@,ECCCCSSSV"D`&]v"8Dp)S'`l ;`Q@UCCCSSSV"XE`&]v"8Dp)S'`n ;` `   LLLqۋK߿}ݻ(ײ_M*C-Iux+uPݨPM,&e˲eŲbYX"e)dddddddYɲ޶lǯSݭԕ!WꤺK}Ǖ:&A,'YNM,c2v],c2XF(ddddddddYɲe%F,Yvdɲ A,'YNbX&enbX.e"Y222222{>Gy[gBX7،y;ߦG/ps}|zH}|:R&SA,YNd9r"XYu+bnf庝Ej LLLdYɲe#F,Yvdr A,'YNbntZ,׭.PbnvZ,.REj LLLdYɲe%F,Yvdr A,'YNbZ,׽0PbZ,0P\wHMAAAIII5nz;':|aNӛ~{c-ͫ܎ 6FY'J<#DTeŲbYv,X"e)ddddddddYɲe%F,Yvdɲ A,'YNbX&elbX.e"Q2222222ɲe%J,Y6ldɲe'A,YNd9renbX&ebXf,bE,eeeeeWnv;E?_o^yÛx]׹ ߩN;Fx'uZ, R= $$$J,+Y6ldȲe'N,Yd9r$)rݞ.rݞ X& $$$J,+YVldȲe'N,Yd9r$)rݞ.rݞuu{dddddddyyw3<~grA|/uSQTDTw~~˫G'jQ"W?j?Qeeeeeeee%J,Y6ldȲe'N,Yd9r˫G_wQZ,~~˫222222ɲe%J,Y6ldɲe'A,Yd9rՏOby׻X^D-W?jz]G'j LLL|>3c<83?f_Oe@n/ Օ!STwLpdddddddYɲe%J,Y6dɲ A,YNd9fX^Lz˫ Nbyu3"W72222222ɲe%J,Y6dɲe'A,YNd9fX^Lp˫ Nbyu3"W7222222ɲmu޷{ޯ/ˡ{/|4yUR^-S>7f9 夺$鷺$PNkTBVSZMj3fTvS:Lu0aTNR]3IuMQ$IuQ('5IꚥPnaaaiiiiTVSmLj7nTS:Lu4IkB91 夺-H^Hu [(70000443Y;ˇ e;s(k^׹uay|RCTVSzǷm<(O;9f|IZnTNRT:_T:rR]ORm~߿H_O+sʽ_Z>(_O<-I7Mu0aTNR]cPN IuA9S2$/ɠTTTTTTTTVSLj3fTvS:Lu4iT'4('u;S4('u夺NҠTTTTTTTVSZMj3fTvS:Lu0iT'#6('uȆ;c6('uІTQjjjjjj-*7yָ3/3}|?4W7P|R3y|P3yZ%:pLNWGI39^;z"/zuTTTTTTTTVSLj3fTvS:Lu4iT'^Iz&'իCIO;^Kz&'իIzu4TTTTTTTVSZMj3fTvS:Lu0iT'^Yz&'իSKO;^[z&'իKOT.=jjjjjj@&Ϛw*˧6P9q^R˫GNLayTTTTTTTVSZMj3fTvS:Lu0iT'^tz&'իNO;^vz&'իNOT<=jjjjjjjj5jT6SmMj7nTS:MuIgrR: LNWI<y!իQZN޹No_>oq}+r@j><-H0iT'C_('u;C_('uTס/jjjjjjjj5jT6SmMj7nTS:Mu񋖓:rR]PN C_(70000444jT6SmLj7nTS:Mu4IIu"NIuB9C_(700044ի;nܨLקgX~9g uiyray|RIrz90000444jT׹$|!yX,s?$׹:Mu4Is?$'˹z9CrR!9^TTTTTTTVSZMj3fTvS:Lu0iT'^T/~@IrT/~Hnaaaiii뮗*k3_>//ם,ݒy%nםwםISQj|4IkD9夺@I^Hu (70000444jT6SmLj7nTS:Mu4IkD9;夺@QnaaaiiiTVSLj3nTS:Lu4iTrR] wR] Iu $/@jjjjjj},7yq; Z'&A==ҽIiyRH7'gɫ夺& 4HZMj5fT6SM0aTNS:IuM('5i|'5iTפrR]M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu4PNk Nk@9ITפrS S S SMSMSMSq: /zoz/?V׭/[͵Iu#U꠺Q=>8R-lrL.\rJuu&ddddddddYɲe%F,Yvdɲ A,'YNby"bZ,ױ#R:t"2222222ɲe%J,Y6ldɲe'A,YNd9r:XDj\NJ@:TDj\GH-@22222y΀|_${N:bxY{yK.y yX,_Z>( 9^c@ZMڎ1`LcH7'k;Aڎ!yZnTNSzَ!9^c@e;zَ!9^cHnaaaiiiTVSLj3nTS:Lu4iT/1$'v wRlǐT/1 /zَ!^ nla@|Xя{yI\lӝϿ,㚅Y>)?Y(0aTNS:Iu=HrR]R|' eIu=HrR]RTTTTTTTVS=Y< >O㚅jf<-,:Lu4IAʔz;)SNAʒR]RTTTTTTTTVSLj3nTvS:Lu4iT׃)' eIu=HrR]Rz2z5ºɳ;#ٲk{YYqenG$=1ay|R~'Z>$_t('յEGT&IumӑڨCVSZMj3fTvS:Lu0iT'h9=C^HnlqgDr9VF$ooO}Z3k\wάqy:5*N}Z8qj穵Sk_O}=ڷSkN};}tTujǩ~Zyj穵~YTuf 3~f˩Sՙ?.NUgT:UZ8qj穵Sk־[lBh=]BwbEn烩3y|P|0u&O;SgrS:IlZ6R-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5ָSewf:+㽉a;/qs1|G@yZ)?#P7'wMu4iTFe#ղjHZvR-;B둷jjjjjjjj5jT6SmLj7nTS:Mu$H56R]$I5vRTWA9F!W)S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5Munlx)rNx3'Fy]+m/^A-O˻k|AyX,鷺_PNk|!yjjjjjjj5jT6SmLj7nTS:Mu$5TBTrR]j('5TTTTTTTVSZMj3fTvS:Lu0iT'夺鷺_H^Hu/(7000444g@ٷ;s4Ȩw^@L5SUXSUکj{.w3k_ʙ/ڗrjǩSk>O}ZN}ZO}Z+<~ ~_g: {{uIuTj|:*yZ):Mu$uP夺|'uP夺TAjjjjjjj5jT6SmLj7nTS:Mu$uP夺|'uP夺:rS S S SMSMSMSMSZMj3fTvSMu0aTNR]UPN IuTA9*$/TTTTTTT ^^vruvWǯ7oˋsm9 xsm\cR,G\GÞȏkLʫS^7f6SmLj7nTS:Mu$XIu=VT`)'X 'RnaaaiiiiTVSmLj7nTS:Lu4I z,夺K9'J^Hu=rS S S S SMSMSMSZMj3fTvSMu0aTNSK9'Jz,多TjRM-͖fKiRl޳>G]'{N~; k϶m5˫*S~\P7Mu0aTNR-l('u;l('u 夺NLu0iT'a夺QFQNk%y!5TTTTTTTTVSj;gY7'X^-TNS:Iu ('5|'5T0rR](M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuFQNk%NkE9aT0rS S S SMSMSMS:&^oR/OPnLay|RފAy-OMu0aTNS6RNkS;M(y!յ)rS S S SMSMSMSMSZM>{q"oiyoI(WMu4IkS 夺6RNkS 夺6J^Hum TTTTTTTTVSLj3fTvS:Lu4iT'Fjn;NjRBYH5ָSeowFW^N˫{iy^3yX,7aTNS:Ij/TIj/T ^M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuQNk'NkG91夺|jjjjjjj5jT6SmLj7nTS:Mu$5棜TטOTטrR]c> 1jRl)m6[J-][g/>aݪ?ûӛ?ӽĵ7܎H{bNY>%/{bIlZvR-;TK!RHR-TTTTTTTVSZMj3fTvS:Lu0iT'Fjl;NjTjS S S SMSMSMSMSZMj3fTvSMu0aTNR͍Ts#H57R͝Ts'I5 f!,ϗݸLSzƧc~g'~ٶ};/ysq>|߇<-_C7'j5fTvSM0aTNSZ6R-TFe'ղjIR-TK10000444jT6SmLj7nTS:Mu4IjlNjTjRbaaaiiiTVSLj3nTS:Lu4iTs#H57R͝Ts'I5wRBiRl)m6[J-͖fKY9j?jd9>d>I${I$y!է!70004444jT6SmLj7nTS:Mu$I${Irz9B%70000444jT6SmLj7nTS:Mu4I%'Iz9^rRd/9^NTTTTTTMp7Uت$تmr(˛V,nyZnTS:Mu$5TJT؊rR]c+ ZMj5fTvSM0aTNSV[QNklE9T؊rS S S S SMSMSMSZMj3fTvSMu0aTNSV[I[QNklE9V7Urgl5^~ll_;sZ$z͡(oO/7B^-_n<-S:Lu4iTFe#ղjIZvR-;Bj)ZM)_%4iTrR]s(Iu͡('5CQnaaaaiiiTVSmLj3nTS:Lu4iTrR]s(wR]s(Iu͡('5TTTTTTs]gP|??zgױfY;roAyX,bWˇ䗍bz(&9^6INbeaaaiiiiTbm۶|m<-bI(&yTNSz(&9^6INbeT/$70000444jT6SmLj7nTS:Mu4Ibe;^6INbeZN#_v6޷&~ßᄏ|ov|59n]~%yX,iI^-iIN!S S S SMSMSMSZMj3fTvSMu0aTNSz9YrR N%'yȒ)?(ʻvS:Lu0aTNR]('յkLT׮1Iu5FVSz\F=CzY>)?(4iT_T׮1IuT׮1 ]cjjjjjjjj5jT6SmLj7nTS:Mu$յkrR]$IuT׮1IuTTTTTT׮*G3;s|n*/ޭ؛>7枰[jn^>,oOɯo9WWԜNy![jNz}K000444jTn9Oʯn9WWԜN-5'TNS:I9^R|'[jNz}KB׷ԜM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:I9^Rs"'[jNz}KB׷ԜM5L5L5L5L5M5Mꖚ<Ǹ3)?iZnTVSmLj3nTS:Lu4iT&:DT&:݄rR]PnaaaiiiTVSLj3nTS:Lu4iT&:DT&:DBtM5L5L5L5M5M5Mt<Ǽsi_K{{?f>`JzN!_gR7'{Z>(/夺VSZMj3fTvS:Lu0iTNR]IuM$IuM('5 T4rS S S SMSMSMSZMj5fTvSMu0aTNSHPNk y!5 TTTTTTT7U`|cN?{?,+\dS>(?Ȧ<-gJ7'TNR=rR}z-yjjjjjjj5jT6SmLj7nTS:Mu$էgBNOϸ=[I3n!700044ի7ydg~0ϧν:ӮmqnG5iyoI(WMu4IF IuD9T׍@e[zyjjjjjjj5jmA'Y7'mAWmA:Mu4IOۂ 'էmATANOۂ 'էmAjjjjjjj5jT6SmLj7nTS:Mu$էmAӶNOۂ 'էmABOۂ 7000444իM΍.?<}槟yfn>W˫|N{>ayTNSZ6R-TNe'ղjIR-TK10004444jT6SmLj7nTS:Mu$H56RTc#I5vRTjRbaaaaiiiTVSmLj3nTS:Lu4iTs#H57R͝Ts'I5 f!,TTTTTTnqgT>t?=~t ћ&<~˽yɫC@S&rRL$'0004444jTEd@S&IH^-7iT'^&er 9^&ery!@rS S S S SMSMSMSZMj3fTvSMu0aTNSzHN;^&er 9^&jjjjjjW;~ÛƳ n_~Ts<-/INk 夺PNkaaaaiiiT>~"L7'wɫ;iNS:MujlFj;F!(Tjjjjjjj5jT6SmLj7nTS:Mu$յrR]_$IuT /jjjjjj^T9n<|yAWǯy~|ó|o6ۨWXk  ;ay|R^Ay3fTvSMu0aTNR]s>Iu('5磜TלOBkGVSZMj3fTvS:Lu0iTNR]s>Iu$Iu('5磜TלrS S S SMSMSMSZMj5fTvSMu0aTNS|IQNk'y!5Tm6[J-͖fKi_9'7տz>?>Џ+O_yzLo=}ˏmK=>vڮ~O~?W?=>ﯞ^O{ob^o^T8Ev_zoe'į_xڮ endstream endobj 2985 0 obj 14714 endobj 2986 0 obj [ 2823 0 R 2824 0 R 2826 0 R 2827 0 R 2829 0 R 2830 0 R 2832 0 R 2833 0 R 2835 0 R 2836 0 R 2838 0 R 2839 0 R 2841 0 R 2842 0 R 2844 0 R 2845 0 R 2847 0 R 2848 0 R 2850 0 R 2851 0 R 2853 0 R 2854 0 R 2856 0 R 2857 0 R 2859 0 R 2860 0 R 2862 0 R 2863 0 R 2865 0 R 2866 0 R 2868 0 R 2869 0 R 2871 0 R 2872 0 R 2874 0 R 2875 0 R 2877 0 R 2878 0 R 2880 0 R 2881 0 R 2883 0 R 2884 0 R 2886 0 R 2887 0 R 2889 0 R 2890 0 R 2892 0 R 2893 0 R 2895 0 R 2896 0 R 2898 0 R 2899 0 R 2901 0 R 2902 0 R 2904 0 R 2905 0 R 2907 0 R 2908 0 R 2910 0 R 2911 0 R 2913 0 R 2914 0 R 2916 0 R 2917 0 R 2919 0 R 2920 0 R 2922 0 R 2923 0 R 2925 0 R 2926 0 R 2928 0 R 2929 0 R 2931 0 R 2932 0 R 2934 0 R 2935 0 R 2937 0 R 2938 0 R 2940 0 R 2941 0 R 2943 0 R 2944 0 R 2946 0 R 2947 0 R 2949 0 R 2950 0 R 2952 0 R 2953 0 R 2955 0 R 2956 0 R 2958 0 R 2959 0 R 2961 0 R 2962 0 R 2964 0 R 2965 0 R 2967 0 R 2968 0 R 2970 0 R 2971 0 R 2973 0 R 2974 0 R 2976 0 R 2977 0 R 2979 0 R 2980 0 R 2982 0 R 2983 0 R ] endobj 2987 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 2986 0 R /Contents 2984 0 R >> endobj 2988 0 obj << /Length 2989 0 R /Filter /FlateDecode >> stream xVMs WpI( $Dnv:dLIL,Mep_G[1}@galХK;!ޑ!DZ_mZWES1!g 1Iդ~;=WF"l+z%dqbٺhhߕ-I [ dl!RzyQcȨUQC򌃂bB!ňi2ܫmVO³ZkFrQ _BVF QIxA}E 63Su)rBGL5تIKmCi%jxq=Ң:%lʌLICNE:\˲)Dׅ=S >\w$"RlJ k2-82z 2Y~GfQ4w"wNꎮpR=;4_._Q0ۀrvUuAG endstream endobj 2989 0 obj 726 endobj 2990 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2988 0 R >> endobj 2991 0 obj << /Length 2992 0 R /Filter /FlateDecode >> stream xVn0+ KR(斢 PEqLBmɡnP-rh2,j73͐ÀunoRq}mc 9y>0A ES;cU^h3X'u(|pnn:GN^;WDʍB켙:{(L'B !! .WaOY'i pbr ӏλUF̯ Y6ǯ$e\,4.pJ$6վ<8UQQJZ6$K/.<צ嘴N8s)e(*tah?D8}a t]ˌd=ƒ/].6y7PuD@)&uٙ1:-UƳI{iy|&|b#2k-#3|E׆*q]'ΎK -x! :, =5f*~-5\F[G&c"`"\"8kz6<"&C&ZC} 񞈍)L.3qd5K>mͭyޘ쮛,B6ۋddÝS-^+9ק/(;xI(`pH7 񲀻fE||"p s혇dyoVNϏqA/ϋ_}UtU%do8U$zjem>7c|ɜ>I a3gV^?w= endstream endobj 2992 0 obj 722 endobj 2993 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2991 0 R >> endobj 2994 0 obj << /Length 2995 0 R /Filter /FlateDecode >> stream xUn0+5KR(單hQ1⢇$(lؤCQh!P=5 s扳`x]pb80>HaFnpX-ݎm{(nm ֢#4:ë`6J0wňq 㐠0Z b_ sv QCB_Qgu~uȺqqTwx zjBqTCzVnc*Bf5 \l"V^j)FXlRL2By(Eit:2u+T.y̅l}>xёP>kܨtq x#zB# e?"OLQu8p;~ry\2oJLFigыYu# endstream endobj 2995 0 obj 647 endobj 2996 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2994 0 R >> endobj 2997 0 obj << /Length 2998 0 R /Filter /FlateDecode >> stream xUo0~篸VZ SIӦMNj@"5D[!@BlOk!qtOܠ"{8(27 3Ea7 cxα[v'rw@%uw="B}{?櫡~|Gh&E. ξI 2̿zWT%,_bzc_ "Q햇\#D۪6N|:5-ˡj\"rJZpᨙn5^5S| qmTUt MQ Y.e.4{ɋJȕc"t5ϲ*V%1ݟ=>V&3y 5iY==`d`U,k -5ҽvKS-lZ-?G HҬ\ b5Y~/fǪK+)i~2;.q6#&#kΤOyusfJ3?:rofNXN!{(x~*Nx4 .8C~jel~ڎ,~*W뾱5CM apǵ!),} |<]˱ ?4Wgۑ9~P* =߸V endstream endobj 2998 0 obj 669 endobj 2999 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 2997 0 R >> endobj 3000 0 obj << /Length 3001 0 R /Filter /FlateDecode >> stream xUn0+h5;\$JE zspjS8X=5 |'μ <H :l~\1ܰp9vca7Y/z߽{B a5눷|W!ϱ!^Ҫ)(TB&E&?*+”{x_P%,ԛڿȺp4~t  i*f{ <{p"]: S%Ago6iQ3s Xɳ@3r3 Wز$7#T˚ʡ]giaȸt;*jx_Lҁ G;uZf$L29+c*S6ʬu"e#RIt\}p0hn6fSi>|bjS)zIpN(fi# jL$sF损xJXIT$p^YԠ\] ɶ) i,Nױ9 /tQt}M1l[l/9# O?ڗ endstream endobj 3001 0 obj 610 endobj 3002 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3000 0 R >> endobj 3003 0 obj << /Length 3004 0 R /Filter /FlateDecode >> stream xUKo@+T%R] C*Uzsf!+p7,OnOM.|0<[d `YA cp 3f/zD=H?j]ꭩK#>EI2yb2;"Ot+)0NߑDJ8jKjnuj'^JLjh >YVfqYl*fpζ5 0+F H(iQ/zf#S ݫvd`1OU5D endstream endobj 3004 0 obj 625 endobj 3005 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3003 0 R >> endobj 3006 0 obj << /Length 3007 0 R /Filter /FlateDecode >> stream xUN0+ V}U7H,;E}'!@Wd4}À{aqؕ}1` 1?#ܱ `A8{Mr(|wnM k$b9c78J^<۳_uU\h%uF0YoJ]jӠ6{gO> endobj 3009 0 obj << /Length 3010 0 R /Filter /FlateDecode >> stream xUMo0+JkC=j~i۲CS( &n!&m[b3 oތOX@p0m`6[4A^5sڍv96AʸGkv^]5wōBb\g?b \KKL鋃[$JObLPM?X Mp TvƸNʃK=JV%^N 5,TՏ.u3R1C`3 WA8~ RE@.*H$s T2 B 8e.v8ە*UZuPo:9]S«}6&YӼJ&Udv6fĢ +uLT Rb ,08Ao$Pe"KѳB/eZquz ! ZU~."js+[Ե6o}[\(a~cyKYeЅ{ڹi N43b(YdT~>@5y0,,TUde/i=?!I$t>x, 5Z"oGVpHFdgjtɟ# +PE  0qYn/`ZO)uCzT/YKȋHB.i[H\{+ ܵu-i~dBCp/[M';)w endstream endobj 3010 0 obj 726 endobj 3011 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3009 0 R >> endobj 3012 0 obj << /Length 3013 0 R /Filter /FlateDecode >> stream xUMo0 W&s۰tإXqrj) Gq"iZ;'>񑢨ǀ "l=@p)XDx %uuoq :~6=1ax\J2(cjD"ʲ4g7pw-JˍQvvk> 5dz]'H_==xHMEM4geK[z>NY9"N8 )e* ь/w8%ptJ+-صͨ=tAcd' J$qaћ'nLeFjv&lF4\/.S9jX1(Â/+g$IEC/n8G1YkF#KНn&ʆ(쪍*3N"(]וNcq$p 2;>"c(GjUTҪC`<Vn&te%&kNon־m˟6'uţD-.:U˧Y̠ZAeU=(֨ժ?4k%9+Z<'ZQ[xfpFR'Y∾Z)uu$QN./>oUü2 endstream endobj 3013 0 obj 640 endobj 3014 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3012 0 R >> endobj 3015 0 obj << /Length 3016 0 R /Filter /FlateDecode >> stream x͔=k0w!Iז-D!d0vbɔJ)tlO<>av-IRyENcp9bQ ,> endobj 3018 0 obj << /Length 3019 0 R /Filter /FlateDecode >> stream xTn0+.II}kѦ@o*6D:ENnOM$$FrvvmD{!uԎMR1aNo0_q~F&B=xxaGBCiCXE_m!_X)D'{pw5ߩ+Nbk~G-?Sb# b'H_FB=C"|u/G{;S:ݘ٬Uc` bFq }O0P[=c/v<\*6ڮYy)xea#4M bwlvSL)F5㾿jMQuWrw '$Ftsʸ/ᄊD4Jz^٬SVX,!̭tpPre!CQFbF)Z[i̬S^JbyeԽ~R eSo7ʩ ~Pch9 xF c ~bηc(IvЈg;? . endstream endobj 3019 0 obj 553 endobj 3020 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3018 0 R >> endobj 3021 0 obj << /Length 3022 0 R /Filter /FlateDecode >> stream xUM0+9Cnڭ[vW'A*&&Q}mY]b3~~46vqW a|>Px{֥<vqOZ6:ѹy NJ ߜ/.e&&d f~46ZOpwu2K#Dt;yLu^~Tlu cQ3̒eJP &{x.iYeSrEylsk86nVJT<Y8B^ÑA`moYTzj4 ŀD<]i%y~8ʤ++)P'Rcnծ.C&$Eا5og4G{lnr"3P:IÐPxQPi5xXo? d ai 1Zep)/b!d F;5mո$d7mvm: àD35F+Iums1j(}%s-" '_Û_7Vվ endstream endobj 3022 0 obj 605 endobj 3023 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3021 0 R >> endobj 3024 0 obj << /Length 3025 0 R /Filter /FlateDecode >> stream xTAo0Wc{lcskunQvh 'AZ `h~6i-D>sM{4|G1PD> endobj 3027 0 obj << /Length 3028 0 R /Filter /FlateDecode >> stream xUKo0+c+m1綫}H{imUQ$ 4y-D {P"Okd@1[{6t^TȞĺ1ghcbryh33/ewFS{+@ PNB:Jv46-FaZ[f8\uT>!QyHV9F&,]2=U.TEm]ĄKB^5,(瑉9 _+3 -չ)Vyh> HMQA.=lm( <߄ʪ8e 1Ad+El7j> endobj 3030 0 obj << /Length 3031 0 R /Filter /FlateDecode >> stream xVKo0 W&YmiA (N,(iOk )|P| $l*FCTVPa{M펭=vUl෗{~xw]>gvz Ca$ާ!0 ɪg?Ndw:*JJgtoTuO[2gp\HA6ZI8eǑ5 TJJг:Y`R 541pS09{tf +3=?gl)luX鋻*J6 Ipom< )(,)q7/FTN0hDxOG!OwT(/_Ga6>Na-JŁٹE& c|2Y gQL6KtGu͊Ju乂xFu<$.x[LbBB'ڗ5U{b:xՋ*@Q@6W5HE٫BnojVjf_n;dD'$a5 ޣ:0Nr`f׫| ܨIgC~ڐ95 J.E GW4_B0CX=MK2˺" ˢZj9TG?\t/3! x26>ά\h endstream endobj 3031 0 obj 707 endobj 3032 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3030 0 R >> endobj 3033 0 obj << /Length 3034 0 R /Filter /FlateDecode >> stream xUn0wJSm:4Hh!NjM066%nZ>vr(UF!L ; _a7cgm< ~2#{1<xfm%>`7'iCp+b:jWpwjyFh#J y\>@3Oj `5|~> j 6ZMyQ#fk,a^M+K#jy}Qsu%4B jG)DQbLl5oϑM JS5Tu+ \M˵>UO'2Sa$Su^ozق'(ci%4s׼]-,rIŮqvr$Qm>̍ڶ昝m!=sFYl;yW)~y˱R2#_LCDSPZJ[` noG FkR4Pd8Z-.*(cǟMhy⧇UQ%JUk^rV(yOvsxS[GbFLVgI%3i6\Xokd=`q_zbs ~_9mtrń=YUw:} endstream endobj 3034 0 obj 641 endobj 3035 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3033 0 R >> endobj 3036 0 obj << /Length 3037 0 R /Filter /FlateDecode >> stream xUn0+ ;JhS7#zi-"yD2Dw2Pl]qqŁڐ33z" ) {p3֙BV߃I!,i_c A?ɚ2l2Iumfv,eLU:UwԌ &x)K*h/EBr&< jM@ƜEUrx)E—Ȓ$VݯZc{l$f deH;]J7զ\&‡!}.91G$LR4rD> endobj 3039 0 obj << /Length 3040 0 R /Filter /FlateDecode >> stream xUn0+ KRJ血=$AȴLԢ,rѿXܚHI8ᐬ=ߛ c 8ba, ~ QH0']:-jF­˜Nlg~53j^vuSvrj$с|tױN8T PJAus*XԶ~tS5f hp™O)Z.>ʁBNXk32=]"Ϧ|5Y7: V\F+Nro1VNdDQ"зuʎdFF#8I" 3U`tqU묔 g[~=5$ > endobj 3042 0 obj << /Length 3043 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=m:ioQVKZblRu~4$y[ Ql8LJe0xԃL9`a $C,G,CC;V݇sڏ-D~6#DtxA\O !Ciflj`F)^Ol WJWy;i{vgהl'Iqd=)CV`J)=v2ٺʛj5h0 7s~hٓYDӉEv#mPT}Ro+<<+O8]LgDO 6pIRqlܽb)$ *IUaW[z|>\t{6&"R|)Z[FE)0M%5N>tҼKZ -5N*z‰/?T0/J0#U+w)g0Q_ Ӷ7l.EȦQliǸwT XX, ;s]@=tVI*9R.LW L 1ts"k #9zD,:xgWr endstream endobj 3043 0 obj 602 endobj 3044 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3042 0 R >> endobj 3045 0 obj << /Length 3046 0 R /Filter /FlateDecode >> stream xU]o0}WVZk0ۦ}H{<T IF=(>pl B2ȶA=`B4EY8pCbWq{e5OGF"o6<D@ճB Mo4,2EkTZmn!|NOz攽>;ٟ FS# 4cRaA|gՕ)r6z bˍ.se> endobj 3048 0 obj << /Length 3049 0 R /Filter /FlateDecode >> stream xUKo W̱nY޺ڇTuHر!Q'0˶bԽ&.'"ctw(tMI+7zߦ\7( ;KM7(r _10 bGm3|") yk"n/[Upc@.7FC?ٚ.?)O'顐s)}p@gF) {z۲*jS߿Hm^"N8 )ess@7eQJʤbdږh p>.wh!҃[7f )U endstream endobj 3049 0 obj 663 endobj 3050 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3048 0 R >> endobj 3051 0 obj << /Length 3052 0 R /Filter /FlateDecode >> stream xT=o0+nlܳڪԍRĐC߯?6cArݻK5A5w!rX}p9A 31B*$ ܡH ?LޔSkr@y%Rx砗yr%1@0{]k_-5,vѮL{?X0ѥmʔr}|23(MӺX~+cMS" _Q9w:H\OqL4F3ȃq7 endstream endobj 3052 0 obj 311 endobj 3053 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3051 0 R >> endobj 3054 0 obj << /Length 3055 0 R /Filter /FlateDecode >> stream xTMO0WqoV*DrH!ĿgBJ8I^7~d3p%xj @ Y8\p3t3cc8xkf_!XHb˽DG冐_;@6Jŕ1ZC=i%!aut"Mk5DqY' DhR'ysGF˩t4@"䮷:TMADogeḦK.(y6IJtRGLComۤۤyJ +<ϕ+C؞ RɠmQY=RL7:4FpHŶ)/> Eyb]L*$krIdzw,Wڲ6˳+%MN l*OClA& 3dW]/y/Ǚv<d0oV/&~ endstream endobj 3055 0 obj 479 endobj 3056 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3054 0 R >> endobj 3057 0 obj << /Length 3058 0 R /Filter /FlateDecode >> stream xTKo0+{1cZeVmtR)Y `o7l <^< M+BPz/F!d P0 GV Egq==[ɡ9p޻?#ےݖwǮץz떇zbj(bBya(D Njjq{:H(|2s<+m QqGFPy79_&rոդ,lf0[en}ylrf?TU1GCI;E&S˃ZFsgiԂ>$i1. -$w^J(Nm;Wz}twyn q1I>a- vdkօ"N˟W`K endstream endobj 3058 0 obj 453 endobj 3059 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3057 0 R >> endobj 3060 0 obj << /Length 3061 0 R /Filter /FlateDecode >> stream xUMS0W!bPgz&cb9Զm`8=$>kǀu`!9+v1h 0"l `@͈Z%j±wyhxnH'DFa}L_C`|+-2!&>!rkziAv)4 u5$߶8̒u IjUgs$#|ߙd=~ހ.<PFbH М8T (Q$a骘J]/fJ3Ў b8Gq7LSb#{+txa{񮌕.N58&7wiyS[^gp84W# {+亩[*'ۄ:wحm~p.qdYNP޸;NNOR~H΋M BZ[]P=DžM<&QX!gϾXUs=, endstream endobj 3061 0 obj 656 endobj 3062 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3060 0 R >> endobj 3063 0 obj << /Length 3064 0 R /Filter /FlateDecode >> stream xTn0+rH֢ Лk=$AZ#T[(%C-^T$3g ?(a]O#@q1$> endobj 3066 0 obj << /Length 3067 0 R /Filter /FlateDecode >> stream xXmo6_ j$E%߲+2l-؀(dْ#yxeo؇q`sO$F┓|?{>FbNhbprCʡ #vf4i-cV(y7IyW?'3H>BwU%ُ dv8H4$y8Yǫ. YemFj]"_]!QJYN,ۢ*l!bDYwFكLi80]08CMAӬʙ*Bۿd]e^KWr,M,Hg[]ѿHEbqPDI<H.Gh ٘N1s6* (4,uiE&*mx,CS4}h:AI*4N4 k2Emc*[]Unnr'Kc>_"/5/o@Pvt{Y SXQsZb6S!V֌iH[ rU)0\.$F(fyKTݒj0e²\4HϺϾnբ@'*sXψR,.z7_E4U}VgYDQ1 lF8fbRx2d[lk;)沭T循xnR®.qSc'cxMۤ}Z"G~́6kqQ}lgS,kyM&'8HA^ՊCU^ 0;H2Gt]~a K`xG- bshGvu]u |:)#!#p2ղ4`C 1(8š-`(MdyvEѷ3չ]:++mn=Aaa3 `V!A02-阶{ hi.md8hVp1$ :II4hidUա҅/JD\=:h =~hL ƚς AW&x|aB#&6p8lŦ4LK4 ˌ={L=tJÙ+'eח$ /} v b!}ae(| ,4|%J]#.:gΫփQ?ߙi1huA2q`ó|cVoavT endstream endobj 3067 0 obj 1249 endobj 3068 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3066 0 R >> endobj 3069 0 obj << /Length 3070 0 R /Filter /FlateDecode >> stream xVKs0+$Nt2 6S#]I6b=5 Z's}I2y=l}>$ xXHXnEwt=zvtw.'= -g_a,W"),#,!4,K#HI2bS\:O~1IԧAβ,{we-[X}P?3%~bTx9abŁ Aq4x!~;Q jeڳma !#t\_'1JI#8ge,JDF5r ,U]ms[]aЌ8PXVOnڲ݅f{iL$Ͳ[X:Ekt~{‹B]lj:+FH;n7=3b?HH}Tk+!2ރ9H9LP&N9>ҭń_9DBWή=ِRVsֳ]QyP/]/a4%r ]ʪfX0]w`]f#~ 3hsU6;,Ih^[8sk0f ʙ1[:ҋU-`[ f%Z=95@J:xƁQ;ppQ8Y0EcǵPb4|o?})׭yDdӠ":~&+lb?Uy~nToR:foZ-VcuX]w?'0<r{gZw^N=Cuoɳ}$HX9oEAI-e zKylKs0KI ֪~dҬ @#?z`t2ӦEDE:#l_U ' endstream endobj 3070 0 obj 904 endobj 3071 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3069 0 R >> endobj 3072 0 obj << /Length 3073 0 R /Filter /FlateDecode >> stream xUMs0+ $|k39a$al3ؙS0`WOoW5*@qba\"ZQ K>m Q(| %hy`1!B7 S|i"T8uC",SsDlD3J) 8xYeEIL~IF ߙd_3e4Yj^b$P2 E]_fsIm+Ι8I  &a""pDBs55 MSA |t{0Pե5\`gv}n\(颺{-}W4>#xu|[Ǜ4˺L Ѯ;S=$rKHR=b 9dcnTԥoj|h5a½q6߻daq"9Ї}ug p~mݠ?r> endobj 3075 0 obj << /Length 3076 0 R /Filter /FlateDecode >> stream xUMs0+ |k39a$al35L}WSc[zzZ[7(aY=@qba\"yQ? KS76#( ߂'D3Cx p>XLwō:($\*:!&kpsؼ\CZfM `͞ ~ "% Nɫ$զ|$#LE˯]-@_E*\P p(,SQFD^3i1HN8(2bdqMUFx\M5JX;۽ ߎp籫*(*ײy]%V{^90V&2ۙa"$2>Gl& P(tZ?4<9gSThSzeDŽ wG.gS/msr8Dr<šO6zo΀7Go֙]`J?Ϻ*<?36X[Y?y[fcs¾%4`(6>4dԷJz1ş$bѾ6oJKI9FI> endobj 3078 0 obj << /Length 3079 0 R /Filter /FlateDecode >> stream xUMs0+JB [; 3=$cdG`gWm&``WOOO˳ǀyko2νc 9bA\ FQwC76u^Q=/+`g(o=G endstream endobj 3079 0 obj 620 endobj 3080 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3078 0 R >> endobj 3081 0 obj << /Length 3082 0 R /Filter /FlateDecode >> stream xUM0+`[~HeU&5$ISwC~~<<{ (^ Ȉ= B&O맇}^Q=5I[ $s(3>*P$rK\,i*@p™B^nN 19#r ܒdPV)d94yu\YLah^Xf .hH"(䪥}ogI0? 24q;G=t^ul:ADBI8ՌKN;l.K w4Tx)1a#fϺ\hsmq"8 pyǴ 9,=83˦ts@nhnan8hBzN S x%1ŀnIjiC],ui6ҵI}IFu#7 I(m(zdĤ aы'UoF endstream endobj 3082 0 obj 624 endobj 3083 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3081 0 R >> endobj 3084 0 obj << /Length 3085 0 R /Filter /FlateDecode >> stream xUn0+hrDҷ]ޒ! !mPr}vnOM$Ou^$2L$0ɮ~͒MrHTe 'ˌJ5$fV-ږUDB!' wr!̲Ä&Bʡ:s9w/9/SA ~tw4Pե5x67Ҿu;N²484-> endobj 3087 0 obj << /Length 3088 0 R /Filter /FlateDecode >> stream xVKs WLC=c!dT;Hr2][v[cowzPFH*x!L!'#c sW>u(o]"S`9r}WQX_l0R1$R8d\ۢ^C^/a9 HQJY(Ӊն^ESwN-ۓ,dIv97O! /P (q%2RD‰._֪"Χ)I-qJmL~mY VEj9Bc .l My9k2WjӴ48'( XVOܷtlao˞!tB䃞E-%njWU]sfwv8jkǣյ}DI'pBf{aR7=E$b^6ݿ4߆0Jҽ78/ endstream endobj 3088 0 obj 765 endobj 3089 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3087 0 R >> endobj 3090 0 obj << /Length 3091 0 R /Filter /FlateDecode >> stream xUn0+ E)ߺ%CM;B%ʡڪIJM#0\F&ea $B,GVo~FӾm!w60o=+#zÛj}SQt=R%"LDEpHK8 dfe`5{HN(F)eB/Y25ٶ֮P&c]55!rJҨP@8iƩI^]< %HB!' ds Lj"NXn˩A|[1ڈPa?k6k[&.+/Lx2򂙐$)&$bm׽irFcH$1W]r1o;YZyQ;4DDBP]v+qC^ՑĢ 7D]5v>cIƺUNuǿ|:M:6RfrWEƢ殺k0+ pږɜ^ ǜQ„&mϺ^|}nKpikx\%V̧8 >.a<·a0nĮ%{mɈ\meʲ=wNOf''T/زھ:ñ̹#)FC?هǫ&sΕHW+߶1 endstream endobj 3091 0 obj 672 endobj 3092 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3090 0 R >> endobj 3093 0 obj << /Length 3094 0 R /Filter /FlateDecode >> stream xVn0+ KRom =Hc$(ڔCI .\;G3Oͣ9btRRG2j1dfF;a;6(BM)ywӑuJWF!s*5!l+jd= endstream endobj 3094 0 obj 825 endobj 3095 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3093 0 R >> endobj 3096 0 obj << /Length 3097 0 R /Filter /FlateDecode >> stream xUMs0+ |kMgzNICl3N}W|4&`,JOoa@\Fiۓs1s=p*6 KjGi+6pWq~;tM)p>ܺ(NZRk=8'+8CDEAd UU'sEjMC6oW[]^'L'r&f:hvq"mք-MO?t#l,>M]J=6¦ɍgaklhzX+:3@zu[3;/IuE_ߔGS,~C 1m{cU]f endstream endobj 3097 0 obj 619 endobj 3098 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3096 0 R >> endobj 3099 0 obj << /Length 3100 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#Lm_ĸ95cVzzXN5 ޱh!Opۆ׸)w#v}޶5~xwHhLz6Λwōyn}YZԌKe }Dh7weX1r %>6yyX(8Bj@>e}JWeDCa:KԓL |g+~Ւ~U.}+X: 44ThH$9e6eE%xJ/NZbՅ2D}zBd9gʱy9k0wk&y)|nbMj2ݑt`L3JsJ76f")PsA fthLaCqf5p|˨;75!} k7|7Mˎ1@7,%*έ:RD.YFZ(q%X[ C&{ByVlU2E.~h0i:v*LR{xͻs lz݈gnT~c6,UC յ}^Ef`-_+(]!ƛ*n)v!TއΗjƪ/w endstream endobj 3100 0 obj 620 endobj 3101 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3099 0 R >> endobj 3102 0 obj << /Length 3103 0 R /Filter /FlateDecode >> stream xVKs0WaQ%![;m:[wz x ,`CHzir(0}}+c@{n!9 ~4XvR?vEެ =O(|o] ƒuW|>%އd B@JKp}vU\AZ.`)h"6NIQJ/ӑ妜YUHҵQ (c]65&a)-sf\*H?e:t[},r$WC g>= FbQL@?.U8cqJP~$h p@J?v1 zq$(r$ |,L'*!"E,ec'f8BMfgbyqX4R_0Y2G1ÐY$Ic ,F:d0vL$S]~2q5Ki$)o8ҁu %+cLRG]Ý*6] 6WgcC2߾ 3YֶiNuǍ-ำ]ښ@mfI׃=-HrVʴV}6t^[7֫C?(ʶjaP]#ºҵ'ڟWGX]8,$G3'iI8˜'v"=q$mpo1aE% ᓷWf~v endstream endobj 3103 0 obj 752 endobj 3104 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3102 0 R >> endobj 3105 0 obj << /Length 3106 0 R /Filter /FlateDecode >> stream xVKs0WaQ%![;m:[wz x ,`CHzir(0}}+c@{n!9 ~4XvR?vEެ =O(|o] ƒuW|>%އd B@JKp}vU\AZ.`)h"6NIQJ/ӑ妜YUHҵQ (c]65&a)-sf\*H?e:t[}>w$WC g>= FbQL@?.U8cqJP~$h p@J?v1 zq$(r$ |,L'*!"E,ec'f8BMfgbyqX4R_0Y2G1ÐY$Ic ,F:d0vL$S]~2q5Ki$)o8ҁu %+cLRG]Ý*6] 6WgcC2߾ 3YֶiNuǍ-ำ]ښ@mfI׃=-HrVʴV}6t^[7֫C?(ʶjaP]#ºҵ'ڟWGX]8,$G3'iI8˜'v"=q$mpo1aE% ѓWf~\!i endstream endobj 3106 0 obj 752 endobj 3107 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3105 0 R >> endobj 3108 0 obj << /Length 3109 0 R /Filter /FlateDecode >> stream xVKo0+H 5[jҬCSUH#weg)rF1?wyaj=ScAIT}8*~qwe. : }?`iNn1~oފSՍuE=N܉vtɮbM͛kP/NFd8C1iC5C]X44,#^3/'V@gR#|JB k4M$iye2Jixgy"/ VO{i4éحAZ8fԡcoq[r`ؗ{.s v\3g/_xH g?sL98G̪c+ endstream endobj 3109 0 obj 941 endobj 3110 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3108 0 R >> endobj 3111 0 obj << /Length 3112 0 R /Filter /FlateDecode >> stream xVn0+ KQ{nZ1CD,J!I[驭7qƜ>~ׯyEdӡz~G:+mj=Ue9JG7w9 (%t\MNd?EZ&qQPo6qupdճf> endobj 3114 0 obj << /Length 3115 0 R /Filter /FlateDecode >> stream xUKs0+|k0CPmflp;aCm7&`[S{e8("C,KC;-~o[iWΩ;E@KphxAg+#MFa|wC`ZCDpo*/VdI@ef=hF)eB+}6yY'6xD`Qhkl G :T-8P, f\4H2k[HIQs&KR3ca5F!j )l Bݔ /y.IEv1!DQE#D(wu^{UsF#b6&w ,V7Iٿ`"$2jڢA7xi<9 s^̠>Ѭ e غG͂[R њ`i=>:򝫔k'!}1 OeJ@묟w ]x90[[ R2S?~۪ˬ XQ6ǝ7n,^i=~D+}G lK_ՙr*=4Ba.̪{` endstream endobj 3115 0 obj 604 endobj 3116 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3114 0 R >> endobj 3117 0 obj << /Length 3118 0 R /Filter /FlateDecode >> stream xUK0+渑/0֪t#aw$H74I{.$gx0.myn1s=pƋv KjGqvmѮ;'s(|uwiuzF)nvǍ f;HBAp4I0!F@[<DJ3J) 8EVYT&yV&<l|?o& ߘd_=e?Y桪^ba%PcqB0@Lժ*yy^I$' Ts= xv~.a8WshANaZi( ,(a +mQxgQmckpF F=(?<ɰJlpq] .aq?]uYA2g| vH-X&?2h$G5R3N$cv{[^< X {jQs&zrp^{o5" nd@m/.fh(ْ~7GdGu"Vp/IBE!WW+9FZJJ*W.roWVվ# endstream endobj 3118 0 obj 625 endobj 3119 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3117 0 R >> endobj 3120 0 obj << /Length 3121 0 R /Filter /FlateDecode >> stream xUKs0W1eN30Cd-3`نi}W22KhNMl@j)`@񽵃J8d1PD4XwZRbV?S?v ʀ·Ag+#]Fa|(Wgj"T$Ib"xb5(א9ib?ČRʄNGVVm5EU0On:/ewFt񣈫ٰ{@aq>*$IxNZlcjʎ 1HN8H4r2BaK/./]u )؍n[ uSCQu}iaؖƈEIEu*_eګ&g4"$)|OU^ܤyn0IGnwlzoЗ b<< ]__|Ig5ʟ6 v{e+c„G&uboZqqƉxCrxkN 笟;Uuqe/߫t$[Yu- XY5睳 7.[=pH6!=1ڒ%jhX,+<-vmLe2h~}s %]Nů$bSqؤԙo6eU%6 %{zcVo endstream endobj 3121 0 obj 646 endobj 3122 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3120 0 R >> endobj 3123 0 obj << /Length 3124 0 R /Filter /FlateDecode >> stream xUMs0+ $N?fzsLICAL ݜmI۷+)`@u2mc !F%! qشOԷD}g ߃"%D4CT+ܱ3h~[i}?r4A2Vè N2SmU˼G@(q$i ?7a^=~D+aή1d.=ʙ0J%xE~z endstream endobj 3124 0 obj 601 endobj 3125 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3123 0 R >> endobj 3126 0 obj << /Length 3127 0 R /Filter /FlateDecode >> stream xUr0w/ꅄkx$! cflp;~}xbY5ےu'{m8D;hB!+p&v qsfl٧}ڵ D~zGwh^ "]qxVއ>0 -ׄ i |]V;4K b*"``}H"%  NYTyV*ܗjbF ߙd˚_dm@Mj.>5K,y*3NILtY,-~YT͙cHN8(2b (w4T9y-~4%1׵-n*/l 8RPvN8Lє(8,ߗiم30с1-=-1P-~%FMң͆a-L?jȀ 0z޼:w]ʇaKQǭ%_+)F0)o3B% Kqƪ/t{ endstream endobj 3127 0 obj 621 endobj 3128 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3126 0 R >> endobj 3129 0 obj << /Length 3130 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$Bӏion~}Bx'w(|wnizF+nFaPW(re/^]W& h=l~I 2W,:K؄RWmD2w&ٺLGƅeV<JtYR4)LЉN8sQj\+i`K:kܟq.AcZήmf*K }~m43$%[dgy/ӲU'da'JJ<5Wdyrwqxs="(C;w? va^JEF y7R?Zc^)"-}yeDM shKePDQmȤ*UBů ] %sZߔW!`8fzcU endstream endobj 3130 0 obj 637 endobj 3131 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3129 0 R >> endobj 3132 0 obj << /Length 3133 0 R /Filter /FlateDecode >> stream xUr0+2,P,v1 3]$c mȴ_+?4&6 {utt|1x] h=Ac)$\!DѮA5wN݌m=OhO/(|W5[o9!B7 i}QXi&THcL wqX*,0! ="6{!$`R&4p:ɲ>dQY p_ڪI&g-k~9~4]P`/ph48U#hP$1e8f6gI 9Lȸ `r2L0⻣>{s= Gc[B p]`#>l+D3DMNZw˴BAс1>Zzx Z,y߄q\4ٿ0 ۦX$ͪ 8CEitPVxjcO4%TyYpS&|ma#Mg[FEwf:8: >3y]?h@~p&fð5 aTd@^c|=o^.|viCH% (BJ֒Q JEiů$bѶ> endobj 3135 0 obj << /Length 3136 0 R /Filter /FlateDecode >> stream xUr0wԪ^ >ݹLI&C@&`p8ӿOCm&`[X0x/my0s=p6 KjGdgڷ-D'qrwq^6]xgDF!q>o\`6QZ2؋fWוI<8B0}@lqc)(L(te[Qy p_ꪍH&g~͔9~i\P5 (48T!HbjURl]PI`̴ߚb}„Gl_ttotɀq"9v76x0hxi@땡k鏽p|L҃n#kZȈ؞w1OSFGk̋5Q0(`a}I ( Tš긒^(;>D1P2Mɜ)(')WzgLop endstream endobj 3136 0 obj 637 endobj 3137 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3135 0 R >> endobj 3138 0 obj << /Length 3139 0 R /Filter /FlateDecode >> stream xUr0w/ꅄkx$! cflp;~}xbY5ےu'{m8D;hB!+p&v qsfl٧}ڵ D~zGwh^ "]qxVއ>0 -ׄ i |]V;4K b*"``}H"%  NYTyV*ܗjbF ߙd˚_dm@Mj.>5K,y*3NILtY,-~Yd͙cHN8(2b (w4T9y-~4%1׵-n*/l 8RPvN8Lє(8,ߗiم30с1-=-1P-~%FMң͆a-L?jȀ 0z޼:w]ʇaKQǭ%_+)F0)o3B% K}ƪ/ endstream endobj 3139 0 obj 621 endobj 3140 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3138 0 R >> endobj 3141 0 obj << /Length 3142 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏion 8HZ $Xf* P$wjU:aVk(AԠ܇ZA %)} %;΋}}hpBF}H>W=抬"O8aGeh.';Wds_&zvgթI)6.K$jCfoMe)EkA;]F&[/]2 g덀> ,9' Cc7{zeZc/3ZưV*2"?g]ӔhMalc?+# El*XC{@_,"jC&Uq:N(~qj(dο akU> endstream endobj 3142 0 obj 637 endobj 3143 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3141 0 R >> endobj 3144 0 obj << /Length 3145 0 R /Filter /FlateDecode >> stream xUMs0+[; 3=$ 3cؙwj95>kWOOճǀ;c $!};/lcԎشOԵD]g ?£ͻ{@4E< o}W(dާ5F!ZPkU!mSEqB71Ts@lc'QJ$j_$M^5D6M%I&g-[~mrHfr@brʌC%E]}mǼhT'͙]p&Pc\% ! Аs9uG)og5oꦬL XJPĸ5 W6K&HJ0>~khHTZ\Xl"Ӵ꺳`" >e}ďUߚ 3LMBGHb~v֋[y4ks")ݙ3`5_UR0au7gS'Us-8 }x0hY~GYp%>),K')ߦ*emp Vʹܡ8XI! 7TWJHQDL1PƕM\uaѕ-ƪv endstream endobj 3145 0 obj 620 endobj 3146 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3144 0 R >> endobj 3147 0 obj << /Length 3148 0 R /Filter /FlateDecode >> stream xUr0wԪ$kiwi"dȄ givl ^]mc 8b~#GCmy;m ~:Cs{h/NnqDF!u>/>0 v B]O)%}^^&+Rh=ߧ$G$2W,ۦ,*}.s8eIvkl #HE V< .tlJ64@'ʓq™Jb.g1Ns . 1֩6pFCUF'%>2תuB%AIV%{WQB Q R˞^ =6yYwWQ􏫿aO<}&mvG:H_@6zv[婈I 6*jCoMUIIkT7']&[]2gx?M<+X{(hiX@gkOhzL.n+:Ȅ|۞w1O[&GK,ʣ5Eqe~^Q|8n ñPpz|BwѾzb9ۯJNF|}' S endstream endobj 3148 0 obj 636 endobj 3149 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3147 0 R >> endobj 3150 0 obj << /Type /Action /S /GoTo /D [2990 0 R /XYZ 72.0 720.0 null] >> endobj 3151 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 203.44 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3150 0 R /H /I >> endobj 3152 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 709.5 539.999 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3150 0 R /H /I >> endobj 3153 0 obj << /Type /Action /S /GoTo /D [2993 0 R /XYZ 72.0 720.0 null] >> endobj 3154 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 205.66 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3153 0 R /H /I >> endobj 3155 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3153 0 R /H /I >> endobj 3156 0 obj << /Type /Action /S /GoTo /D [2996 0 R /XYZ 72.0 720.0 null] >> endobj 3157 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 231.22 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3156 0 R /H /I >> endobj 3158 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 685.5 540.0 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3156 0 R /H /I >> endobj 3159 0 obj << /Type /Action /S /GoTo /D [2999 0 R /XYZ 72.0 720.0 null] >> endobj 3160 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 202.32 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3159 0 R /H /I >> endobj 3161 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3159 0 R /H /I >> endobj 3162 0 obj << /Type /Action /S /GoTo /D [3002 0 R /XYZ 72.0 720.0 null] >> endobj 3163 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 197.89 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3162 0 R /H /I >> endobj 3164 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3162 0 R /H /I >> endobj 3165 0 obj << /Type /Action /S /GoTo /D [3005 0 R /XYZ 72.0 720.0 null] >> endobj 3166 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 205.65 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3165 0 R /H /I >> endobj 3167 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3165 0 R /H /I >> endobj 3168 0 obj << /Type /Action /S /GoTo /D [3008 0 R /XYZ 72.0 720.0 null] >> endobj 3169 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 195.67 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3168 0 R /H /I >> endobj 3170 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3168 0 R /H /I >> endobj 3171 0 obj << /Type /Action /S /GoTo /D [3011 0 R /XYZ 72.0 720.0 null] >> endobj 3172 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 206.78 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3171 0 R /H /I >> endobj 3173 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3171 0 R /H /I >> endobj 3174 0 obj << /Type /Action /S /GoTo /D [3014 0 R /XYZ 72.0 720.0 null] >> endobj 3175 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 202.88 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3176 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3174 0 R /H /I >> endobj 3177 0 obj << /Type /Action /S /GoTo /D [3017 0 R /XYZ 72.0 720.0 null] >> endobj 3178 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 601.5 231.626 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3177 0 R /H /I >> endobj 3179 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 601.5 539.998 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3177 0 R /H /I >> endobj 3180 0 obj << /Type /Action /S /GoTo /D [3020 0 R /XYZ 72.0 720.0 null] >> endobj 3181 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 216.22 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3180 0 R /H /I >> endobj 3182 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3180 0 R /H /I >> endobj 3183 0 obj << /Type /Action /S /GoTo /D [3023 0 R /XYZ 72.0 720.0 null] >> endobj 3184 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 210.11 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3183 0 R /H /I >> endobj 3185 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3183 0 R /H /I >> endobj 3186 0 obj << /Type /Action /S /GoTo /D [3026 0 R /XYZ 72.0 720.0 null] >> endobj 3187 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 214.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3186 0 R /H /I >> endobj 3188 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3186 0 R /H /I >> endobj 3189 0 obj << /Type /Action /S /GoTo /D [3029 0 R /XYZ 72.0 720.0 null] >> endobj 3190 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 233.44 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3191 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3189 0 R /H /I >> endobj 3192 0 obj << /Type /Action /S /GoTo /D [3032 0 R /XYZ 72.0 720.0 null] >> endobj 3193 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 220.67 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3192 0 R /H /I >> endobj 3194 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3192 0 R /H /I >> endobj 3195 0 obj << /Type /Action /S /GoTo /D [3035 0 R /XYZ 72.0 720.0 null] >> endobj 3196 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 252.88 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3195 0 R /H /I >> endobj 3197 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3195 0 R /H /I >> endobj 3198 0 obj << /Type /Action /S /GoTo /D [3038 0 R /XYZ 72.0 720.0 null] >> endobj 3199 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 219.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3198 0 R /H /I >> endobj 3200 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3198 0 R /H /I >> endobj 3201 0 obj << /Type /Action /S /GoTo /D [3041 0 R /XYZ 72.0 720.0 null] >> endobj 3202 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 245.67 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3203 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 505.5 539.998 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3201 0 R /H /I >> endobj 3204 0 obj << /Type /Action /S /GoTo /D [3044 0 R /XYZ 72.0 720.0 null] >> endobj 3205 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 242.34 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3206 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 493.5 540.0 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3204 0 R /H /I >> endobj 3207 0 obj << /Type /Action /S /GoTo /D [3047 0 R /XYZ 72.0 720.0 null] >> endobj 3208 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 277.88 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3209 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3207 0 R /H /I >> endobj 3210 0 obj << /Type /Action /S /GoTo /D [3050 0 R /XYZ 72.0 720.0 null] >> endobj 3211 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 241.78 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3212 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3210 0 R /H /I >> endobj 3213 0 obj << /Type /Action /S /GoTo /D [3053 0 R /XYZ 72.0 720.0 null] >> endobj 3214 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 457.5 240.43 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3213 0 R /H /I >> endobj 3215 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 457.5 539.998 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3213 0 R /H /I >> endobj 3216 0 obj << /Type /Action /S /GoTo /D [3056 0 R /XYZ 72.0 720.0 null] >> endobj 3217 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 211.22 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3216 0 R /H /I >> endobj 3218 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3216 0 R /H /I >> endobj 3219 0 obj << /Type /Action /S /GoTo /D [3059 0 R /XYZ 72.0 720.0 null] >> endobj 3220 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 433.5 309.778 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3219 0 R /H /I >> endobj 3221 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 433.5 539.998 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3219 0 R /H /I >> endobj 3222 0 obj << /Type /Action /S /GoTo /D [3062 0 R /XYZ 72.0 720.0 null] >> endobj 3223 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 255.1 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3224 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3222 0 R /H /I >> endobj 3225 0 obj << /Type /Action /S /GoTo /D [3065 0 R /XYZ 72.0 720.0 null] >> endobj 3226 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 232.32 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3225 0 R /H /I >> endobj 3227 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3225 0 R /H /I >> endobj 3228 0 obj << /Type /Action /S /GoTo /D [3068 0 R /XYZ 72.0 720.0 null] >> endobj 3229 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 269.53 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3228 0 R /H /I >> endobj 3230 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 397.5 539.998 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3228 0 R /H /I >> endobj 3231 0 obj << /Type /Action /S /GoTo /D [3071 0 R /XYZ 72.0 720.0 null] >> endobj 3232 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 293.96 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3233 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3231 0 R /H /I >> endobj 3234 0 obj << /Type /Action /S /GoTo /D [3074 0 R /XYZ 72.0 720.0 null] >> endobj 3235 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 230.09 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3236 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 373.5 540.0 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3234 0 R /H /I >> endobj 3237 0 obj << /Type /Action /S /GoTo /D [3077 0 R /XYZ 72.0 720.0 null] >> endobj 3238 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 223.44 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3239 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3237 0 R /H /I >> endobj 3240 0 obj << /Type /Action /S /GoTo /D [3080 0 R /XYZ 72.0 720.0 null] >> endobj 3241 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 230.66 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3242 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3240 0 R /H /I >> endobj 3243 0 obj << /Type /Action /S /GoTo /D [3083 0 R /XYZ 72.0 720.0 null] >> endobj 3244 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 241.21 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3243 0 R /H /I >> endobj 3245 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 337.5 539.998 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3243 0 R /H /I >> endobj 3246 0 obj << /Type /Action /S /GoTo /D [3086 0 R /XYZ 72.0 720.0 null] >> endobj 3247 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 232.88 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3248 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3246 0 R /H /I >> endobj 3249 0 obj << /Type /Action /S /GoTo /D [3089 0 R /XYZ 72.0 720.0 null] >> endobj 3250 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 235.66 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3249 0 R /H /I >> endobj 3251 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 313.5 540.0 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3249 0 R /H /I >> endobj 3252 0 obj << /Type /Action /S /GoTo /D [3092 0 R /XYZ 72.0 720.0 null] >> endobj 3253 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 245.66 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3254 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 301.5 539.999 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3252 0 R /H /I >> endobj 3255 0 obj << /Type /Action /S /GoTo /D [3095 0 R /XYZ 72.0 720.0 null] >> endobj 3256 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 267.88 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3257 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3255 0 R /H /I >> endobj 3258 0 obj << /Type /Action /S /GoTo /D [3098 0 R /XYZ 72.0 720.0 null] >> endobj 3259 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 293.99 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3258 0 R /H /I >> endobj 3260 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3258 0 R /H /I >> endobj 3261 0 obj << /Type /Action /S /GoTo /D [3101 0 R /XYZ 72.0 720.0 null] >> endobj 3262 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 293.99 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3263 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3261 0 R /H /I >> endobj 3264 0 obj << /Type /Action /S /GoTo /D [3104 0 R /XYZ 72.0 720.0 null] >> endobj 3265 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 261.77 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3266 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3264 0 R /H /I >> endobj 3267 0 obj << /Type /Action /S /GoTo /D [3107 0 R /XYZ 72.0 720.0 null] >> endobj 3268 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 261.77 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3269 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 241.5 539.998 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3267 0 R /H /I >> endobj 3270 0 obj << /Type /Action /S /GoTo /D [3110 0 R /XYZ 72.0 720.0 null] >> endobj 3271 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 261.2 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3270 0 R /H /I >> endobj 3272 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3270 0 R /H /I >> endobj 3273 0 obj << /Type /Action /S /GoTo /D [3113 0 R /XYZ 72.0 720.0 null] >> endobj 3274 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 285.63 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3273 0 R /H /I >> endobj 3275 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 217.5 539.998 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3273 0 R /H /I >> endobj 3276 0 obj << /Type /Action /S /GoTo /D [3116 0 R /XYZ 72.0 720.0 null] >> endobj 3277 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 221.76 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3278 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3276 0 R /H /I >> endobj 3279 0 obj << /Type /Action /S /GoTo /D [3119 0 R /XYZ 72.0 720.0 null] >> endobj 3280 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 246.19 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3281 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3279 0 R /H /I >> endobj 3282 0 obj << /Type /Action /S /GoTo /D [3122 0 R /XYZ 72.0 720.0 null] >> endobj 3283 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 246.75 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3282 0 R /H /I >> endobj 3284 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3282 0 R /H /I >> endobj 3285 0 obj << /Type /Action /S /GoTo /D [3125 0 R /XYZ 72.0 720.0 null] >> endobj 3286 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 215.11 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3287 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3285 0 R /H /I >> endobj 3288 0 obj << /Type /Action /S /GoTo /D [3128 0 R /XYZ 72.0 720.0 null] >> endobj 3289 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 225.11 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3290 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3288 0 R /H /I >> endobj 3291 0 obj << /Type /Action /S /GoTo /D [3131 0 R /XYZ 72.0 720.0 null] >> endobj 3292 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 249.54 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3293 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3291 0 R /H /I >> endobj 3294 0 obj << /Type /Action /S /GoTo /D [3134 0 R /XYZ 72.0 720.0 null] >> endobj 3295 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 225.11 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3296 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3294 0 R /H /I >> endobj 3297 0 obj << /Type /Action /S /GoTo /D [3137 0 R /XYZ 72.0 720.0 null] >> endobj 3298 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 249.54 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3297 0 R /H /I >> endobj 3299 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3297 0 R /H /I >> endobj 3300 0 obj << /Type /Action /S /GoTo /D [3140 0 R /XYZ 72.0 720.0 null] >> endobj 3301 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 225.11 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3302 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3300 0 R /H /I >> endobj 3303 0 obj << /Type /Action /S /GoTo /D [3143 0 R /XYZ 72.0 720.0 null] >> endobj 3304 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 249.54 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3303 0 R /H /I >> endobj 3305 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3303 0 R /H /I >> endobj 3306 0 obj << /Type /Action /S /GoTo /D [3146 0 R /XYZ 72.0 720.0 null] >> endobj 3307 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 220.11 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3306 0 R /H /I >> endobj 3308 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3306 0 R /H /I >> endobj 3309 0 obj << /Type /Action /S /GoTo /D [3149 0 R /XYZ 72.0 720.0 null] >> endobj 3310 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 244.54 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3309 0 R /H /I >> endobj 3311 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3309 0 R /H /I >> endobj 3312 0 obj << /Length 3313 0 R /Filter /FlateDecode >> stream xO$Ǚ=?E/gjg?/  ܅,^ Dْ#5fVTɮ";)C|+2W~~gy_;_*Cgm|]ß>w߭ݱ|O:~?_x_}뫿~?|Ͼx_R_ǫҖcxeʫ_7{uϏo?o߾}yӛ}_?Tn_~~/?_?ۏOK?|y[ޒqM q-WXv"E!CN X,r`9A,K*U6l"D`.]"8Ep q`  q` `*!!!)))UV"D`.]"8Dp)<@0IsO'isq8?[?{o y*>N.AuzJ] ՕjldȲe'N,;Yd9r$)Q-,r%Xc.b’,,,,,,,,+YV7y ՍTՍ)u/TW:&I,'YN\GdI-,O\dI-,r%5YYYY&Y&Y&YVdYɲe#F,;Yvd9r A,'YN\ghI--O\hI-$-X& $$$Q=ljz/W&rͷo&auO86;**xu~`.]"8Dp)f x?3k;>A~b~ c```````*U6l"D`.C"8EpX1ޏڎO80XCCCSSSSV"D`.]v"8Dp)g^ x?j?yW1Oڎ ϺڏE0D0DPf2)3LLy졮GyU~eTe<3yuzH}?xN렚,+Y6ldȲe'N,Yd9rre9IJbYN,XS,)e)bY YYYY&Y&Y&Y&YVd-]wnr ꤺKȠSuUu,'YNbXФuԧXФubNC:222222ɲe%J,Y6ldɲe'A,YNd9r: Mj\A}: Mj\I-4422222IsOgN#'aOa\[c<܇4OG@^-O<-j$7fTvS:Lu0iTNR]7jRNfMOR]7lRNMIuݸIVSZMj3fTvS:Lu0aTNR]zRNvOOR]|RNO [?)70004444jT6SmLj7nTS:Mu$Q6Ҏ3j|I(yZ)_7J7'TNRS(9*$}B -TTTTTTTTVSLj3nTvS:Lu4iT ]CORy(9=TwBZMj5fT6SM0aTNS:I~[z1T&JN%'퉒jjjjj.>G$G7}z Y}}=,˛V,iyZnTS:Mu$5TKTrR], ZMj5fTvSM0aTNS&X`QNkE9 TrS S S S SMSMSMSZMj3fTvSMu0aTNS&X`I~`QNkE9 6-=TOWG7~z0:_v>WNyIy+WTvS:Lu0iT'夺bbꚊI^HuM(70004444jTMsԨ;y;-O;<,oOGZnTNR]S1IuM('5TTLBk*FVSZMj3fTvS:Lu0iTNR]S1IuM$?IuM('5TTrS S S SMSMS]ST?߼{K/zo[UnU}jV[U۪NZckڏ[k?~nYr}9v־;k_Ν/ڗsgKYRv־/ekckckcksksksk׭[k_־m}Z}k[k?~lZskDZq};kǹq};keg}ϭϭϭϭ[k_־n}Zmk[k߷~lZskϝcgYsgYgY,[k[k[k[k[k[ku]{yc^y?7=\7|}xNy?,˛Q,iNR]OT('D1Iu=SLBbjjjjjjjj5jT6SmLj7nTS:Mu$1Iu=qLT3('1Iu=wrS S S SMSMSMSZMj5fTvSMu0aTNSHF9GI~z(夺K&y!`2M5L5L5L5M5M5M2yy<͹v T޹}x:UMN:UMY>)_I^-S:Lu4iTS('T.OR]O墜TS('T.M5L5L5L5M5M5Mj5UHVF>)_'K^-%O;~rS:Mu$T.Iu=KTS('T. rQnaaaiiiiTVSmLj7nTS:Lu4I\z*夺E9rI^Hu=rS S S S SMSMS zOR㷎h~}w}8t؇yK4'嗧n!y<v#O;嗧nZNR-'Bj)ZMj5fTvSM0aTNSAqj'IqjRBQL5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu:arR]'H~:arR]'PNM5L5L5L5M5M2xYK||q.klUm;U{籪[ةUVwckڏ[k?~}9v־;k_/ڗsg˹YRv־/ekckckcksksksksk׭[k߶־m}Z}k[k?~lZsgoU};kǹq};keg}ϭϭϭ[k_־n}Zmk?Vckڏ[k?~nYVYVKjgo[?bg?kbC<^NGZ>(iy|R:CT!:rR]pHZMj}l#oay|RދA8-OMu4iT!:CT!:rR]pPnaaaiiiTVSLj3nTS:Lu4iT '_ofqE[>㈤Y>)j|]O2IuMT('OCNk"y!OZMj5fT6SM0aTNS:IuMT('5Q$5QTDrR]M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuꚨPNk"IkB9TDrS S S SMSMSMS][Mz'L`᧷?/o._ܢbiyG;yX,h'jjjj5jT6SmLj7nTS:Mu$8H5RT$8I5NRTjRbaaaiiiiTVSmLj7nTS:Lu4IyjAyj'f!,TTTTTTT_b׳=F>\~d^^1[^/m=A8-O;<,oO*('5O$5OT.jnx 鿿yˇ~>~qҞ5'iy|=ZY>)_Z>$_᠜TC8$?Iu=rR]ᐼzZMj5fTvSM0aTNSzrR]᠜TC8(' pPnaaaaiiiTVSmLj3nTS:Lu4iTC8('OR]᠜TC8('M5L5L5L5M5MrVC^'+Ko$-5)>-A[iy䔇Iy7nTS:Mu4Ik;夺#I~ڎD9HڎDVSZMj3fTvS:Lu0aTNR]ۑ('յITv$IumGڎDVSZMj3fTvS:Lu0iT'HڎD9Hڎ$y!յrS S S S SRl!Ƨc.{k?w˟y/ݛo~ooy/>}r{xKzj ˛&_ȫk8κS~ yX,7B^-7iT'AqjIqjTjS S S S SMSMSMSZMj3fTvSMu0aTNSAyj'IYH5 f!,zلr| k: o?}>uy<֣^/n,TW>.yPT"2222222ɲe%J,Y6dɲe'A,YNd9rM5?Z,@j\XɁddddddddYɲe%F,Y6dɲ A,'YNd9r55Z,d@j\s22222r=o⡪|ܟsg#ȸ.pg/p'2Azdiy|=2NrS:IuTAk=夺K^HuT>zTTTTTTVSZMj3fTvS:Lu0iT'}G/Ik=夺K^HuTTTTTTTTVSLj3nTvS:Lu4iT>zIuT>zIuGOxRRLtP2޿77?Ƿvn_Zqk=^HI,ʫ?Y0000444jT6SmLj7nTS:Mu4IqjJ~j'rRB_)]=R^-߮)7㬷Yl;Y>)]=R^-߮)OMu4iT#夺%?Iu]=RN{ 夺)7000444jTVSmLj7nTS:Lu4IrR]W)'u(y!uH<,1%\=?\=~7_.|}BE>yϿ~X7'X^-OS:Iu#T>Iu#T> IZMj5fT6SM0aTNS:IuM('5 $5 T$rR] M5L5L5L5M5M5Mj5jT6SmMj7aTS:MuQNk$IkD9IT$rS S S SMSMSMS]ZP1z@yKas%˛aɫaMu4iT'$('u'$('u夺TTTTTTTVSZMj3fTvS:Lu0iT'$('u'$('uTajjjjjjjj5jT6SmMj7nTS:Mu:LrR]IPN0 Iu&!y!uKU-t.DŽ<\mݷ=yMZ);Y>);j|4Ik{夺QNk{夺I^Hum/TTTTTTTTVSLj3fTvS:Lu4iT'E^$Ik{夺QNk{ZMj5jT6SM0aTNS:Ium/T"OR]ۋ('յHBk{@U-h|4ѿ}Ƿ~p.5+^q0R-~p<-~p<,oOFIum$յrR]i('յrS S S SMSMSMSZMs9~?x#~pZ>(LyZ):Lu4Ik# 夺6H~HC94R]i(70004444jT6SmLj7nTS:Mu$յrR]i('յrR]i$/6Pnaaaaii^ZƓq?wlx="xY>)j|yXnT'夺f;f;PNkCVSZMj3fTvS:Lu0aTNR]Iuv$?Iuv('5ۑPnaaaiiiiTVSmLj7nTS:Lu4IkC9夺f;H^Huv(7000044յG桪e>t~/t>~x6v_ِF;wj<-ܹ:IZR-TI$RHR-TK1000444jTVSmLj7nTS:Lu4IqjIqj'F!(TTTTTTTTVSLj3nTvS:Lu4iT (l#O˻#^vT/Gl'^xIrNN#^60000444jT6SmLj7nTS:Mu4I#^vrR񲑟z9e''/;9^xM5L5L5L5M5M5Mj5jT6SmMj7aTS:Mu列T/Gl'^xIrF^HrNnaaaiii/%8HLj䇟_<-_I;yTTTTTTTTVSLj3nTvS:Lu4iT 8H5RT$8I5NRBQH5VSZMj3fTvS:Lu0iTNR̓T ^vo)˛,WoͣN~OyX,߾S^-߾S4iT'7y)'&'7y)'&/夺TTTTTTTVSZMj3fTvS:Lu0iT'7y)'&'7y)'&TכjjjjjjMއFLJ+F7'嗫ǍZ>(\=nzzr~zfrW嗫Ǎ<-7iTNR^=nzzr~q#'FN׫ǍTTTTTTTVSZMj3fTvS:Lu0iT'^7rR^=~9?Izy!FnaaaiiiLJF>zlG=}zO'/xq|HSwoS7'TcM5L5L5L5M5M5M5Mj5zSm>ǹSf|˫:Mu$յrR])'յrR]%/SnaaaaiiiTVSmLj3nTS:Lu4iTcIu?$յrR])'յrS S S SMSMS}(ǼF}2 G={: xxlC0`#O;aF7'TÀTTTTTTTTVS _yZ) 6Y>) 6jNS:I: I: I: I: r^H: M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Muuu$0`#'0`#'0`#7000440!k0~~|W+y䕞(Yiy<,˛Bk@VSZrYʹSf|˫:Mu$5 T,rR]Iu$/fjjjjjjjj5jT6SmLj7nTS:Mu$5 T,@T,rR]Iu(700044]y8 ǯP8 xret|=2|b/y|P<-C%M5Mj5jT6SMj7aTNS:Iu]RNʔrR]W22TTTTTTTTVSLj3fTvS:Lu4iT'+SIu]J~2Tו)夺L)700044՗R?5Ɠ+ۏoُ?R\_3>εUA*yZ)__%˛aTNS:Iu=wrR]]Ts)'u C)70000444jT_og;}+ay|R~ y|P~ yZnTNSAqj'IQH5 F!(ZMj5jT6SM0aTNS:IuH9C%?IuH9C%/UTTTTTTTk2?qlpnk0p- 7eY2,M{ʭ0vebW&verW&werW&weLݕ2mWʴ]+weLߕ2cWf]+37eؔ nρ Mُ{ǽpS~V2+2+2+2uW]+veڮLە2}Wʌ]+3veܕ2sS~^)s?Aq+<7e&2M{LĮLLʬهj߼}j덷vi}?\׭7 _oI^-7$O;7rS:Lu0iT';T('u 夺PT*R]wPnaaaaiiiT7ގ9G7$˛ƛAzMTNS:IuݡB9;T$?IuݡB9;T('u ZMj5jT6SM0aTNS:IuݡB9;T$?IuݡB9;T$/PTTTTTTT_Aku!K󇂜+<&X^-S>rS:Mu$>vOR#9ovM5L5L5L5M5M5M5Mj5vZwayX,byTNSoT@~vI~z0000444jT6SmLj7nTS:Mu4IyjIyjTjRbaaaiikCU3Nٽm2֌2γI,WˇkxAyZ)?Iu /('5^PnaaaiiiiT֛j1j<-Y>)jNS:Iu /('5TrR] ZMj5fT6SM0aTNS:Iu /('5$5TrR] M5L5L5L5M5M!O 糾{1>,s M/_/^6je#O;M/yXnTNSzu˗T^6rRnzr^He#70004444jT/^_6liye#˛˦ZnTNRT^6rRnzr~uFNM/9^7|9S S S SMSMSMSZMj3fTvSMu0aTNSzu˗T^6rRnzIe#700044յ塪Yθ66<γIeF^-_7liy$릗T^RnzM5L5L5L5M5M5M5Mj5˦/M/yZ)lzfe#4iT 릗T^zuFNM/_TTTTTTTVSLj3fTvS:Lu4iT'^7lz$릗T^6rRnzM5L5L5L5M5M!-jǗ6nolzy|^6^vj妗<-:Lu4IM/;9^6l'^6zRlzM5L5L5L5M5M5M5Mj5՗^6^vSrN7'/7rS:MujzeF~eNNM/;9^6laaaaiiiTVSmLj3nTS:Lu4iT/^vrRlzORlzIe''˦TTTTTTk)e'4iT ˦T/^6T/^vrRlzIe#S S S SMSMSMSZMj3fTvSMu0aTNSzeF~eNNM/;9^6rc^s(:Lu4iT'TA rj9IZ Bj)ZMˇYɫYNˇaS:MujAqj'IQH5 F10004444jT6SmLj7nTS:Mu$J嗏woa?̳<-Y>%_#IuH$?IuH('5"T׈rS S S SMSMSMSZM|e#by|PON8,Mu4iT׈rR]#OR]#IuH$/F$jjjjjjjj5jT6SmMj7nTS:MujAyj'IYH5 f1000044ˈ! ~_}}/ʫozOxn/ǎץ>v߿/`?ӇϯWo__nէp^~G՟O_K}u^ntg)_z=\Oݻ _yi endstream endobj 3313 0 obj 14780 endobj 3314 0 obj [ 3151 0 R 3152 0 R 3154 0 R 3155 0 R 3157 0 R 3158 0 R 3160 0 R 3161 0 R 3163 0 R 3164 0 R 3166 0 R 3167 0 R 3169 0 R 3170 0 R 3172 0 R 3173 0 R 3175 0 R 3176 0 R 3178 0 R 3179 0 R 3181 0 R 3182 0 R 3184 0 R 3185 0 R 3187 0 R 3188 0 R 3190 0 R 3191 0 R 3193 0 R 3194 0 R 3196 0 R 3197 0 R 3199 0 R 3200 0 R 3202 0 R 3203 0 R 3205 0 R 3206 0 R 3208 0 R 3209 0 R 3211 0 R 3212 0 R 3214 0 R 3215 0 R 3217 0 R 3218 0 R 3220 0 R 3221 0 R 3223 0 R 3224 0 R 3226 0 R 3227 0 R 3229 0 R 3230 0 R 3232 0 R 3233 0 R 3235 0 R 3236 0 R 3238 0 R 3239 0 R 3241 0 R 3242 0 R 3244 0 R 3245 0 R 3247 0 R 3248 0 R 3250 0 R 3251 0 R 3253 0 R 3254 0 R 3256 0 R 3257 0 R 3259 0 R 3260 0 R 3262 0 R 3263 0 R 3265 0 R 3266 0 R 3268 0 R 3269 0 R 3271 0 R 3272 0 R 3274 0 R 3275 0 R 3277 0 R 3278 0 R 3280 0 R 3281 0 R 3283 0 R 3284 0 R 3286 0 R 3287 0 R 3289 0 R 3290 0 R 3292 0 R 3293 0 R 3295 0 R 3296 0 R 3298 0 R 3299 0 R 3301 0 R 3302 0 R 3304 0 R 3305 0 R 3307 0 R 3308 0 R 3310 0 R 3311 0 R ] endobj 3315 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3314 0 R /Contents 3312 0 R >> endobj 3316 0 obj << /Length 3317 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏioi!d(3w7v{j%=kWOoWgwmps1\1.nh `vF̞i߶;Op 8ƹ^o1tQ\ <pwW7IDyITE`4!bRJte[qy at(u~g1ɮ~͒MrHd<eV9J]ԥ6i^=jc s"TB3ƽ\t1c1(?s.%Ѧ.1;Wcʪ0:A,(QVl,o]ʋCipB F}H>W)|*l"_EIuW'\0};̮ t jgcNYTOzX,*NroM(EkA']&=ؔgq"8i86xW А0hSaZ(q|fdDmp觩c#~b(qgM IkKePqmȬ Beů ]Uq^_[MZFD^>}- endstream endobj 3317 0 obj 625 endobj 3318 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3316 0 R >> endobj 3319 0 obj << /Length 3320 0 R /Filter /FlateDecode >> stream xUM0Wq9k;H=,UH DuP;Np )=u7l?<3ǀ{o!9d[1h0"YQ `{OM;O]Auo9!Ν3|f#"]q>%އ!0 $-2!&>l6^As:P{&O|?9 3J)p:ltV Iw;/@2w&٬׆lG6 g<-K[ &8U (Q$tT<~>Fw\ة |r04>朋|ѥ03C>4 4*G,vib||"(" SK_UELH0ݔz5Ktɿ0?$eGͪ*]d6$QgH`v6}/Yku&X.ݡS`Xܾb-qLo d⳪2Sl18 8m8wcNI<,-W׷\K74AV^~. &4~+Su^:֓?9iiabQ2`EcM8< mZŦ1 w D )|B0a@o#~BcqXߔMXFI<_XU ) endstream endobj 3320 0 obj 649 endobj 3321 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3319 0 R >> endobj 3322 0 obj << /Length 3323 0 R /Filter /FlateDecode >> stream xVKs0+HN3=t&gz34"4+^j9516h?>$ (^!.0b!­S=nBolGP7GzǫrF)n6esr}KBE$@ٕ3E!O] F#[!H(LHte/3WTeZ[ZOˉd7&eïI ǯ$M^NP6 H,αU"Hbje=2Kj8ya\%(wr smh )4һ*s(JLi?p|ș 8 +eUI"U\u3po4M\ )z"7Nn 40+\9YOΠ:z$ZpU4.kS^0N" 6Gm3SԾR+/8 9.⨟mU)p4dv[lAoyMjV2sOT}Yf!saNV4[|s&VMK[> endobj 3325 0 obj << /Length 3326 0 R /Filter /FlateDecode >> stream xVn0+h CR{n-=Hc8ڢBR گPTͩd['fÀ}aa!=8- SppƋv^Pc_il 5v) ;D3}xv:zF*nλsFa!qCD\ۋb IA@@(peEemsw6Gfp;[0=$s Z 1j?;hF> endobj 3328 0 obj << /Length 3329 0 R /Filter /FlateDecode >> stream xVKo0 W {; `([I%+-_?ʲsIL"E}aI {͇A(yԎصe?~zGw{LF$qlI]Zw&iL$Ͳ(NYrƋB9qo0~X]jEe4eN8ō` ~6kNy8 l5<vHZ+&0s9> 5sИHpOG7 7,nhrW\%9(|6壨t.28}]ԶJyVIsȜ瘸\ĸ!=ؘNMr! _׼5jPaX!PJwi!2ʢAʹU1dxmiDk0EKh;o-t\݆_RcƢM]Ke`%[Ѫ4}om|(CÎBzcw! 6?9=S<O(^<ߘU{du endstream endobj 3329 0 obj 762 endobj 3330 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3328 0 R >> endobj 3331 0 obj << /Length 3332 0 R /Filter /FlateDecode >> stream xUKs0W1aYv3=$k 2d_ߕ_`hNMl@ӧ)`@2ma !&#!֋ ԏ4Oo[5|— q Aw "Mq >xy+BEh4Cʋ$EYR'PY#_AhF)eB(}yY8u)I&c-~͔Mr(db@arʌCE].N3j9Lȸ`3L0Bʿ#> endobj 3334 0 obj << /Length 3335 0 R /Filter /FlateDecode >> stream xUK0+渑!V}Պ Ȫc$Sw!/7'wipS1P7􀻄K+5.ֳ}ڵ D~:Cshgq:Q97/v+B/'9milaC!>!xQJP˶ʢ2ɳ6ecy3L0$[%Q4U  +ˌS$fVUcMMЙr}p9L n`KLJ*~9WshAB,´P1$XFPHw! mQxgQmcipF F=(?< Jlwq]L 2:+{> !0j; Y{=R]P`4oM~h|0aqfOLrs-8xeü%xvj!臖0 .9l>kF2 ߶\S~"QajɯT##;QkT$M!ʐI kt"_9Fۊ V*&r)I.C} endstream endobj 3335 0 obj 628 endobj 3336 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3334 0 R >> endobj 3337 0 obj << /Length 3338 0 R /Filter /FlateDecode >> stream xUM0Wq9k;H=,UH DuP;vH )=u7l?<7ǀ{o8[1h0"ZѮA67OhYO(|:o6"B7 +S}/OrA(d\هCǻ ",0Gl QJ/ӑeSu^ɮuk%H3$9~nI?, P8طLsq@PHH鴩y֥)Z.*p™Jfn{Qpoi Fo7s e?d$V}i4TuityT$ݎ|6SFJ(c*]W QB*qydH,V$L۝ CP)|Ѭ.'T$x摳^ dQp`誂N;U|i+v#%a'P"u|gVqI`]1<Ƕ뷔Q I[{]#ޛ~o@z`L6e?8_niIb54ǖJtx(eSP-| "Y'.)|B/7a@oԛ#~BcrXߔNXFOa(^Io}P endstream endobj 3338 0 obj 651 endobj 3339 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3337 0 R >> endobj 3340 0 obj << /Length 3341 0 R /Filter /FlateDecode >> stream xVKo0 WX5=Ro[vk`(DM v*;-GI~aIIGJ~ P!y$D> endobj 3343 0 obj << /Length 3344 0 R /Filter /FlateDecode >> stream xVn0+VHXZ(֦ [R=Aڴ-INڿ/&a#pGa"F!L&'@#Dcmv^m4[;{mLlG _{m]j{ ρ :~nD :8 `zh)C88i ) )7 &2Skj KQ (6'm[$PJ0$d@eW:+T3d|?F1nl~vI+@ YތuȬ840-!z*FA =\,* ra*J!PK9<~H44a9w9 ٓTj]o`U9ډlk 45q=tFItXߪUYպ#pqr9F@\|"j[|K8B/}q Yyn'L^2baIڇrϥuŇE$;iZ?Ir̥=`"Ȫh3aװy>'NN&t0߬_Y[ iM rOne)Qe̴pwe2ўE JeվT·dVw5'm dO"yq'Y-lg6& (ZT?e(ɭͬ &npwt닾Rn ec+ͩ e=(K b9zJ,P3>,&)JC՝X,t2Dmji<\Mjq38r#7=Gn8r}w9CqA ϯIqpl#PA5lkF&t8g^􍽷c\psk}U9}dƅ`.qO_U7 endstream endobj 3344 0 obj 847 endobj 3345 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3343 0 R >> endobj 3346 0 obj << /Length 3347 0 R /Filter /FlateDecode >> stream xUn0+ M[w4r@i[D9Z;DRl7&mc>`@=J8,ྷ1PD460. yQߠ6ߧLwp+tyǫr+l6y{|L-W $IBLOa^USefY*mR4f0$fR&p:Yeݚeyu~(3.> G˱3 KBqӌS$ILxhk]Վ;sgu=M2&cp&okւIREK\l:ħW' ]C5lm fla]XhPҥ{[LRD z->rWgwMhD'I>YUuff17*&B")Ci6mM3BPp b]gsZAFE|('doW"≍%?Te`ʺGjj߿sE- endstream endobj 3347 0 obj 683 endobj 3348 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3346 0 R >> endobj 3349 0 obj << /Length 3350 0 R /Filter /FlateDecode >> stream xXKo6WJQܶCi ^DlcSߔ,{̈ǙOV^! <,^-DAQ:6IH Eb^elʄC/{*q|Z̤B 2hNfX .CN̟_gBi$ apÎ MN+'ZMk/"svHՀ6ms@(i̮"EL`pȕ&<՝q-f)HI-^ZU%s$,yؚ l&58 bp`i9LrM,D1(s.yDuo3$x{"$ :[/?a8 qPkXěaG=k5p$ʠ']IhIFK*OlXZ%d%')Q;4z endstream endobj 3350 0 obj 1228 endobj 3351 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3349 0 R >> endobj 3352 0 obj << /Length 3353 0 R /Filter /FlateDecode >> stream xVY6~ׯJR(ЦзM !\Zc%i_̘spo(~ (ܫGV0(QD鹉&)8d q4'jQ=82 {#ZhO50qVj#~^%ލeYH(<aWE[ՃŒ( j':Y Ml47QC/3Q9q!W56R›47VM\2hC٨QcF\lvIx:o5> %1qѪ^ma4{noɯZw\nI]$宪?A endstream endobj 3353 0 obj 970 endobj 3354 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3352 0 R >> endobj 3355 0 obj << /Length 3356 0 R /Filter /FlateDecode >> stream xUn0+r)͍ Peő]Hy G{ir3hBM!+pƋv KjGnOhy_^Q!E܇?^s3"]q>m|`6AZ 2 ڋ&L=DQAi0O-`c"%  ΢y\'E^&:Tn|n& ߙdkMOij +ˌC5!$fVʔ>/v1mE:_2 g f{Ŕ&LYJ u˹;KI SA3/"KCn%*%3e4%J twyqs O"Pe׉*nUZ`w:'&|")$n,uO )`Dx4f󳳞G`F ` ;쐑 L72lfbL6m.gHg6Xa^R W̒v 2OL>N!73(L+0١~s;KTd維eRA^1H~Lj__[|I/P|$s?i~S2?lں0JWU_ Y endstream endobj 3356 0 obj 624 endobj 3357 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3355 0 R >> endobj 3358 0 obj << /Length 3359 0 R /Filter /FlateDecode >> stream xVKS0WUsJfzF؂x&dw@O'wQ RT utm1 |g9 . ?ce2 WgAXHFDڠ=ȥ N#UF6z} eIZUUAIV.\e 9(mGauJ)qR;YnYm'5,F~ZlAAvn%-IJ|5'9] 4VRɠ쫻E03'6D38 L4{cn@Tpڲ:խzk֔(XiQAIV nuӜTEYU9+}Syĉ~MNVGϷ'IidO{Ž4U$/q[(gj/_z`>`\f`rʒĉVGkn "I,'?(Gd9V ֭䖌a|A fAXpN=LX m<t<>q`yd_SݱQvf,&$z; jF endstream endobj 3359 0 obj 833 endobj 3360 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3358 0 R >> endobj 3361 0 obj << /Length 3362 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#N+>ؖxhWOOO˳'5w6`4T}H g\G!5݈jem 񶳇^q?/Nyqy"mCE͸1a!h!:]'i \Cn /!%} ιlOLh},lY~zILeů2 Wʅ˾u%NM演j $,櫢{|JNVZMC𑡐$9`k 1R|zZ,\K^l |n4mMN ]iΔƀX$EjF\1Cc Liu狧2`>dftiyfFF&_Uqn] "t(sh`gW,$ omɓs5@#h0B gMv6lݣ#O뉾`ΕaɅHaQknxzWT3^gZzUϯPL1TPh5ML( [Uu endstream endobj 3362 0 obj 618 endobj 3363 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3361 0 R >> endobj 3364 0 obj << /Length 3365 0 R /Filter /FlateDecode >> stream xUMs0+J+oLo!x\#N+>ؖxhWOOO˳'5w6`4T}H g\G!5݈jem 񶳇^q?/Nyqy"mCE͸1a!h!:]'i \Cn /!%} ιlOLh},lY~zILeů2 Wʅ˾u%NM演j $,櫢{|JNVbȦ!PHVt05a )wD=@~-n.%/6GsH'.4gJUuciv, 5#Bѡ1 Æ}4X:SFٿ 0 t3|w:ش<3#^#THK87䮆cbP[Pf9PzAͳ+LH7u϶9P xnwO \&;LRۍpxёVD_0JmB0Wrtܨml7Y> endobj 3367 0 obj << /Length 3368 0 R /Filter /FlateDecode >> stream xV;o0+nk ,IQE(jӎ=Qrߣ(ɶ8dm';ߩ0Ͻc 9>Ă <@I~@J튬]LA_^Q]"@rἤFyb"J\CE7˱@xJ~)saY9Xo yY=J#) в#{*ʵIM/PQ2R*b78 a&7gbQͲ'pNG]UwYo&/D@e!ժuQbd2m cD{2ce1P}_kN O{HuGiC(YZ1&YΣ*^nIMdY;/s̱ o }f^k* +YЗ Ll~65äpno$Sd0uERY~:/v 6Cwؾ?(J7zAPѱ"[jEM>/OL]0.$GhdOW)8}N =qvp|$ԙ_Ҋ0J+SFޒޘU endstream endobj 3368 0 obj 747 endobj 3369 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3367 0 R >> endobj 3370 0 obj << /Length 3371 0 R /Filter /FlateDecode >> stream xV;o0+nk ,IQE(jӎ=Qrߣ(ɶ8dm';ߩ0Ͻc 9>Ă <@I~@J튬]LA_^Q]"@rἤFyb"J\CE7˱@xJ~)saY9Xo yY=J#) в#{*ʵIM/PQ2R*b78 a&7gbQͲ'pNG]UwYo&/D@e!ժuQbd2m cD{2ce1P}_kN O{HuGiC(YZ1&YΣ*^nIMdY;/s̱ o }f^k* +YЗ Ll~65äpno$Sd0uERY~:/v 6Cwؾ?(J7zAPѱ"[jEM>/OL]0.$GhdOW)8}N =qvp|$ԙ_Ҋ0J+SgoIo̪/ endstream endobj 3371 0 obj 747 endobj 3372 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3370 0 R >> endobj 3373 0 obj << /Length 3374 0 R /Filter /FlateDecode >> stream xVK8 Wq%!knn[i)D1۩̠~I=lym "i"={MTVU8HI~hY"Ef‚Z[{Tfau&'oh]=ȅ Y"ʍ&g~g|2fI*2(D(XVsߖt5 mo8IӸ1Hlq_;X]gznyY٭niPOƶ oPZqBHl)xDB.77δECYiOj'a`ϊ !%t6ǶnW&Pa"Y9a"}]WvU@@R([']6(.M[,X64Sq,Vo;2u?Ws޴~Kd&E0]}F2rN6x\ȍ6%WڵŒؾ/OvA?rXG't%UnMjMʥ(K>˲] Wpf֍`Pv;dڪuo֣(zϠQܔψàZ(ALմ?&a] ^>SY[s<>",p<+Gyo̙& k;F'ababRvq21LN%ߚS$0= f=fT endstream endobj 3374 0 obj 885 endobj 3375 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3373 0 R >> endobj 3376 0 obj << /Length 3377 0 R /Filter /FlateDecode >> stream xUMs0+$[;͍gzH2b+[8i}WSc[Czzz,O7*EO=@qr D OhhS?c>v |lDKt{^.]"MqGѻ 0 ǃ\*4Munnꪰ9dv Π2gfzHD3J) 8dyl.J`흩Oˑd7&٢.WօU  /BsˌS)$&\_7T?Lv8XC gUƍaBJg;4 :ƺ"f LMٶ1{C~ʄ /4%RJ/mӖ{WІQIRTrϑ,wWz]uߙ02tr}7;c 9%IL)SW={TD1GO` vrӚ0iGVUD89z$ @W4>3'DC?Ɇa ƝyoedC//=,;ɆN:2SLUŬӺR`Kі-kV+\x2*{CYIbz_L}5q\_w!=z%} P endstream endobj 3377 0 obj 632 endobj 3378 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3376 0 R >> endobj 3379 0 obj << /Length 3380 0 R /Filter /FlateDecode >> stream xUKs0+Ԫ$cڛfzH2e w KЮ>}ZmD!9O@pp)GpkE%3fqm ѾP!A܇gu^;QȜϱBP׋(!$.!usA6ID@[Asty$dR te[Ke NFVx";lklO& < 8HZ &8U HLժ6R׹Xp/.u+щhy!xpָ,N,`m F襣[@\2_mBH92yWY> I %.y>IeM׊C@3%AXDT7M 1HQ# qVE۫d麋0'e۝O:wRU!s S&0;(,Gy$XXJhV_7^.ET{`3N<5sx 0l` 4;{0GTG+c'xY"s/iHhתº6U+IS?=K}΋45͡(P:|D;hWbCE7%s( $||~XU{ endstream endobj 3380 0 obj 649 endobj 3381 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3379 0 R >> endobj 3382 0 obj << /Length 3383 0 R /Filter /FlateDecode >> stream xUMs0+~3=$12fd_ lؖЮS5wL8S1DSv-|L@Kphx/A Qȃ(-0I"'aۺ*L K*~Fl$aH2!IMcuQ `u~Z$1ɖ-vր.\}([pX8 $Tf*LP$1eh~49sN&gDLbw84f\Nk3 h-r3|XԀ t+xNw[+p{HoP8Ar%) %{4և&ga4&TIsω,]i4˪;;&"RNsfM=PA"gD >SƹU/:Qohhk.CrAMUaJ&ܝ0*Tל'!GD芦G|(h@=Y?3 tų6%I|'IG`Ja𲽚uZP ,Qc)RYX0e zk;MFeo(+QHԕ? b/&󫒹N.QFHWV]H endstream endobj 3383 0 obj 632 endobj 3384 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3382 0 R >> endobj 3385 0 obj << /Length 3386 0 R /Filter /FlateDecode >> stream xUKs0+Ԫv3=$ 2aw KЮ>}Z<kd!yO-@rbA'<@]kzqvmѮ=Q!FPZ|@b-9E΄Qb~XUwx endstream endobj 3386 0 obj 649 endobj 3387 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3385 0 R >> endobj 3388 0 obj << /Length 3389 0 R /Filter /FlateDecode >> stream xUMs0+JBH"v1ӛd:V03p$aCm&ƶvX"oTaz1 \ E ?~ƶ}ܧ :و—5 D]x-&DF!>,w`i"4i4y?;5: `!D3J)p:U]2;Sw#bߘd_dk@_EZ.>T-8H{ XfLQxuL)l-E'Ήs'Ũ2n| %pd\Mĥ֙845kbPԀ Ln*xζW+pV&l0pM3JQ"Bކ?mw m$U:M%=Qr-m~wUם "(C'9Wy3 \HϔB;q~ճ'OEs$9h*w? v~4nU{oKN#I> endobj 3391 0 obj << /Length 3392 0 R /Filter /FlateDecode >> stream xUMs0+Ԫ$ӏioi, sVj t0"csv%?TiqS2ǿʛ0JW,RU_jW endstream endobj 3392 0 obj 649 endobj 3393 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3391 0 R >> endobj 3394 0 obj << /Length 3395 0 R /Filter /FlateDecode >> stream xUMs0+~憙L3c A2 mؖЮS5wL8vӀ1DS |L@Kphx/A Q(isB>J%"LDEpHwpwsԥ) 39YAψ zLD1J)8dYfՔf{>S:L0$[v%;rJҹp9I ќ2T`".Eku-MzmS 3">.&0H쎆 i@x-2h- sPDz\^ljMUҀ#vߝpbp 3IRDZIi-MhL$j&me,;;&"R&RvMs`> endobj 3397 0 obj << /Length 3398 0 R /Filter /FlateDecode >> stream xUn0+5KR )ZtA{sc $VؔCJjT驉dgf8zP1t= #!\ֳkv'Gw{^]gx-'DF!>B`VAZ.8e> endobj 3400 0 obj << /Length 3401 0 R /Filter /FlateDecode >> stream xVn0+hp[.@! EmT;%[R$&-#{Q!{AAc B>] t¾/k{mڗE{c ?ңջEo=&@Fa}\z_`#<"TID~8,p36(79IAItoaI(LD$˺)3STeZki\2; 7" :Zba)PCkI^FKU='ɏ3$<&0!H, +Σi\pUMM)shG~Hwm*[:d?+aIM>!'$ CKNIOYպ}hrFCDq<¾V4ϕ3/a" >e(.i4$ !a(BqvԳ0[9 l5w.#תڿbVqL-~$u9qƉqkP½<@YXؚNζp;3M >3 ]WGcORU})S{9g8q> endobj 3403 0 obj << /Length 3404 0 R /Filter /FlateDecode >> stream xVMs0+h4$sk:3=ę fjD2 ڀmVJÀ}aa!=8 cpp֋a~/oz>[Zcߝ¡ɹC4C܇g go Q:VGf^Ǒqyl..n̋-$EYV_ G"F)enNl"yY(X%I2$n5) IS: 5X2cEr'\]Jz_{!e)[f&ˋ3Ѽ&5|g5!8r  o IOɾt) 0@UI*\LLt ) vU(++Ϩh@0G;\sH3/aO<ʰo>B| !?&A*ĒjL֓y8RL.DMYbTQDkxqP+SIʏ3N (&M1Ko Xp nI|v$zar3HݩؙD޿Od˵Hqb'BB &Db]bJ;K;r iy𭉠K2:Q-bdN] $~DOYUseV endstream endobj 3404 0 obj 754 endobj 3405 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3403 0 R >> endobj 3406 0 obj << /Length 3407 0 R /Filter /FlateDecode >> stream xVKs0+h LILl3 wF>  sbѹ?a.D p A',@͢ s2DMs /p(|snniuՄ}W(O+\ m/-8yx,6#,+;H J@ b[X}>."`tRe[iB*)/dޙdW fȦ~#tո{Fs(3F(7BYU̕g*7s L 8 Ǐ2kƢiBx.~ 4ԅw ɡ+*2]&n3r0nZf"SDIFԄ Y\w*. I8?DKcI\ħ.G,$3'IqUEPMys^ S@h 얡&dV+sz}:Uyi\1J6..%\phh[ǒHzmXװ、7w(e,kZH<$k7OAu=9RXc Y(DjiAX:ӴF6$1I~u׋MIa Z/I+'sr;0WY 'ZdEֲB;Q>DZungcZ)\qimb+ՠAL범7['?xlFOXbaCN4vG>=şO)FO{:ǻy'2).Mnp77Vё endstream endobj 3407 0 obj 795 endobj 3408 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3406 0 R >> endobj 3409 0 obj << /Length 3410 0 R /Filter /FlateDecode >> stream xUr0w/H>fsLI&Cl3c{ͪ K:^G's9S1D8X nh ?nƮ}ڧ]@l᧗yyw&5[o9!B7 S}i$TZk"kwppws[i8K  9"6{bR&$p:ɲU晅(>XS6_dw&ٲW/YOڅ˱e  'DsʌS%E]ʚⱲۼh9|>' Tr&BB. ^\Nk1 2n2@1Ulxi=+=p:p2GR[V.Tѐhjqbg8I;7&Sns~,6deOh*J]TǹU/Pu.ܚ%0Bw{@=e,x,>*҃5qƉq Uzsw?Hknؤ:(hN!gHE?ȇչ׏:G$B5(KW+2*z}Q |z1h["CE7%s&]DB?> endobj 3412 0 obj << /Length 3413 0 R /Filter /FlateDecode >> stream xUMs0+4> Ǵ77!d(mflp$p+@驉-]52mc 9x(!FQ M݌M3O}Bwp #xt>&wō*<>~Q/rI$Q("x>[L^ -HF@V@'8uu`7hM iO}gurB<~z+ SLE7ŭffoqC1H |2jCU*QH/? c$9J.QHo7V]  endstream endobj 3413 0 obj 638 endobj 3414 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3412 0 R >> endobj 3415 0 obj << /Length 3416 0 R /Filter /FlateDecode >> stream xUr +2^zٵLwiִ جDB g1JOJ5n < 4@Z;hƸrmta}xȷWWo#7p|"\zLdY1ޕ U'ta4#JH2.3b[,/ vgaqJχğiS| B"ē%T!ίSF)>v;”+[XR;jWҖ{o' vN@#4 cEg#-~zz(A^!gPhk"_maysP QgˑDX|DJVGj갋6Vs壴]Ȩle)M u(O1z(y(|DcL}u endstream endobj 3416 0 obj 660 endobj 3417 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3415 0 R >> endobj 3418 0 obj << /Length 3419 0 R /Filter /FlateDecode >> stream xTKo0+:mT-Z]Pyh}yؐ5|{s`#w1?\B@D-<ýDi]OW{{4M{nP~Kk-[x7>1CrtDcTpg%$^ɢ>AZg*Y( l!ai F]}PESVA BEq5_W/yӽjFԫ|٢oKϻ endstream endobj 3419 0 obj 550 endobj 3420 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3418 0 R >> endobj 3421 0 obj << /Length 3422 0 R /Filter /FlateDecode >> stream xUn0+ M"[.@oIjӶP[rwHm8&mR#1`@t2్1PD40. 1ܠh`5[?O ѮAPctA"Cq!0 jVpB1F+ 5umUl ˤJP.!5dhF)eB:[Ti'V {KjgOwo3b"$2oKw6zJHАHKczn>7ρmY:E+3t$+.,IH=?lQ„{"M-EwF=n.$ageĂS7&ooudչm:I"ɐE>9l&i)^+3k瞖XTGFuVIE7NMR뢆]0]ɨe-L]kCiE?d^?P;G`WwV]$ endstream endobj 3422 0 obj 665 endobj 3423 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3421 0 R >> endobj 3424 0 obj << /Length 3425 0 R /Filter /FlateDecode >> stream xUKo0W̑J[ׯvoڇz(UBB(qmK'_K7(a pIx6v:/[nVڴ[Y@W9Cm.. e-~(ċ=ʍ1ZiD8 &wUfKH9̓*]Vx>D3J) 8X٬J8ٖjc㟌_SQǯ"o"TW8 *c\i$1Iyk̮s9I {9FOɈU,S8 <[.{Iֵ*l&/^w>F(J(rEko˴BQژk?O'|^\l5}@LDRzcGx@ 4F8W"s,}Cfl~śWڭ l>Q„#M-gEu"=l.$MNc^b9Q0qtv#poW彙2}Y?$wV{;n6/=dE^ꠈpnd7W$!9$]#[\(.- XE |na:DՓAZ(陎{/$c?t`Nʅ+'`CYu?! endstream endobj 3425 0 obj 665 endobj 3426 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3424 0 R >> endobj 3427 0 obj << /Length 3428 0 R /Filter /FlateDecode >> stream xUKo0W̑J[ׯvoڇz(UBB(߱@og/ pm@q$lǟ euR> endobj 3430 0 obj << /Length 3431 0 R /Filter /FlateDecode >> stream xUn0++݌!ͮm.JUe@4>>>=+y @qb~\#\GѶ@F]mջ_mYClK< GDptmw3"B?7 k[]QWʍ1ZiDAB %ьRʄNG)Ve(4!-@/'W YWʂ7C <+ * $F\_(Om>fF'Jjp&PlD0Z)9PHM9j=A;K--)<`gwiJ +#}%A8}Tc$qކZ01 #a>z&/Ȱ̧I1IzI5[;GV-ߐ@KcsÿTD.S?ߵy*2yF;l[)lrYH(a½,;s;H~rSĉqlmiW:~Ilt?k"!rkiVXEt6æ?Vs8[Er|B2)e[$yk6en!]JإK Sϗ̱?Id޿o פͻ7٧/[ endstream endobj 3431 0 obj 670 endobj 3432 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3430 0 R >> endobj 3433 0 obj << /Length 3434 0 R /Filter /FlateDecode >> stream xUn0wHS/0nFf$hHy4ϵhiCcc@񹲅("BK}(_Qcz+vdRʄNG)u6<+!@/'sC:q*,x;4r^_a%P̾U!Q$1Eyk̬U^ Y)3Rl.*1'2~gƹ`J5^1x"<& ( ZϽeL.Tрhj𰥃I$:ϖ_̦)1 -&Z,ɪ='dtIJOfx,"ZN@lJjj{Q0묳53/usP]6yb`6]A%=sş$bP2o\eCp{,] endstream endobj 3434 0 obj 668 endobj 3435 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3433 0 R >> endobj 3436 0 obj << /Length 3437 0 R /Filter /FlateDecode >> stream xUn0+ ˗Dҷ}CMBm#AKcvnM,$Gp8Z=D (^Q|=x C pIxpECk%u36}(n] Sԧ ՈP(iG BK+8M:亩bYEdT wghF)eB˶7yYԐf6}@/-ٹW΂W&T8+ Rc4(2(mU}Kt䨤 gFbMB׉fq@r.n rM ۲zn\;TQ$ITQpE:#01 מ ~^~6j)էl3۬ -V@ IhiBuq"ҵ `[NUYhޠy&g H=ۑil񶌜Q„#MUsv=q.$M`5 `Nm~Vz^f?;Dړ0mwe ! y2/vӼҸ2iv%ڪm0\AQV,陪=?I{Xߕץr!l} ;b{gU endstream endobj 3437 0 obj 649 endobj 3438 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3436 0 R >> endobj 3439 0 obj << /Length 3440 0 R /Filter /FlateDecode >> stream xUn0+ KR IZtzK" 80TZ%iC"+&mRC!a@񹴍P6n041?FѶAm%3}ڶ:ơӹG><9x\ō:(^ZʕRRHĵ]Z -n,6{QShWdR tbWM&0:庨Á^.L_d}T)x5LBQ;}]+|1NhT(;eDQtfqWzM-D< '6nmO0 $yx\v\b:!>~)Ԍ I=;s"\ڬ)%( *%$|6)&Da4 JH.fclyL踬WocO<0d2Ѧ! "d8g9ӂu[yPX"g"tS-$'eF]Sw[5 t7+~JBcT7Y|hq?  368'V_ܾvݨ O;kt0D4ӹNctk}JW{Yf2&5m6vQy,\2Ū)s]]eVBn5x ɠJtљkVyhSSC Vw%s aA?[YUV endstream endobj 3440 0 obj 707 endobj 3441 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3439 0 R >> endobj 3442 0 obj << /Length 3443 0 R /Filter /FlateDecode >> stream xUKo0WGvioz(U%"Ayym[ؙxfe|tPffjAC|.k/h0QbgWi;&NZc{prp㽳 =tQ=ʕR Lrqr_I(!NyRa>뒀QJ(ĺJWeѡe3%d|-,>ҪW+P;~@29ƥ I#^s$*tFyMυmrp9L Xʭ0$|i~dɹ;xU &{v2zm kh]R>,ԾDqwYd9}q)C6jӲp. W)ڱ~&M .y[]sg\uQ.͋qFQL,&7aMV[H,)u>Q„y:]`zK\Eok5M!&v^˻-˺i6ɋN;r{S+'NaD}Y=KtKjr*r#nQCwX%c%eAMWb EOkeKo[`lMc}xx$|(뇨4.Sq7 endstream endobj 3443 0 obj 664 endobj 3444 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3442 0 R >> endobj 3445 0 obj << /Length 3446 0 R /Filter /FlateDecode >> stream xUKo0WW⸷]C[H=ʂH@E;v(۶=y|P|fQbACp͵m4Ϩu}ڶ _Eo"TxWX *1NUhHrsj- 쳼{LghMR8j1.H Fddh̡J)3l*`- '3<dPvOe͗J]k6E?`._ʺūY?n V endstream endobj 3446 0 obj 663 endobj 3447 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3445 0 R >> endobj 3448 0 obj << /Length 3449 0 R /Filter /FlateDecode >> stream xUKo0Wׯqoڇz(U%"AB(߱")۶dc@񺲃;1PD0v1?. Dn@3nMqy~{MkuwT(BPU!u]U,$b8i#D RQJP$ŪΖUg%D4U3%d|8|Sǯ"N7c*<*tj$ILxFROۼ2$' [&p\ʷIi)Q\x[ragvyu!l<ژ( ZfL.T рhjłQY$ŵ5 2g,a'2m[w&z@"_ Z+Ԏ.bx*"ژ;jri_4$82MrbA RM@P5He &?L,ҽ%Us!hwk59,tv#Q^?-͸;rw(ui'`CS9*P1֞nȍ &ܬt osb uQ.O ,fW(z2j̗^/$Sm7sU6߀pt?{}03 endstream endobj 3449 0 obj 660 endobj 3450 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3448 0 R >> endobj 3451 0 obj << /Length 3452 0 R /Filter /FlateDecode >> stream xUn0+W⸻Cm.JUe@$H \; $)ݴ}{}||l=-0zc81?. h[ ` ?i[m+kxRo>:]MDFa}|`IZ ZPa4z($]A.`1D` џS)I(L(tbY2xW2ҹWgi߄ʁG}@3cWF@;*L˒4yЙ!HN8(5F}"-_yfa@p- ^Mefi'#<.(( *ӽٮH6TсрhjჟQXw,]}Av2ߦΜ2p[&-R&A(Vh$gṈhmjl) u(,i.DB6H]@NkH)Mz[F(a¾A?L1ϓ55s!hnk6Y5NHmNӈ;UjNۉj6B:нeyew3<Ϻ)ހ͙zkEd02N6H""dKXUyla`6 x^9O1hss|(˗!=]m- endstream endobj 3452 0 obj 668 endobj 3453 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3451 0 R >> endobj 3454 0 obj << /Length 3455 0 R /Filter /FlateDecode >> stream xUn0+ M"[.@oIjӶ[rwHm8&m#̛Sue8,vSkc8hlba\݀7Kvl9D,;@!&\x\OO:_(īZ 4h" gUfkH%,*CVhxAJ NBlQyVBK[5?_O׵Szq*%x=ƞ_(PcqBAĄ+$.mXns$' $k9&OIEXG(s!<w[BMd[[rp`gwy!\\;yL(QDϡZdL՜шng\|,6_/DH$e(6b]lV H!(ԏs|G yՖ#ӽl*iX04Ϣxtk=fS%L;41rQ{sB4Dj&fnj]54gf-> 7=&p$C[9J6S jsO+# 9$"TUeAu]԰˗K=uܾii}O1Ѷ?v<>>gr. # endstream endobj 3455 0 obj 661 endobj 3456 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3454 0 R >> endobj 3457 0 obj << /Length 3458 0 R /Filter /FlateDecode >> stream xUn0+Wb݌!͎6R2` $\IRi `1xM\ ;1!%>+m O-GiV!t6%FU7=QWʍ1ZiDA<,N%KXFE,.00~OAJ Rɢ$0綨?Þ^O׬WNYW҂ UlN<* I tNQcnTBI *5b#q~.4s:A=]vvfM ͵@EINU[5Iy7Ps|Fb6&恟AQ\fmDiω HкuoIђBJXR(Os.7Am;=f'Ʒyh6Ȋߤv6bq-6y_D(a=J,;6HDS1Y1HE$Mؤk, LntQjT06pgiVtD.ͲKtڜMQX]{:2-c(X+X#ҥh'M|IojuO1z;rpP2׏S )}`Ug$ endstream endobj 3458 0 obj 651 endobj 3459 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3457 0 R >> endobj 3460 0 obj << /Length 3461 0 R /Filter /FlateDecode >> stream xUɎ0+Ҵ[یft>4-!"AYO9$l&gWwPl47Ax}pIpEjgl٧}ڶ5DġyyE4B܅SkT(oF!XP>Q` /"IQXp+$>2Ae,8Mr]n:GK0V%+q*RYp7N_a%PSqBPHbddR{fK 9Lڸ`pVC"dߤq;_S)Lr_D(aŽH]'nE_o I$FSuZc10| GVL4|Yi /ήDnacviVga,^!Hw]eXn2ƥ%%@KXY 420=Ive˕Fj#?IM5_?!hlsj`U endstream endobj 3461 0 obj 647 endobj 3462 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3460 0 R >> endobj 3463 0 obj << /Length 3464 0 R /Filter /FlateDecode >> stream xVn0+5M[.@oIjӶr$wHIx5Fj7||H)`@=qM9ੋ190$QHʵ*Vp]Z'9_efW,:21pɯ!D1J)1p:Jl [An+SɁ^׍͡ c+1:s_c|4ƠFHEyl*S>V^GJtTR3Zt.QXȁK6ьx 7TB; KXeUrk?+eQLIEN߫-UVP}DF#cuU _o]E9vɶsgח1IKjrc;vj)u8d1D6j Vty:#bgGTҡ H2㥨\B[mo֭sjtY .+]ˎኡ^S)\J3By cUkEȭe7t/)ˢ(UFRۼؾ2m65[d8wGS6  .JrpVP3qDc;YArx+ba7;lU^ endstream endobj 3464 0 obj 707 endobj 3465 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3463 0 R >> endobj 3466 0 obj << /Length 3467 0 R /Filter /FlateDecode >> stream xTKo +涉?ݪ[$8fGbT ~8Q@>3|34mesؔ0b /C,p `]Q9N47y~5d<oe1Y~tA{撋Dؑ 4xǐdnpFy$1 !)yq{-0k:龕]Bh\pÏL,s NjU]sVj-T2GgtݟղឳyzTus5,fk 1UY}S7$!^9kU(}pS`GpԹjxC#2VBQ[ /Iq.EGa .YvdgReI˻d@֏wXRb:2y& i_y{ Bd3 ܇ꋣj_Wj endstream endobj 3467 0 obj 460 endobj 3468 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3466 0 R >> endobj 3469 0 obj << /Length 3470 0 R /Filter /FlateDecode >> stream xTn0+Io-=9xmZlQB/ű驉$g tR3Xe(H\ ! !a[3f7c aA <O];?DPk2{uc_u4%s,TEԕ"?njL~oQFBF~]b $5eeaYV|S=NZ+%KvX-ujJ?*(͡NJca9+ֆ ,Q7_P}/1Z?tC~JOHdȮשׁ- endstream endobj 3470 0 obj 529 endobj 3471 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3469 0 R >> endobj 3472 0 obj << /Length 3473 0 R /Filter /FlateDecode >> stream xUMs0+`u%$|kmyLq-c&_ 1=5P@{/ c"8ɀ1D#4$,pB?X nSA3(Ѣ[Gt<>XMwB|N"#JDT(P] n:=]GH~_Qw認uʆٟ$vVc Á!VRű[cD}MvMC\2tek dQnKkSBG(Rk19%k> endobj 3475 0 obj << /Length 3476 0 R /Filter /FlateDecode >> stream xUMo0 WFɶda[݂ء) /QQL$iDE>SJ,SqPBX nY_ߑ7w؏-d? \w. 9hě`z+Y[ aKde E-^\׮*{,uUN`#: 4:mklFOvգp&LQIC[)"&.*Sث+R5J L𐤥q% 2zM  C2(f9 FâvNۊNgG* (I){bҔ=5=:GRg"鼡qh~)®瓿ØEȩ(;KܺRt$JSEcO+=E!l?$~%J[_tp'\.X$8b'o1%L(LP7|\YY{b\QWƎwd\a~6(qm~Ѥ˞9Űыk=ih{/l ڹYZ*f*Ĕ׆{}N&GV8]ڷmliM)LWEOC :vΜǔpd &1:yqH endstream endobj 3476 0 obj 627 endobj 3477 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3475 0 R >> endobj 3478 0 obj << /Type /Action /S /GoTo /D [3318 0 R /XYZ 72.0 720.0 null] >> endobj 3479 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 239.54 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3478 0 R /H /I >> endobj 3480 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3478 0 R /H /I >> endobj 3481 0 obj << /Type /Action /S /GoTo /D [3321 0 R /XYZ 72.0 720.0 null] >> endobj 3482 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 240.1 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3481 0 R /H /I >> endobj 3483 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3481 0 R /H /I >> endobj 3484 0 obj << /Type /Action /S /GoTo /D [3324 0 R /XYZ 72.0 720.0 null] >> endobj 3485 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 222.33 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3484 0 R /H /I >> endobj 3486 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3484 0 R /H /I >> endobj 3487 0 obj << /Type /Action /S /GoTo /D [3327 0 R /XYZ 72.0 720.0 null] >> endobj 3488 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 246.76 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3487 0 R /H /I >> endobj 3489 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3487 0 R /H /I >> endobj 3490 0 obj << /Type /Action /S /GoTo /D [3330 0 R /XYZ 72.0 720.0 null] >> endobj 3491 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 247.32 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3490 0 R /H /I >> endobj 3492 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3490 0 R /H /I >> endobj 3493 0 obj << /Type /Action /S /GoTo /D [3333 0 R /XYZ 72.0 720.0 null] >> endobj 3494 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 224.55 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3493 0 R /H /I >> endobj 3495 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 649.5 540.0 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3493 0 R /H /I >> endobj 3496 0 obj << /Type /Action /S /GoTo /D [3336 0 R /XYZ 72.0 720.0 null] >> endobj 3497 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 248.98 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3496 0 R /H /I >> endobj 3498 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3496 0 R /H /I >> endobj 3499 0 obj << /Type /Action /S /GoTo /D [3339 0 R /XYZ 72.0 720.0 null] >> endobj 3500 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 249.54 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3499 0 R /H /I >> endobj 3501 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3499 0 R /H /I >> endobj 3502 0 obj << /Type /Action /S /GoTo /D [3342 0 R /XYZ 72.0 720.0 null] >> endobj 3503 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 227.33 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3502 0 R /H /I >> endobj 3504 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 613.5 539.999 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3502 0 R /H /I >> endobj 3505 0 obj << /Type /Action /S /GoTo /D [3345 0 R /XYZ 72.0 720.0 null] >> endobj 3506 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 237.33 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3505 0 R /H /I >> endobj 3507 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3505 0 R /H /I >> endobj 3508 0 obj << /Type /Action /S /GoTo /D [3348 0 R /XYZ 72.0 720.0 null] >> endobj 3509 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 270.66 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3508 0 R /H /I >> endobj 3510 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3508 0 R /H /I >> endobj 3511 0 obj << /Type /Action /S /GoTo /D [3351 0 R /XYZ 72.0 720.0 null] >> endobj 3512 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 269.55 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3511 0 R /H /I >> endobj 3513 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3511 0 R /H /I >> endobj 3514 0 obj << /Type /Action /S /GoTo /D [3354 0 R /XYZ 72.0 720.0 null] >> endobj 3515 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 262.32 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3514 0 R /H /I >> endobj 3516 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 565.5 540.0 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3514 0 R /H /I >> endobj 3517 0 obj << /Type /Action /S /GoTo /D [3357 0 R /XYZ 72.0 720.0 null] >> endobj 3518 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 260.66 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3517 0 R /H /I >> endobj 3519 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3517 0 R /H /I >> endobj 3520 0 obj << /Type /Action /S /GoTo /D [3360 0 R /XYZ 72.0 720.0 null] >> endobj 3521 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 259.55 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3520 0 R /H /I >> endobj 3522 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3520 0 R /H /I >> endobj 3523 0 obj << /Type /Action /S /GoTo /D [3363 0 R /XYZ 72.0 720.0 null] >> endobj 3524 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 285.66 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3523 0 R /H /I >> endobj 3525 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3523 0 R /H /I >> endobj 3526 0 obj << /Type /Action /S /GoTo /D [3366 0 R /XYZ 72.0 720.0 null] >> endobj 3527 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 285.66 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3526 0 R /H /I >> endobj 3528 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3526 0 R /H /I >> endobj 3529 0 obj << /Type /Action /S /GoTo /D [3369 0 R /XYZ 72.0 720.0 null] >> endobj 3530 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 253.44 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3529 0 R /H /I >> endobj 3531 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3529 0 R /H /I >> endobj 3532 0 obj << /Type /Action /S /GoTo /D [3372 0 R /XYZ 72.0 720.0 null] >> endobj 3533 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 253.44 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3532 0 R /H /I >> endobj 3534 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3532 0 R /H /I >> endobj 3535 0 obj << /Type /Action /S /GoTo /D [3375 0 R /XYZ 72.0 720.0 null] >> endobj 3536 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 252.32 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3535 0 R /H /I >> endobj 3537 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 481.5 539.998 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3535 0 R /H /I >> endobj 3538 0 obj << /Type /Action /S /GoTo /D [3378 0 R /XYZ 72.0 720.0 null] >> endobj 3539 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 230.11 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3538 0 R /H /I >> endobj 3540 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3538 0 R /H /I >> endobj 3541 0 obj << /Type /Action /S /GoTo /D [3381 0 R /XYZ 72.0 720.0 null] >> endobj 3542 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 254.54 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3541 0 R /H /I >> endobj 3543 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 457.5 539.998 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3541 0 R /H /I >> endobj 3544 0 obj << /Type /Action /S /GoTo /D [3384 0 R /XYZ 72.0 720.0 null] >> endobj 3545 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 230.11 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3544 0 R /H /I >> endobj 3546 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3544 0 R /H /I >> endobj 3547 0 obj << /Type /Action /S /GoTo /D [3387 0 R /XYZ 72.0 720.0 null] >> endobj 3548 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 254.54 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3547 0 R /H /I >> endobj 3549 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 433.5 539.998 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3547 0 R /H /I >> endobj 3550 0 obj << /Type /Action /S /GoTo /D [3390 0 R /XYZ 72.0 720.0 null] >> endobj 3551 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 230.11 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3550 0 R /H /I >> endobj 3552 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 421.5 539.999 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3550 0 R /H /I >> endobj 3553 0 obj << /Type /Action /S /GoTo /D [3393 0 R /XYZ 72.0 720.0 null] >> endobj 3554 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 254.54 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3553 0 R /H /I >> endobj 3555 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 409.5 539.998 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3553 0 R /H /I >> endobj 3556 0 obj << /Type /Action /S /GoTo /D [3396 0 R /XYZ 72.0 720.0 null] >> endobj 3557 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 225.11 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3556 0 R /H /I >> endobj 3558 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3556 0 R /H /I >> endobj 3559 0 obj << /Type /Action /S /GoTo /D [3399 0 R /XYZ 72.0 720.0 null] >> endobj 3560 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 249.54 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3559 0 R /H /I >> endobj 3561 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3559 0 R /H /I >> endobj 3562 0 obj << /Type /Action /S /GoTo /D [3402 0 R /XYZ 72.0 720.0 null] >> endobj 3563 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 227.33 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3562 0 R /H /I >> endobj 3564 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3562 0 R /H /I >> endobj 3565 0 obj << /Type /Action /S /GoTo /D [3405 0 R /XYZ 72.0 720.0 null] >> endobj 3566 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 251.76 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3565 0 R /H /I >> endobj 3567 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3565 0 R /H /I >> endobj 3568 0 obj << /Type /Action /S /GoTo /D [3408 0 R /XYZ 72.0 720.0 null] >> endobj 3569 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 252.32 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3568 0 R /H /I >> endobj 3570 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 349.5 539.998 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3568 0 R /H /I >> endobj 3571 0 obj << /Type /Action /S /GoTo /D [3411 0 R /XYZ 72.0 720.0 null] >> endobj 3572 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 229.55 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3571 0 R /H /I >> endobj 3573 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3571 0 R /H /I >> endobj 3574 0 obj << /Type /Action /S /GoTo /D [3414 0 R /XYZ 72.0 720.0 null] >> endobj 3575 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 253.98 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3574 0 R /H /I >> endobj 3576 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3574 0 R /H /I >> endobj 3577 0 obj << /Type /Action /S /GoTo /D [3417 0 R /XYZ 72.0 720.0 null] >> endobj 3578 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 254.54 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3577 0 R /H /I >> endobj 3579 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 313.5 539.998 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3577 0 R /H /I >> endobj 3580 0 obj << /Type /Action /S /GoTo /D [3420 0 R /XYZ 72.0 720.0 null] >> endobj 3581 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 301.5 299.979 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3580 0 R /H /I >> endobj 3582 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 301.5 539.998 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3580 0 R /H /I >> endobj 3583 0 obj << /Type /Action /S /GoTo /D [3423 0 R /XYZ 72.0 720.0 null] >> endobj 3584 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 246.2 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3583 0 R /H /I >> endobj 3585 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3583 0 R /H /I >> endobj 3586 0 obj << /Type /Action /S /GoTo /D [3426 0 R /XYZ 72.0 720.0 null] >> endobj 3587 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 239.55 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3586 0 R /H /I >> endobj 3588 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 277.5 539.999 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3586 0 R /H /I >> endobj 3589 0 obj << /Type /Action /S /GoTo /D [3429 0 R /XYZ 72.0 720.0 null] >> endobj 3590 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 246.77 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3589 0 R /H /I >> endobj 3591 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3589 0 R /H /I >> endobj 3592 0 obj << /Type /Action /S /GoTo /D [3432 0 R /XYZ 72.0 720.0 null] >> endobj 3593 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 257.32 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3592 0 R /H /I >> endobj 3594 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 253.5 540.0 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3592 0 R /H /I >> endobj 3595 0 obj << /Type /Action /S /GoTo /D [3435 0 R /XYZ 72.0 720.0 null] >> endobj 3596 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 248.99 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3595 0 R /H /I >> endobj 3597 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3595 0 R /H /I >> endobj 3598 0 obj << /Type /Action /S /GoTo /D [3438 0 R /XYZ 72.0 720.0 null] >> endobj 3599 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 251.77 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3598 0 R /H /I >> endobj 3600 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3598 0 R /H /I >> endobj 3601 0 obj << /Type /Action /S /GoTo /D [3441 0 R /XYZ 72.0 720.0 null] >> endobj 3602 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 261.77 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3601 0 R /H /I >> endobj 3603 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 217.5 539.998 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3601 0 R /H /I >> endobj 3604 0 obj << /Type /Action /S /GoTo /D [3444 0 R /XYZ 72.0 720.0 null] >> endobj 3605 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 237.87 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3604 0 R /H /I >> endobj 3606 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3604 0 R /H /I >> endobj 3607 0 obj << /Type /Action /S /GoTo /D [3447 0 R /XYZ 72.0 720.0 null] >> endobj 3608 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 231.22 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3607 0 R /H /I >> endobj 3609 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 193.5 540.0 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3607 0 R /H /I >> endobj 3610 0 obj << /Type /Action /S /GoTo /D [3450 0 R /XYZ 72.0 720.0 null] >> endobj 3611 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 238.44 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3610 0 R /H /I >> endobj 3612 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3610 0 R /H /I >> endobj 3613 0 obj << /Type /Action /S /GoTo /D [3453 0 R /XYZ 72.0 720.0 null] >> endobj 3614 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 248.99 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3613 0 R /H /I >> endobj 3615 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3613 0 R /H /I >> endobj 3616 0 obj << /Type /Action /S /GoTo /D [3456 0 R /XYZ 72.0 720.0 null] >> endobj 3617 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 240.66 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3616 0 R /H /I >> endobj 3618 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3616 0 R /H /I >> endobj 3619 0 obj << /Type /Action /S /GoTo /D [3459 0 R /XYZ 72.0 720.0 null] >> endobj 3620 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 243.44 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3619 0 R /H /I >> endobj 3621 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3619 0 R /H /I >> endobj 3622 0 obj << /Type /Action /S /GoTo /D [3462 0 R /XYZ 72.0 720.0 null] >> endobj 3623 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 261.21 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3622 0 R /H /I >> endobj 3624 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 133.5 539.999 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3622 0 R /H /I >> endobj 3625 0 obj << /Type /Action /S /GoTo /D [3465 0 R /XYZ 72.0 720.0 null] >> endobj 3626 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 253.44 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3625 0 R /H /I >> endobj 3627 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3625 0 R /H /I >> endobj 3628 0 obj << /Type /Action /S /GoTo /D [3468 0 R /XYZ 72.0 720.0 null] >> endobj 3629 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 109.5 187.389 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3628 0 R /H /I >> endobj 3630 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 109.5 539.998 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3628 0 R /H /I >> endobj 3631 0 obj << /Type /Action /S /GoTo /D [3471 0 R /XYZ 72.0 720.0 null] >> endobj 3632 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 212.33 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3631 0 R /H /I >> endobj 3633 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3631 0 R /H /I >> endobj 3634 0 obj << /Type /Action /S /GoTo /D [3474 0 R /XYZ 72.0 720.0 null] >> endobj 3635 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 204.55 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3634 0 R /H /I >> endobj 3636 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3634 0 R /H /I >> endobj 3637 0 obj << /Type /Action /S /GoTo /D [3477 0 R /XYZ 72.0 720.0 null] >> endobj 3638 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 201.77 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3637 0 R /H /I >> endobj 3639 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3637 0 R /H /I >> endobj 3640 0 obj << /Length 3641 0 R /Filter /FlateDecode >> stream xO$y|9fƿ=.6& i$+ ! VfeW:DtkQuۑ?nݿQG?n?>]?_~>r_^O'r}}{__aG)燨kQ7o?O|>~7>_?oNRϿu~ǏO~_~me>k|xC.xVU$N XkZ@kZE0D0D0D0D0E0E0E`v]7'ijH%Kq` ` QA0*)!!!)))M6l"E`!CN"8Ep% <@0Y@0 f ```````v/}01(xBJ< AwķwNzǎף>xex|P>n|V˛妺Lu"սrRH('սrRkI$WPnaaaaiiiT!Jw[_ɛi.S]LujAQH5 F!ըTjTS S S SMSMSMSmLj3nTS:Lu4iT.S]AyjRBYH5 f%լTTTTTTTFyk਼SOӚ<Hi~Ε<,/Wf9߽ y!WrR={!z:JnaaaiiiiTޟ{!?JO归EɼWf.S]H5R={%'BCzz:JNz/aaaaiiiT6SMj7aTNS:Mu2eTO'^It+9񽒓$+g߶~<|e~|]D퓋=|P~<,/o7ޔ7'aaaiiiiT6SM0aTNS:Mu2EƛrR7ޔTT7Lj3nTvS:Lu4iT.S]HuxSN[BƛrR7ޔTTTTTTO˓;|~ۇ[xGw'p\ɛC8i)?-, yXnT.S]AqjRBQH5 F%ըTTTTTTTT6SmMj7aTS:Mu2eT ்ߕpgz?x47'iՅ<-UTT6SmMj7aTS:Mu2eT urR=Xv^Hc݅T;]Icyjjjjjjj3fTvSMu0aTNS]Lu"urR=Xv^Hc݅T;]Ic݅TTTTTTOwy)ow{ݙOww;+y|R~gz%OwWTT6SmMj7aTS:Mu2eTOwWrR=ݙ^Itgz%'ӝ酼JnaaaaiiiT6SMj7aTNS:Mu2eTOwWrR=ݙ^ Lz3JnaaaiiwyɝiI۳[I5Ʌ^zV"[$k)oOoo%^-y%սrRk%S S SMSMSMSmLj3nTS:Lu4iT.S]rSN{-TZnIu喼^M6SmLj7nTS:Mu4eTܔ^M9ܔ^-y%սrS S S S SMSMS=%瓹Dsܳs\Bw˗ąY>)?%.zKWR=%.zK6SmLj7nTS:Mu4iT.R=%.zKR=%.zKWR=%.Lj3nTS:Lu4iT.S]zK\I6rRK('}lT8rS S S S SMSMSMSmL|9+I+{yn6rR&RNDM5L5L5L5M5M5Mj3fTvS:Lu0iTNS]Lu>6rR&J^HuH9c%MTTTTTTTO T6ʓI@_}>?KXk.BT$Oˇ{.AyX-_T$'=KPnaaaaiiiT}Jl[(f|rS]Lu"=T\BB{.A9夺jjjjjjj3fTvSMu0aTNSLu"{: BBV\!yʅ<,/O+T.z^v^IBBnaaaaiiiTVV\nBB,V\rS]Lu" 9WR=PyʅT+T.Lj3fTvS:Lu4iT.S]HBBN*oT+T.z^v^IBBnaaaiii*yd.-s*xV\*[(?P7'T.R=PyʅT+T.z^v^IBBnaaaaiiiTVV\nBB,V\rS]Lu" 9WR=PyʅT+T.Lj3fTvS:Lu4iT.S]HBBN*oT+T.z^v^IBBnaaaiii*yq/)_r%OMu2eTO+TzZr!/zZr%' +9V\M5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LuiʕTO+T.TO+TzZr!zZr%7000444*yszao$ 3(f|A<,Mu2eTД>ZBthIu-y%}:4Lj9ąA8,˻Y-o2eT }:4夺O>rRݧCSNthTTTTTTT6SmMj7nTS:Mu2eTAyjTjRJYI5+f500044O6ƓqQ\rw~e"<^P-_jy|JB{xA9TrS S S SMSMSMSMSmLA8,˻Y-o2eTrR Iu/('=^PnaaaaiiiT6SMj7aTNS:Mu2eT $S nbPN{A9)aaaaiiiTj?cq%ay|Q>I,妺Lu2E{A9)TrRS IuO1(7000444fT6SM0aTNS:Mu2E{A9)TrRS +)y< / a/OӅ=}N#]q-_ M!oO|P24Tk!ZHVRTk50004444fTvSMu0aTNSLu"(夺šT8~GJQM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LujAYH5 f!լTjVS S S SMSMS=?YL%}G^O%~z}lO,w9JɻI~R|PLu2E zj=HRTk!ZIVRTk5000444fT_cK ț' O/GO@4eTAqjTjRBQI5*F50004444fTvSMu0aTNSLu"wKvZo~O_Oo~OwOƏ~g}ʓ!EyV˛V,OTvS:Lu0iT.S]LujAQH5 F!ըTjTS S S SMSMSMSmLj3nTS:Lu4iT.S])'}w(y!}wH9C+CM5L5L5L5M5M5Mtw^`кtZn??oʺW{rן\Qww5ʛS$i9$)'ս$夺wT6Sm懽M\{<-[(f.S]Hu I9$)'ս$夺wArS S S S SMSMSMSmLj7nTS:Lu4iT.S]wTR;HRN{IIu IxRٟ:OGz;r\xwZ,byZ>$yArR}yArR}yArR}yJ/"HnaaaaiiiT}s.<,/GY>)T.S]H˃T<9~yrR Lj3fTvS:Lu4iT.S]H5R̓T ,TjRJYI59_m3Efeay|QFY>%KM(OIu/5TRIu/5TRTTTTTTT6Sm&{+y/qXwZ,7eT&^jB9&^j"y%սԄrS S S S SMSMSMSmLj7nTS:Lu4iT.S]PN{TRIu/5TRM5L5L5L5M5Mu/5yڜOF[Aލ:~xF Wz/Cz<,/ϳ7IVRTk50000444fTvSM0aTNSLu2EqjF!(TjTRJQM5L5L5L5M5M5Mj3fTvS:Lu0iTNS]Lu^TA9ER݋*('սBJ{Q UɀawLuZ'y3q$oO8C=<,uPN{!y%=TTTTTTTT6S{u{E+ޫT[({J,J%OMu2eT_*T_*^^^jjjjjjj3fTvSMu0aTNSLu"՗J%'՗J!/WW)T_*TTTTTTTO)_|HEy!=ƠTrRc TTTTTTT6S=};?꽐EiUY>)?꽐妺Lu2EqjF!(TjTRJQM5L5L5L5M5M5Mj3fTvS:Lu0iTNS]LucPN{!y!=ƠTCJ{A%U[qzюKۏ~^|R3f/ĕ<- q%˻J}!L}!i~_+yX-_ q%o2eTOB\I/ĕTOB\I/ąi_+6SmLj7nTS:Mu4eT.R= q%'ӾB}!zJN}!zcV}2 { ܾo*Xφ?CW0oں]EG<-[(_f9 夺/RIu_$/jjjjjjjj3fTvS:Lu0aTNS]LuPN{B9 夺/WRM5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LuPN{"y!=~TrRM5L5L5L5M5Mœx2uٻ$5uyrk꿟IwY>)|P>n|2E{C9THrR#+Lj3nTS:Lu4iT.S]G:PN{C9THrS S S S SMSMSMSmLj7nTS:Lu4iT.S]G:H^Hut('=ҡTHrS S S SMSMS#|2هG5yv2'yT˛%iFIyX-'zj=HZ BjZ6SmLj7nTS:Mu4iT.RT 8H5 F!(TjTRjaaaiiiiT6SM0aTNS:Mu2ErR̓T ,TjVRJYM5L5L5L5L5M5M~KǼdϿ|kcnϡyXZ,ߟCs%OˇshayTO\Itͅ+6Smzͅ+yX-_ߟCs%oOϡ妺Lu2Eshz:B^Ht͕TO\It͕TTTTTTT6SmLj7nTS:Mu4eTΡ y!94WrR=Cs!z:JnaaaiiiCV2}ѻC{UL巷LnIy|JݡT;RPN+gw(70004444fTvSMu0aTNSLu"?T;~vrRH^Iu?C6SmLj7nTS:Mu4eT.RPN gw('夺ݡTTTTTT;U[e\iy6BwfT_IZ Bj-Z+Jjjjjjjjj3fTvS:Lu0aTNS]LujAqjRBQH5*F%ըLj3nTvS:Lu4iT.S]H5R̓T ,TjVRJYI5 f4W|ýiv~+^n 腼Y>)?/zy 97};S S SMSMSMSmLj3nTS:Lu4iT.S]zBNM@ 7yзJM@/Lj3nTS:Lu4iT.S]7yзBM@/zBNM@TTTTTTOsxmM,ϟ۟]b'W|ɿv<-~;\1ڸEIy+nTvS:Lu4iT.S]Hu*)'=URN{TI9Q%Lj3fTvS:Lu4iT.S]Hu*)'=URN{T)y%=TTTTTTTT6SmMj7aTS:Mu2eTrRݣJIu*)',TjVSRl)m6[J-͖*ǚm>z{ֽ?~oxyQfيrR'[I^IulEޯ{Q;2Okk[7OO^p*+iՕ[(}uTS:Lu4iT.S]wT^Rݻ{QN{w/+ݽ(70004444fTM5o_XW^,O<,/gYnT.RCIuE9ݽ('սT^jjjjjjjj3fTvSMu0aTNS]Lu"ս夺w݋rRݻ{QN{w/M5L5L5L5M5M4{{Ofo?i{ɋgoI헓|Pnj7nTS:Mu4eTQ夺GuRݣ:Iu$Gujjjjjjjj3fGbyZ>(ay|Q>rS]LuQN{TG9Q夺GuWRݣ:M5L5L5L5L5M5M5Mj3fTvS:Lu0iT.S]LuQN{T'y!=TrRݣ:M5L5L5L5M5M4{_^߿yݗK[>oO\e.cLJn{?鯏_C/ݧ_n_}//ۧw ~2߿o߼/ޗ7=Tn./?Y߾ ȃ endstream endobj 3641 0 obj 14101 endobj 3642 0 obj [ 3479 0 R 3480 0 R 3482 0 R 3483 0 R 3485 0 R 3486 0 R 3488 0 R 3489 0 R 3491 0 R 3492 0 R 3494 0 R 3495 0 R 3497 0 R 3498 0 R 3500 0 R 3501 0 R 3503 0 R 3504 0 R 3506 0 R 3507 0 R 3509 0 R 3510 0 R 3512 0 R 3513 0 R 3515 0 R 3516 0 R 3518 0 R 3519 0 R 3521 0 R 3522 0 R 3524 0 R 3525 0 R 3527 0 R 3528 0 R 3530 0 R 3531 0 R 3533 0 R 3534 0 R 3536 0 R 3537 0 R 3539 0 R 3540 0 R 3542 0 R 3543 0 R 3545 0 R 3546 0 R 3548 0 R 3549 0 R 3551 0 R 3552 0 R 3554 0 R 3555 0 R 3557 0 R 3558 0 R 3560 0 R 3561 0 R 3563 0 R 3564 0 R 3566 0 R 3567 0 R 3569 0 R 3570 0 R 3572 0 R 3573 0 R 3575 0 R 3576 0 R 3578 0 R 3579 0 R 3581 0 R 3582 0 R 3584 0 R 3585 0 R 3587 0 R 3588 0 R 3590 0 R 3591 0 R 3593 0 R 3594 0 R 3596 0 R 3597 0 R 3599 0 R 3600 0 R 3602 0 R 3603 0 R 3605 0 R 3606 0 R 3608 0 R 3609 0 R 3611 0 R 3612 0 R 3614 0 R 3615 0 R 3617 0 R 3618 0 R 3620 0 R 3621 0 R 3623 0 R 3624 0 R 3626 0 R 3627 0 R 3629 0 R 3630 0 R 3632 0 R 3633 0 R 3635 0 R 3636 0 R 3638 0 R 3639 0 R ] endobj 3643 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3642 0 R /Contents 3640 0 R >> endobj 3644 0 obj << /Length 3645 0 R /Filter /FlateDecode >> stream xTn0+)qE۠=0"8/-lQD/ű驉(,3GЏQfȣ}Q b1(@¸[# ;5s a行g.=OԚ뉏,P!/i;^(PHtx9<=A=YSgHFA1e,I_)_Iڙ G6QKTUzP#birŢb> endobj 3647 0 obj << /Length 3648 0 R /Filter /FlateDecode >> stream xTN0+.hz!"q@LD7#xIf q@Rhƙ\p19% XByj3A96@8O# $-of[rJ[nS#}}r~LyA#*vТB(qpFy#bA g׍|1j^P:U`4Rr$ >᤽<.$$"Kyp^p {3G2FENi."DF],S۷>.FcdլSc%_ U(Ltlm>p62]o'4(E&*(ޭ1Jl_'O|ܹ0aA#⨺?>U endstream endobj 3648 0 obj 421 endobj 3649 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3647 0 R >> endobj 3650 0 obj << /Length 3651 0 R /Filter /FlateDecode >> stream xUMs Wўϙx&8,˚(y:/Rl&m]9]F*!xn1 cFXHX]zi>ѡG3huĻv)*x%2Eb!b!&)0XavigiU-*ћl揰60me ka}^┽1nk%c#I]}5K˽婼ntrVN岰"/F3 ca#Ry6LAiHBR5crJ`q?,lK >6{$fDc_|LQ2VJ]=m}󵯩eSWݠ> endobj 3653 0 obj << /Length 3654 0 R /Filter /FlateDecode >> stream xUMo0 WFQ$anY%Nb [AQHqok$R>z|" uXLJ|ZCI&(Aa!,Ǯ~nmLm+r+'pp6 U&<>}K@"R*L1Q`4\ee*/k­f?CZ{h_zA}P$}0u}uZx/#jMOgjZ(0,ʗac$cbz[IT1^7T*nVk4Y/6Y hn>]Kw,( 5:Pcd\sAF$jmK%c+f~天S_]TQ7fX3PQ m45,FlOCaUr he?f|']n6;$QH~&ȗ/1qLäb3NT-S2$N\/M" U=Bf U Hr"-PM eGWPqoVdVgQ0jV~BmN0HOgshmO^;}e endstream endobj 3654 0 obj 603 endobj 3655 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3653 0 R >> endobj 3656 0 obj << /Length 3657 0 R /Filter /FlateDecode >> stream xVKo0 WX5I~ءn9JbSY~(ɖcmڼD2$#!c@}8サ GC #!m4E^PQsv5NOOzy7h]=gu?Qzއ!0 MO-OIBJiCB|nfWe)$TL3{"HQ(MF}YcT]|fK3x?11w5 ơ<]c4HX&߉Ή pSʰhuqE8ǀ<~ע9* lBBk}%J5!] .'h)H?du M'g4"i`-> endobj 3659 0 obj << /Length 3660 0 R /Filter /FlateDecode >> stream xUn0+h’B@)=pb 8(ȒCJhsw(nOI$ۢfy3?y (W!$t= #!aQ=;ңͻ@txΜ#zQ ]Fa}Zx(,\Ї\ڋb kHPiW%T:)W^M``":/א5ekt/T>Ly_m<AO^ZJ )ŭA.NlF~R8'p™O)D[QU.oKKŘ\"]BQP$5te&.&c4FBJ(BsYLnUȝшHKgd9wI@hoZ*ksIJŁۤJ`}V&C8 83׭xF%Lle7Wc7iɚ!o[iVwGT;7ҭ֕gP<;t h L , 0p{7 hzI4oa)x0#F7VW7G endstream endobj 3660 0 obj 595 endobj 3661 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3659 0 R >> endobj 3662 0 obj << /Length 3663 0 R /Filter /FlateDecode >> stream xVn0+h KR+S Czse S% P;nEq{jb&瑳 ԃŀsi_pC19)\CpEӘKjfdqvmѮKYZwnwh5:$b>w_\`V@-$`.Ե! 6a5DyɨLsy Em{X}L8]t]:U;+U(ϫlUu|zq}ϯZPӋS}lt\]ΫCKLnN8)eymdqF<Ǟ9 9Wxв(L:!UP&(aQBf<@lBOy 1I"930Bx> endobj 3665 0 obj << /Length 3666 0 R /Filter /FlateDecode >> stream xUMo0+J[_`[W!H{h%$A"NVw 8 -$1oތ@qQ$M'G/> endobj 3668 0 obj << /Length 3669 0 R /Filter /FlateDecode >> stream xUKo0 WuOtYk1GNdE(˲c/vZ'YȏP|%1N!}uf0gԬ(2up)WɉH4ry4W)RC Q*{;Dž )QQ Uک&bf4$I<$>[SjN>;Lħ 7|WFf9P0$jqb֢C ˵_R+YBZ54hG vFW$ 损>:Ʊ3<.?djU)0'dW\wMMpslؒx7̟f=LuӬAԣT=c:mFM- v3eCUFEp"d6})$գL ? Y1J;bVl uИ =ʹ9hfNጏ,պjU[cyZɤ3#?@sh{UyҎ $\!/ޱ̪y~? endstream endobj 3669 0 obj 710 endobj 3670 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3668 0 R >> endobj 3671 0 obj << /Length 3672 0 R /Filter /FlateDecode >> stream xUn0+hXZ(喢 [9$9d IS_ߡjDLy|3> (b> endobj 3674 0 obj << /Length 3675 0 R /Filter /FlateDecode >> stream xT]o0}WVZk8oUJi:CF %&jH #ٞB˹'-J3SQP CTH`>a nqWvl/[=!x]Y\ׄso6oJB}Pp}iPC@8bnb QQ5Ҭ/$J$ޛ:@ٰÞU7fլWn> endobj 3677 0 obj << /Length 3678 0 R /Filter /FlateDecode >> stream xVKs0+ĪIǴ!Ɂbl3i}We(l>ݔ@qAd'\Bwsu-Sg+mvó=ZhU5 bޯw$0 MG-7D3I)4ܸjeiGeY6P]V_.( E'v =uPTU7F)˓89羚?u2 GBQӋM ,j^BKdռs™a`Ԃ1A"h5\ |, P}L]b!YsMF%5(J p'%Ìh@\QL3(ز 0!OJ:-x0!QJlh2"hٰ>m&&T|(ONs'>l%(YXpI b,y-ꮵgYoI^g6ǡ5 4aHJ3Ny=!!4 J fZB9U݆8}`P+LgK*׊_L; SV8 C Ǜ䷛զ`$jD09jIˬ_pseδCqM FH!_.-s+@qYwZX0#C"K,ɵ'bh?l';W fzy,ܵ2IX endstream endobj 3678 0 obj 765 endobj 3679 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3677 0 R >> endobj 3680 0 obj << /Length 3681 0 R /Filter /FlateDecode >> stream xUKs0+$ osL!΁`f] KZe0xA%]d !"I!; `oݱmwΩ; L@{%#tnfYYqEX\>Y]c5êut.|\CN˼ɶsau1#f7(ɏR|B"2ZC]|+ .;j}*@ endstream endobj 3681 0 obj 668 endobj 3682 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3680 0 R >> endobj 3683 0 obj << /Length 3684 0 R /Filter /FlateDecode >> stream xVMs0+hOUiiLϴ3qƘ)]! FZiޮ$?9 (!"˭dl 7蛘ѬQ>Р*oS&j++,ֹo0wQ;iyDBSJ}BH][\d)r U\0 D]*+RXfZ.=\ߘT &dSx?4wݯ?[i]%ܗ]#5XAfz"i]FRq™K)9a \&!#bp]U|]55`ʂ ԔoQ>YmT H$( xh㥣tŤka1Vr̓"\xa@U&l!~DЋ"b+`CMf]d+WU=!d/8 YcTDzVԒ?2YY:j Mܼ v" :H;V)).'UoH1Uf{lq? ֡0ܓɠivy3+~'E ?fvlshzIYCocn}.A8ХK]VYqnse'u,ށi*,MFS;1-;+~=mԜ/8lJ w,> endobj 3686 0 obj << /Length 3687 0 R /Filter /FlateDecode >> stream xUn0+5E6-[9$AL,FPv{j"&>_߅o␽@rbQ <$_] CC:smڍa`̐W̌< b3'+eaWm6[c3s/V7h!/!QHOԐPD1PM7a$;'f5ƪ7r endstream endobj 3687 0 obj 631 endobj 3688 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3686 0 R >> endobj 3689 0 obj << /Length 3690 0 R /Filter /FlateDecode >> stream xVmO0_qA/yb&1*m)n)uB ;IR Z}?{ (~%wDDbA'<@Ea@cjVUa_({׷>ϚW|>μ_`f G-OHJi &'aSʢKyZoaՙC:WKX3Xl*;۲+<rNV ",14Be-IYjvdǏ3A)0^$# ɅH<>5YZIHRWXUZ7+H{Dya %a>"kIU74A!I"t0q~6orU N'm弛!)B:Z*qc0$jp7/]=Kƽgu5 rW.RXa7uU䲁刺f?/~;bM^G8c?&1F,6NNUs'J7 8ͻM׎65#=Ap*;ra>Y@[t]t:VA#~ubpDBz7cG맆>a<[Ucsce:Cs4dGKR7u9rplfuF|,<9ŅMK3dv^zT9z:x4ML'Բ* #{SYYײ0Q&l/T4,gA}o]ś.鞻;-Ҙhq{zMy*2FInrj; endstream endobj 3690 0 obj 844 endobj 3691 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3689 0 R >> endobj 3692 0 obj << /Length 3693 0 R /Filter /FlateDecode >> stream xWKs7 Whel}K'IǽLqieq*qݕחKJIaU?wGQqX_A!ɧ&S3eF/j?aq^ej?D?rAŧʺQ -0ux?Un|ȀQXm="%(Y%Ix5:nf=VB~6ϰ݇HsRdiϰ=IG T ?T:?}&W 8_dP U[ er?5R 23IKH9,*.CsՈQ`e{Eo]TE %:%觛M-cXsa<żVK3R.9m|:4rp dyE2B1Q/sa]zղzI WRXWr53sjfh&ufխS;M 1Nr6Ffs)$5/={is-@5:Qy2HƕBwMq-rrZ{T˸,!ܬvwU:6eP`ڇ}]ur=+4CThd>sΟܟj$7#YsDY ykX*Zt,N|o6Yhѻ٫ڷn*pm#RR}eߐX*59SG&T2g:"!Q`z&lg2لf:8]a5Q06˜S%$G|ѳMLew6V(>ū93c `]lֈgciK=$L+ve.|AzDQu)Uh0ʞ;M*hcQtj4OuH~T9FBej~@af{Q3 ].f@=De( ؽu٨yS&sY.[L9y3]|&`Tǟ` endstream endobj 3693 0 obj 1083 endobj 3694 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3692 0 R >> endobj 3695 0 obj << /Length 3696 0 R /Filter /FlateDecode >> stream x͔Ko |9&%VIܢ:!ʁ:^k6+ʷ/c20<讝r:Ecsg[.\'?wWtx8KNZx&=A'/N}sz dvnE/@[t{ƿ盎rݝ)۔瓈А%OhQp!^81ˠĎRFY(toAӍܥp\,峛v\ 9Nh`&`N\gk #A,[6>i줭fȨĴ'mxHL"9?zт%1 ߖIG,zPWRåkg.mu0s!zM%uĿ/+a endstream endobj 3696 0 obj 439 endobj 3697 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3695 0 R >> endobj 3698 0 obj << /Length 3699 0 R /Filter /FlateDecode >> stream xUn0+Rn-Z 0d (wH$N{i$go}龴8Ha2x n7^i}B;[T-%tEx 6w|W6yk a1x$pBK|7*GXTޔZXT-̿DIbD0KeJȵjj]A]Jޘ6ʗ@wsSZH r:,IڡCR*N4;WWV*PD$.J!Lr^Y$:Bȱ<?C6T!gUn`Vx@˃Vڀ#yh$I< >{TzoJ]gLYD x9Upc9 ՘sqƒvqn?*b4e> endobj 3701 0 obj << /Length 3702 0 R /Filter /FlateDecode >> stream xTKO@WlgknE*EqA9Nb)YQſ=lk}o}>M8XҌ! ń&c>øc>a >6; ·%$8Of@CņN.W ![=I+4KFD1)x vpu)eϛVU P5d?8)MM]m!Jj:+_zެuDz!g㖴-bXCi%0%e y&סo6znʁLp)7^\S"0?N ͦ)1Y'"XdƘ(|u0PRhXj]ztM],NKrjz D:eQ[j?xsqQiǻ,B^w` .$Ԟ~*mJJyz]HJ?~πw 3F GFǞU_𱝉 endstream endobj 3702 0 obj 505 endobj 3703 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3701 0 R >> endobj 3704 0 obj << /Length 3705 0 R /Filter /FlateDecode >> stream xUKo0WⵝNz>BRU()46[;NHBRmx1 c{9` $_t! !•~GԭsZD3G^\8ƽ@臊2>}Q.[jyHbRJnsV7r Ga~.Vuls"0&"c xJ O-_}#Fe_fZ]q}.(a'+_S ~@Ԧa]IT- a$> endobj 3707 0 obj << /Length 3708 0 R /Filter /FlateDecode >> stream x͕Ko0 3h> endobj 3710 0 obj << /Length 3711 0 R /Filter /FlateDecode >> stream xTn0+.)R$skC.ze[M9"ߥ$&8=5dQs3}m8hi6@H&ƅv7Ƶ0~lWo-KI:wpLF a|%*ՓB1"†Kl7?r[6:)+aUp[_%Yr#7 K+͢P:Vky2rԛ!^h6dؒNXqڪ y+ZW_.:NM "rbՋ+CP̅cL)fS@/C*,Hka4eYН郫Ԟ1cVk3aӞ_/_OIԯ+\ϩϕe)ُur (`RpDeneN'Ѧ񌥨 %3mO($K3Frx:i2/:pdfp fqN|ojǨp endstream endobj 3711 0 obj 519 endobj 3712 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3710 0 R >> endobj 3713 0 obj << /Length 3714 0 R /Filter /FlateDecode >> stream xTKO0Wxg$!aY"Ҵ:BM$#,,Jw}h *C c!;/g,7k?~DW׌.O! h6)?Um2|O32DdP҆KBM-GX]ޔjҭO!yĘ=I[K+mt־-H~2fm}mV-ZAƒ-Ķ dh!l̹>?\WTC[l BB$00/JI\2BJ=Ga<4bZVa?PQitd;_վ0a*6֦8Y_DH,>E cSbEjXѺ\ٌ?>˻]J" l ԲhG2Cr zn3ʿX) ZG.ŒN=;9 endstream endobj 3714 0 obj 504 endobj 3715 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3713 0 R >> endobj 3716 0 obj << /Length 3717 0 R /Filter /FlateDecode >> stream xTMO0WxNō~H+JU@BiZ""A,do@ѫ"HYj q@$LH;a3 3v7cqGWׄ u2ZL U6FI r$awSE˚r6U {_5?2q5uUBvw[{(wQ#b.>z6eEAf!cK|V;bh4UhIWh\BKGܭ==ΧlV[{/aþޠMż~h@S¾z C:Q endstream endobj 3717 0 obj 503 endobj 3718 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3716 0 R >> endobj 3719 0 obj << /Length 3720 0 R /Filter /FlateDecode >> stream x͔Mo0 u9;,IىCCRČgu(maj􄎜[B$!"l^pq2H"9g)$ \ժppMU[S*6z"D$#{mvivDŽe2ͲDC8L ,ϖ/ØE)ՇfnvA8cIJ/h:oF-M?Q}RhgvjCGj C .y߱jݘV./~sZYB_sMu׺ΦTVYvПGxIo©C7=G^5aM8LB||e -i endstream endobj 3720 0 obj 558 endobj 3721 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3719 0 R >> endobj 3722 0 obj << /Length 3723 0 R /Filter /FlateDecode >> stream xXmo6_6p$EQRt؆%vQ uQ(2- THJ"%k1,N"=sw/3|n%J/!O Eq|/]@.-QvIw5"Y1#~#H ̄WQ"ʍt\~x#Jzge>OCH}1>wMg EdeQ]Yc#ZD 1!<)<&:CIY4UdW5 imQK^d`ݐÖ gSdЧ.`0ν;էZ62/+υq,AШV Q6cdD+ˤAU(mBr+q< BSQ>YݹF80 ,А|enJ(i"B Q@7qTSQ`N( W*=d ?шb„צ]ҫ^SV2cECeUFa&=_翿('>xWS~ӱuW MeTٳfa9#4bdxnC4_,qQeڦ?==f!EԨ ;b`I h/s(G6WΈp񾒐 SPQn=U\*+m)KuR`2`lW@֪:buXQ W訫k}Wmh=Wkn3;.qaS0_C\j7o؆kCy~U4ɿ)l¾3\~5JW-5-۶nV6Uڴҁonk zoOVw-8x_w_a7kzuuv$8J*qo +4#h^a`|#Nd˶j}Er`3E#ar-|:Ёûb+<+ Vp˥.K0옛x|3%jj7 'H֞ [)pe=o I&s?rýS7fU}f7 endstream endobj 3723 0 obj 1131 endobj 3724 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3722 0 R >> endobj 3725 0 obj << /Length 3726 0 R /Filter /FlateDecode >> stream xUKs W1io}3=$Dɿ"Y6e.~ǀse8吭- Gcފ W(;K?ʣݻD4G<w7z7@車4({jyHRRJ<_U* uu#8^Bi Ӥ7jd2.!+Dӂ˶u>bgw-i7& oƒ;pǶoɈQ.85F0E-CrY# 8̧aGaR'~zhy<5 fݠDb׸^@[L0NSebJ(ĽJ׭jHF$1'h/9kM|eiĬ~82f^] ƑH”D *>Ftvݲ' 31 endstream endobj 3726 0 obj 701 endobj 3727 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3725 0 R >> endobj 3728 0 obj << /Length 3729 0 R /Filter /FlateDecode >> stream xVKO0W$0oiom-;$Ivxy}ǀ}q!+A*FCTVtx=9u3nLgߞ(nP>w7^{W{y]|QX,," y.nN~YU( VgV6JN`sKB( ВatύЍh[P jz/|?zW]~]Ȏ?1y5d)G}F],H 3Rq{}b#4bo}r v-aUQߕ)A._ LF$4xIݺ/ W',ӿ!o7^?իDc2L6aJ#e:.s&@QV[0K{'\,ͳ̻'EL?$M!&UHrYqply8tyV B#F@a,FI僬f+MU+a'Q٨Rbkh(d.b e,gcdMގr M;2Y-7?ntӐnpR qZ2;aKq|6t_ =1珱l<̨w,Գ[QGgQ)&Bƒ]LNqGzdKZg;FI29#?xj3 Wa endstream endobj 3729 0 obj 747 endobj 3730 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3728 0 R >> endobj 3731 0 obj << /Length 3732 0 R /Filter /FlateDecode >> stream xVKo8W KRm{ "`%"VUJ%Q/iOm%9o>PDu4gh/0٪h az" pͨk"^A. %c~r#9ƈt8.в4&Y. pط54lOן៕ %2 oDjV5** -Ɍ^:l )лB\dI@-%A9:0Rq2 !ݝlK3M21hHR^vQ bG'KKH k`ooT=I[![ TZT,7CD wBs1$IRs:#7@CI4eSpmP3V?^V _?8"=9~O}| 3 9N2X)j^lo~G(_iѨGQSB(&0;!в[e8bسPImL\4$/؉efow뫾9Sf|$,Sp_#kM0FZeix8"/?~6LO8;/MkPL(% (Uw` endstream endobj 3732 0 obj 823 endobj 3733 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3731 0 R >> endobj 3734 0 obj << /Length 3735 0 R /Filter /FlateDecode >> stream xVKo0 W&ٽmحhal%ة$G"N֤O"E~(?.݃g q( qXY pE/[Qu1=DAu@З;1zzs]p{yS >wcD ZmԲg4&)Y> vaqoU ڴunUSi4jWg%ńDI!LrbFFn*BjT5[[Rػj]ANKwБN}a)0Á).dmro˞E)f4$B@NF9 AҚ1~>ii[ 5bKji,ͦVkpYa~1 Iz'8If!߽(3f3tPYt >3LTM]/ YYя c u=l|f3p88Tm{6ٜ#P:{^EQ❖Iє"/Q./ISLC7eɵڻTr21JHiXq@+>ۤߜ=J!/_HZuSz RfRzA!.:kŒsd QE8> endobj 3737 0 obj << /Length 3738 0 R /Filter /FlateDecode >> stream xUMs0+V`eBi:-fzsP06ɿ@8&α iv~(~6 {0 C4@C /<aG9vx IC=6}+bm> endobj 3740 0 obj << /Length 3741 0 R /Filter /FlateDecode >> stream xU]o0}WVZ=y۴u&UEC[U;gC$hOkC߯맀vυ#)x"Q $D4rpg~ݯ;5 T[ps<:$UnV4x.Gj@bIBH(5ܜ]+4@dT tnF;ͯ+ԫ/G[pň;m-hXmPky}# Q0&y/йO+($Rʧ|>EV(%+(Ͷf \J&՗< 4q, =8==WSTaCHD&IBPCֹU[9DvqC8 N3]lmry 蘥]Kf'Qòtܕr]{TyվRY-oӋ$H!N&>7w'3\$0&]/M?N`B,i.p{kxKa mnzZ?pzc🕕0,GI&et˪-= ,u75סyE!^;|Dl]+xdN_ܛ/fƬ/1 endstream endobj 3741 0 obj 644 endobj 3742 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3740 0 R >> endobj 3743 0 obj << /Length 3744 0 R /Filter /FlateDecode >> stream xU[o0~WVZ= ӦP *4^S0w Iȥ&MZ Qs||1^A{Za $?܅XZt= A݊_=qz_^Q!#̭'^ ]Fx`H- H@D|CR䥵L&"[e }Kvgy */b=N Jcd_QT7^]^6If 5K|V@+'2ĽH"P䡙)r_!<']+4#LT5ھy֙j砫ijS5Gw)a{\IJ0t\u9UnjbAbqȣA('\3A]Y 03-:~]3!I8X@o5թ]Ni  i*Bn!3`ޘYUVT\/;NGW_U5vsDpΉ`]WQpD﮵t (<6BF[FviQHiUNFXu9ĀT)FJGSxFC]]~ڊkc};c(ET;x[(2Qdco:b 艖GfctC;?Y.wt*h6 Ƭ )| endstream endobj 3744 0 obj 686 endobj 3745 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3743 0 R >> endobj 3746 0 obj << /Length 3747 0 R /Filter /FlateDecode >> stream xU[o0~WVZ=8ou&UECSU pU!rC{Z Ql;χS@BRȪiX0 ܱp?8 e{> endobj 3749 0 obj << /Length 3750 0 R /Filter /FlateDecode >> stream xTMs0+">@(LiIC"|_ ;) x,YziWb h 0* -p,}nE1~9q Kp{oѕCtcM< cp(B[K  g= n?m;]&i IVmv{HnN;ӽyH2rZLrw>q`H^٥҂ʺŷՍyЗm$K:='1FJ>DD;)q;a@8ti~#Bú1%8 0Pp'6 =B"ecTnv U'+AXΈۘ2N'kw=ޘ IX(%muxnsSF΀' A;'g^?Bt5yfxl"E s¯,i-K"4ЋMdŻ. δߣbWhȜg H  <{L endstream endobj 3750 0 obj 530 endobj 3751 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3749 0 R >> endobj 3752 0 obj << /Length 3753 0 R /Filter /FlateDecode >> stream xT]o0}WMZ=q-mmbV gCHJHОB8r7~BAEch~7؟(ӯxX{ ѡ]< 0l/Iy'iDbwbĨdF퓴Ĥ-FpV5!|KFy3BY.>QEZi9n&сGPZҩFmeiS y "J%r&NUbq*15@8'9,t[mpՅ:CgJc(9S@`EW@ MRv IKhܓ.f;P8YogZ"D1RH{iKfwH$lv < t~4<)Sz'gFnM/Lp2荍˜Sƈ0We3SM"N L( [Zڨ. T>> endobj 3755 0 obj << /Length 3756 0 R /Filter /FlateDecode >> stream xTn0+.> !ڦmJ}eOD2Dywp@ Y&kwz A䦱lSUúvR!'9Ώ|HJ4՜(ftnL&H:$) dS$SI4re"rS_6ϱw]^m[>C:c\/58?k˦ @3%8bޱE:vѹFʾ::WCq7g]T6{Cc =Zy`.:P8͔x  endstream endobj 3756 0 obj 522 endobj 3757 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3755 0 R >> endobj 3758 0 obj << /Length 3759 0 R /Filter /FlateDecode >> stream xTn0+r))Л=A@۴B[DECɲEFOM$Cfy8׈&,pc9uX^tXKx`w^3*# ߢgD' T(4.2Cx%" 7ߺ"5-}n۪]{ kzP`=.Ӥka3$SkAjDuSomMj=%\[& 9LPʰЇPD]R4”s}l//CVf~BWm|V`^E yV:jS*T gGhJ ij՜HbtbItVKiDR!~|vY1iZ&5Q4FcyYUncڵߝmYVE>&KlH(wSm5ïoaU  Q"}a] W-mR <5#dwBcI/-Gi.yɤ823^FIr0ݕSU _s1ĭ endstream endobj 3759 0 obj 558 endobj 3760 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3758 0 R >> endobj 3761 0 obj << /Length 3762 0 R /Filter /FlateDecode >> stream xTn0+b^4z3"8hȒ"-%EˎWD2Di8ׄ*,J3.5FA1r*K=pX<`QoqX#~%U=yx)Ib>6&Oܥ@VZ eL@F8b/27 䭩\iɷ|7E)ҷhTnt(aoʃګ5m=׮3 isj9"@0(GClwK".Iza̘ڷgᮨ 3IO ƴMۢrmhtODʐcq\ ZeZKEϥk!~re7Y}ôT("3Z犺:[\?u mLJ+I(_1om\5gLy6͋:xY&v^B/e] Қj@1GJ㺧 _ILJ*̨-a>c~p|\1Z\(l甕B> endobj 3764 0 obj << /Length 3765 0 R /Filter /FlateDecode >> stream xTKo0 W-a` vhBIԃ~`v`9EG/ ]X0[%/[ c0Ixp@XUkh ?uB[$]o8NF'DFa|*_S`^Z \BNPf]5kW_P|OGy Yޣ_L4tǟ"]+IuN'vnUjTKl%jzj7 isDe.(-sp&(eŀ9D}}$4$~¹:5PЌ7/K! ƴ.g[plODyى,˂ouݸZr3Gd\ICJjcw!1yL&rވAse,c M[igSXt;QEZ6΃Yx_ 93UB0G+/^Z˕s:ȊK}EڎAgA 4);Wߣ4 q#lڽ9 $?L']k endstream endobj 3765 0 obj 561 endobj 3766 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3764 0 R >> endobj 3767 0 obj << /Length 3768 0 R /Filter /FlateDecode >> stream xTn0+bE7B{NDTZ;-;^S'>>4+nQ<1FԻ/5pDIpf04c~Ø!^G,7^Ÿ"/7h/|W!<×8B=Z-TL .n./ڵPs׭[라%,Q_N4Ua})v'  {M5ZrK-jj꯯cZֺ4;siULp)tŴNZ'B}> endobj 3770 0 obj << /Length 3771 0 R /Filter /FlateDecode >> stream xTn0+ KR)X-Лa=A@;@iR/D2Dy,0x_Aiu(C,‘E0 3~w:#J34 JUH>ˀQ(2Mxrr.n/uaZ(:S묿GN`'h4Tǟ"})MŤzp8% +mpBPcMڮkMKZ9hR&!w#e'!}ƹ'sz^A 1VftƗM= ,q)E1DC uR7+@GkAʵ<B2AC4n#bÐL("sŠ1sh1v-(tW+IX׼nѕ?-c"84ۖLeYO/΃YzAи0U'2o#K6zR]6rvmj_.2 znJCkI16së@a.:9 E/ endstream endobj 3771 0 obj 555 endobj 3772 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3770 0 R >> endobj 3773 0 obj << /Length 3774 0 R /Filter /FlateDecode >> stream xTn0+r)hS7#B{Z,)ܢߡ6GS _"ha^z b&  "o_a :lGTDFwԅA!]Fg)>(뽴)^n!߸mj+Hk[6e ׻oїt[0x:84i[i6m&݂N8%;Vh4%rno}c+RY9qŪ2 gRDG.~"*bC{y"ڤ0r]m_DД(r=tKQV>9HbtbIt "iX)mscVyIMT"]^==Sj6|;XS~:?CZ&i_Y\) c"94gTm7pv }m+hJX 5x[<O|2Ē^ߣ4̷8h?a+1 $J&g7V5 endstream endobj 3774 0 obj 531 endobj 3775 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3773 0 R >> endobj 3776 0 obj << /Length 3777 0 R /Filter /FlateDecode >> stream xTn0+ McW7B{vhGl)""ߡ;򆞚H(?̛S€}m8,S1C,U$) q+wtX;/3$%w> Ÿ37d/bJ>|K-3qW&!#xqp{1}s[C؍/mޅ;ȿ'_n;=i.Ӥmɸt n$S^ j fK)jnn|5K̑D $' J8ΆGOCsO0 f%t.gnQm Tiv9Q1˄ufT/@5G`$1:3F#(?qA$*EGag]2ʤ1ۢG' 1Vxt!6m ;/?a"~ES\4(oڌ-yep ,cOiNT<ʤGL\Ur2(.9nY5ni>J )=giPh?sÈ9vo9#Q&$/a5 endstream endobj 3777 0 obj 551 endobj 3778 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3776 0 R >> endobj 3779 0 obj << /Length 3780 0 R /Filter /FlateDecode >> stream xTn0+b^@oFӵYRDEC-v"&!O彙s Wq0ޅx+&b{+Wv8=~Fe-'tNx hxMw¯S}#2.DA¤o*jHEV _{HG_ޒw{ ]$gXJf2I@f^jE[ ԒDuSoՙrދsDlLpȉiлVIjC4?0WgM^~BP*r!o;Au$2eU܏V1kkHzυB2m]ȊDa2L'ZC uۓUtɠ;klVЧWo42|Q&sb̔{6-yxZfnQ5BOUX\א/"C w&y3)32[Ð} c~p]2ZL8d1> endobj 3782 0 obj << /Length 3783 0 R /Filter /FlateDecode >> stream xTn0+ KR)'Лa=A@۴Vt}IQ#?H)9r"7~ªz1D!8808E7;~DUktwе<Tlч,z%!%ݕ2HQL(d%]͟eZUBٺi[9uD}Qԕl\L>@1^z JV[ԴR(cX0,F%1%q ~={=O J1N`nUkj ^jUM^hz!l t[z+zH+ #kv*8""4N$4F eqWNީ$aI)\MmL^Wws,tąЯUC# k~f捝ƥ2F}!umV3|+U66A[mm^zVM.ԛգ{ QSڄS~coA4 rB0JG 'bceWSa endstream endobj 3783 0 obj 568 endobj 3784 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3782 0 R >> endobj 3785 0 obj << /Length 3786 0 R /Filter /FlateDecode >> stream xTn0+b^@oAlӵRm%ˎWDDiǙy8 +`VFk .c \11nBa?mͳ)!|ᏲOڼEC)PL oi"o`u *.V |4=޴NL->A`^0 *Y3vu,NWf5C*@ endstream endobj 3786 0 obj 547 endobj 3787 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3785 0 R >> endobj 3788 0 obj << /Length 3789 0 R /Filter /FlateDecode >> stream xTn0+ McͰ Q!KHw(Yv =5 Q~phaNA1RL"ܳ qG~N?*-G$8M&wU)O>~MQȗ{i!S2 ċCnVnz!|Gy Yޓ.>Et47N8%;VU#hP-i빻6ާ0'HN82L4z:X?3!_"46 K]ήMUE0<9(*UfCB"&34D]v>7UTsB #љ1g=HK.DطRܸGwIMT&!O=&yfbE|w40䇭 mKkE_m~v~M 鮅:ŖE<v\ەraB g4'*weW.b}9}Ps[7 !OFdwTSI/-Gi2{`{)l4U*Ύ7V5_Ȣ endstream endobj 3789 0 obj 560 endobj 3790 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3788 0 R >> endobj 3791 0 obj << /Length 3792 0 R /Filter /FlateDecode >> stream xTn0+bACM*dJe+zJ" "8 _ Mf0_'/b>DS Txq @DK^8H\5y| ")IsC29?Tl]|O"T0

> endobj 3794 0 obj << /Length 3795 0 R /Filter /FlateDecode >> stream xTn0+ McͰ :Q!ˊHw(JN& J|3o3|P *{0P0Ixpbq@ }E㊺_c?&-EdHf=!]i}*_s`Kj!S ċCnU6az.o})w'h"&})MvI6O8%+upF`Đ[%^I,@r™aِ/ۣT!}ƹ'sۅyŢvٴQͰh{zfʏTs$n#х1t9 "iQ)7ndRUHc4VC鼯a+<:}]e5N|qFdj95FL$gr3::-]PkBevvo{N\s&%=%bC?8lNcVG 9`U> endobj 3797 0 obj << /Length 3798 0 R /Filter /FlateDecode >> stream xTr0wdꁄ̴Lw0"t-t0WB_U |st^" (`^zb*pXAoQt֯qXGe%z|r1B!6.>@^Z eD@B8bnm6jHEV ִO~>ޜw{.bHJi3u(arʁک{Z[f53k%1*sBl`QH D]8œ1uh/.}^vcVBWd实_sO%. =A!j蔲mnW}DDkɒt򥴔q"w!ķؙ1y Ed"V/B^cm^gwS^ƀ•&+I(_1?lT(b<6ͨ:o;¬6LuXI=~!X)>:PޮG.I29De,o endstream endobj 3798 0 obj 514 endobj 3799 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3797 0 R >> endobj 3800 0 obj << /Length 3801 0 R /Filter /FlateDecode >> stream xTn0+bPP)Лa=A@;r,Z"2H%ؑ7DDO3qτs9, c !$呇; 368~ w}x@A"rCx"_S62MG$*ֺHM icJ1j]C|OGLͯKѶbR-IG|OU-[T7"ԶvuΜpZ& 9L 2 :~}xDyX 1ι:$K9Ӹ|˪(L* 0.NWH8P"eUT}BTD'X *1(2l<ɤq"VZR0v'``ARb ue?6%̯>_ NŔE..vyU^*%!FMf89gkPڗCw/x {CoC v}Ѽ_2X( i2\HDp]u8 endstream endobj 3801 0 obj 527 endobj 3802 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3800 0 R >> endobj 3803 0 obj << /Length 3804 0 R /Filter /FlateDecode >> stream xUMo W106&UV-"^6K xzjb<3<,\P6S|"Y!83 '&%"<']&K0<&<\N*("^ ^ڔIײԫʯr7Vu_WhT ?Z)]S #`([iOQ샺򍬑oBN5[g: `QbLB1@fڭ8t}G 젗^2O]FgsY_T endstream endobj 3804 0 obj 603 endobj 3805 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3803 0 R >> endobj 3806 0 obj << /Type /Action /S /GoTo /D [3646 0 R /XYZ 72.0 720.0 null] >> endobj 3807 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 209.55 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3806 0 R /H /I >> endobj 3808 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3806 0 R /H /I >> endobj 3809 0 obj << /Type /Action /S /GoTo /D [3649 0 R /XYZ 72.0 720.0 null] >> endobj 3810 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 697.5 300.519 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3809 0 R /H /I >> endobj 3811 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 697.5 539.998 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3809 0 R /H /I >> endobj 3812 0 obj << /Type /Action /S /GoTo /D [3652 0 R /XYZ 72.0 720.0 null] >> endobj 3813 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 207.9 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3812 0 R /H /I >> endobj 3814 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3812 0 R /H /I >> endobj 3815 0 obj << /Type /Action /S /GoTo /D [3655 0 R /XYZ 72.0 720.0 null] >> endobj 3816 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 207.34 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3815 0 R /H /I >> endobj 3817 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3815 0 R /H /I >> endobj 3818 0 obj << /Type /Action /S /GoTo /D [3658 0 R /XYZ 72.0 720.0 null] >> endobj 3819 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 216.77 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3818 0 R /H /I >> endobj 3820 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 661.5 540.0 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3818 0 R /H /I >> endobj 3821 0 obj << /Type /Action /S /GoTo /D [3661 0 R /XYZ 72.0 720.0 null] >> endobj 3822 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 231.77 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3821 0 R /H /I >> endobj 3823 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3821 0 R /H /I >> endobj 3824 0 obj << /Type /Action /S /GoTo /D [3664 0 R /XYZ 72.0 720.0 null] >> endobj 3825 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 215.11 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3824 0 R /H /I >> endobj 3826 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3824 0 R /H /I >> endobj 3827 0 obj << /Type /Action /S /GoTo /D [3667 0 R /XYZ 72.0 720.0 null] >> endobj 3828 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 226.76 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3827 0 R /H /I >> endobj 3829 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3827 0 R /H /I >> endobj 3830 0 obj << /Type /Action /S /GoTo /D [3670 0 R /XYZ 72.0 720.0 null] >> endobj 3831 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 237.89 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3830 0 R /H /I >> endobj 3832 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3830 0 R /H /I >> endobj 3833 0 obj << /Type /Action /S /GoTo /D [3673 0 R /XYZ 72.0 720.0 null] >> endobj 3834 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 212.89 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3833 0 R /H /I >> endobj 3835 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3833 0 R /H /I >> endobj 3836 0 obj << /Type /Action /S /GoTo /D [3676 0 R /XYZ 72.0 720.0 null] >> endobj 3837 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 205.11 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3836 0 R /H /I >> endobj 3838 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 589.5 540.0 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3836 0 R /H /I >> endobj 3839 0 obj << /Type /Action /S /GoTo /D [3679 0 R /XYZ 72.0 720.0 null] >> endobj 3840 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 206.78 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3839 0 R /H /I >> endobj 3841 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3839 0 R /H /I >> endobj 3842 0 obj << /Type /Action /S /GoTo /D [3682 0 R /XYZ 72.0 720.0 null] >> endobj 3843 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 203.45 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3842 0 R /H /I >> endobj 3844 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 565.5 539.999 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3842 0 R /H /I >> endobj 3845 0 obj << /Type /Action /S /GoTo /D [3685 0 R /XYZ 72.0 720.0 null] >> endobj 3846 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 206.78 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3845 0 R /H /I >> endobj 3847 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3845 0 R /H /I >> endobj 3848 0 obj << /Type /Action /S /GoTo /D [3688 0 R /XYZ 72.0 720.0 null] >> endobj 3849 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 212.89 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3848 0 R /H /I >> endobj 3850 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 541.5 540.0 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3848 0 R /H /I >> endobj 3851 0 obj << /Type /Action /S /GoTo /D [3691 0 R /XYZ 72.0 720.0 null] >> endobj 3852 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 217.89 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3851 0 R /H /I >> endobj 3853 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3851 0 R /H /I >> endobj 3854 0 obj << /Type /Action /S /GoTo /D [3694 0 R /XYZ 72.0 720.0 null] >> endobj 3855 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 216.77 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3854 0 R /H /I >> endobj 3856 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 517.5 540.0 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3854 0 R /H /I >> endobj 3857 0 obj << /Type /Action /S /GoTo /D [3697 0 R /XYZ 72.0 720.0 null] >> endobj 3858 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 505.5 346.536 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3857 0 R /H /I >> endobj 3859 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 505.5 539.998 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3857 0 R /H /I >> endobj 3860 0 obj << /Type /Action /S /GoTo /D [3700 0 R /XYZ 72.0 720.0 null] >> endobj 3861 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 253.97 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3860 0 R /H /I >> endobj 3862 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3860 0 R /H /I >> endobj 3863 0 obj << /Type /Action /S /GoTo /D [3703 0 R /XYZ 72.0 720.0 null] >> endobj 3864 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 251.21 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3863 0 R /H /I >> endobj 3865 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 481.5 539.999 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3863 0 R /H /I >> endobj 3866 0 obj << /Type /Action /S /GoTo /D [3706 0 R /XYZ 72.0 720.0 null] >> endobj 3867 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 256.21 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3866 0 R /H /I >> endobj 3868 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3866 0 R /H /I >> endobj 3869 0 obj << /Type /Action /S /GoTo /D [3709 0 R /XYZ 72.0 720.0 null] >> endobj 3870 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 261.2 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3869 0 R /H /I >> endobj 3871 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3869 0 R /H /I >> endobj 3872 0 obj << /Type /Action /S /GoTo /D [3712 0 R /XYZ 72.0 720.0 null] >> endobj 3873 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 251.76 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3872 0 R /H /I >> endobj 3874 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3872 0 R /H /I >> endobj 3875 0 obj << /Type /Action /S /GoTo /D [3715 0 R /XYZ 72.0 720.0 null] >> endobj 3876 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 255.1 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3875 0 R /H /I >> endobj 3877 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3875 0 R /H /I >> endobj 3878 0 obj << /Type /Action /S /GoTo /D [3718 0 R /XYZ 72.0 720.0 null] >> endobj 3879 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 240.66 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3878 0 R /H /I >> endobj 3880 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3878 0 R /H /I >> endobj 3881 0 obj << /Type /Action /S /GoTo /D [3721 0 R /XYZ 72.0 720.0 null] >> endobj 3882 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 248.43 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3881 0 R /H /I >> endobj 3883 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3881 0 R /H /I >> endobj 3884 0 obj << /Type /Action /S /GoTo /D [3724 0 R /XYZ 72.0 720.0 null] >> endobj 3885 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 240.66 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3884 0 R /H /I >> endobj 3886 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 397.5 540.0 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3884 0 R /H /I >> endobj 3887 0 obj << /Type /Action /S /GoTo /D [3727 0 R /XYZ 72.0 720.0 null] >> endobj 3888 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 207.89 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3887 0 R /H /I >> endobj 3889 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3887 0 R /H /I >> endobj 3890 0 obj << /Type /Action /S /GoTo /D [3730 0 R /XYZ 72.0 720.0 null] >> endobj 3891 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 235.11 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3890 0 R /H /I >> endobj 3892 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3890 0 R /H /I >> endobj 3893 0 obj << /Type /Action /S /GoTo /D [3733 0 R /XYZ 72.0 720.0 null] >> endobj 3894 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 237.88 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3893 0 R /H /I >> endobj 3895 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3893 0 R /H /I >> endobj 3896 0 obj << /Type /Action /S /GoTo /D [3736 0 R /XYZ 72.0 720.0 null] >> endobj 3897 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 265.1 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3896 0 R /H /I >> endobj 3898 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3896 0 R /H /I >> endobj 3899 0 obj << /Type /Action /S /GoTo /D [3739 0 R /XYZ 72.0 720.0 null] >> endobj 3900 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 337.5 255.275 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3899 0 R /H /I >> endobj 3901 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 337.5 539.998 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3899 0 R /H /I >> endobj 3902 0 obj << /Type /Action /S /GoTo /D [3742 0 R /XYZ 72.0 720.0 null] >> endobj 3903 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 255.92 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3902 0 R /H /I >> endobj 3904 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3902 0 R /H /I >> endobj 3905 0 obj << /Type /Action /S /GoTo /D [3745 0 R /XYZ 72.0 720.0 null] >> endobj 3906 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 250.92 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3905 0 R /H /I >> endobj 3907 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3905 0 R /H /I >> endobj 3908 0 obj << /Type /Action /S /GoTo /D [3748 0 R /XYZ 72.0 720.0 null] >> endobj 3909 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 249.8 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3908 0 R /H /I >> endobj 3910 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 301.5 539.998 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3908 0 R /H /I >> endobj 3911 0 obj << /Type /Action /S /GoTo /D [3751 0 R /XYZ 72.0 720.0 null] >> endobj 3912 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 239.8 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3911 0 R /H /I >> endobj 3913 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3911 0 R /H /I >> endobj 3914 0 obj << /Type /Action /S /GoTo /D [3754 0 R /XYZ 72.0 720.0 null] >> endobj 3915 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 230.92 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3914 0 R /H /I >> endobj 3916 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3914 0 R /H /I >> endobj 3917 0 obj << /Type /Action /S /GoTo /D [3757 0 R /XYZ 72.0 720.0 null] >> endobj 3918 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 213.16 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3917 0 R /H /I >> endobj 3919 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 265.5 540.0 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3917 0 R /H /I >> endobj 3920 0 obj << /Type /Action /S /GoTo /D [3760 0 R /XYZ 72.0 720.0 null] >> endobj 3921 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 230.1 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3920 0 R /H /I >> endobj 3922 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3920 0 R /H /I >> endobj 3923 0 obj << /Type /Action /S /GoTo /D [3763 0 R /XYZ 72.0 720.0 null] >> endobj 3924 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 230.1 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3923 0 R /H /I >> endobj 3925 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3923 0 R /H /I >> endobj 3926 0 obj << /Type /Action /S /GoTo /D [3766 0 R /XYZ 72.0 720.0 null] >> endobj 3927 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 217.6 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3926 0 R /H /I >> endobj 3928 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3926 0 R /H /I >> endobj 3929 0 obj << /Type /Action /S /GoTo /D [3769 0 R /XYZ 72.0 720.0 null] >> endobj 3930 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 218.16 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3929 0 R /H /I >> endobj 3931 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3929 0 R /H /I >> endobj 3932 0 obj << /Type /Action /S /GoTo /D [3772 0 R /XYZ 72.0 720.0 null] >> endobj 3933 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 213.16 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3932 0 R /H /I >> endobj 3934 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3932 0 R /H /I >> endobj 3935 0 obj << /Type /Action /S /GoTo /D [3775 0 R /XYZ 72.0 720.0 null] >> endobj 3936 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 230.1 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3935 0 R /H /I >> endobj 3937 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3935 0 R /H /I >> endobj 3938 0 obj << /Type /Action /S /GoTo /D [3778 0 R /XYZ 72.0 720.0 null] >> endobj 3939 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 213.16 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3938 0 R /H /I >> endobj 3940 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3938 0 R /H /I >> endobj 3941 0 obj << /Type /Action /S /GoTo /D [3781 0 R /XYZ 72.0 720.0 null] >> endobj 3942 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 230.1 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3941 0 R /H /I >> endobj 3943 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3941 0 R /H /I >> endobj 3944 0 obj << /Type /Action /S /GoTo /D [3784 0 R /XYZ 72.0 720.0 null] >> endobj 3945 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 213.16 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3944 0 R /H /I >> endobj 3946 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3944 0 R /H /I >> endobj 3947 0 obj << /Type /Action /S /GoTo /D [3787 0 R /XYZ 72.0 720.0 null] >> endobj 3948 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 230.1 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3947 0 R /H /I >> endobj 3949 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3947 0 R /H /I >> endobj 3950 0 obj << /Type /Action /S /GoTo /D [3790 0 R /XYZ 72.0 720.0 null] >> endobj 3951 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 213.16 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3950 0 R /H /I >> endobj 3952 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3950 0 R /H /I >> endobj 3953 0 obj << /Type /Action /S /GoTo /D [3793 0 R /XYZ 72.0 720.0 null] >> endobj 3954 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 230.1 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3953 0 R /H /I >> endobj 3955 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3953 0 R /H /I >> endobj 3956 0 obj << /Type /Action /S /GoTo /D [3796 0 R /XYZ 72.0 720.0 null] >> endobj 3957 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 213.16 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3956 0 R /H /I >> endobj 3958 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3956 0 R /H /I >> endobj 3959 0 obj << /Type /Action /S /GoTo /D [3799 0 R /XYZ 72.0 720.0 null] >> endobj 3960 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 230.1 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3959 0 R /H /I >> endobj 3961 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3959 0 R /H /I >> endobj 3962 0 obj << /Type /Action /S /GoTo /D [3802 0 R /XYZ 72.0 720.0 null] >> endobj 3963 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 218.72 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3962 0 R /H /I >> endobj 3964 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3962 0 R /H /I >> endobj 3965 0 obj << /Type /Action /S /GoTo /D [3805 0 R /XYZ 72.0 720.0 null] >> endobj 3966 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 245.1 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3965 0 R /H /I >> endobj 3967 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 3965 0 R /H /I >> endobj 3968 0 obj << /Length 3969 0 R /Filter /FlateDecode >> stream xMWv9~Ҡ̽Ҭa; D& -W>^xyț.D{@<,:+w۫v??Y^___:K{m|Sϯھ⧧ۗ?>i^W_m˫W}WolGܶyys}oo_z2׿o~~O߼ߟ}~{׷?濾Oc/JOx;?}n׿HwϿ&{ŞUVO}sC&Kwv"Ep!SN, e`A X ````````*&sq$^$.qJ,SN cA0vQ@0 SCCCSSSV"XE`&]v"8Dp)S'`n ;` `   LLLqjVk_~݇~z4kۏ?}~?2tcξ|TwAuzJjPWo%.#/kuRݥ^5FzנT$IS,c26M,c2v"Q2 YYYYY&Y&Y&YVdYɲe#F,;Yvd9r I,'YNM,s2w],s,bE,e LL}~{:\}կm#6~Wock XSq$V$`.]"8Dp e`@ Xv,;KR@   LLLL"XE`&Mv"Ep!SN\*ApM 5פz\@pͩ *U6l"D`.]"8Ep k1Yx5 b\S(E0D0DPf2)3閗`Զ~?O?9[ՏOR']QT7ԭP]&N,;Yd9r$IS,LJj\S)w\s)rM.bfSReeeeeeee%J,Y6ldɲe'N,Yd9rZI-kl%XbFWP\+2222222ɲe%J,Y6ldɲe'A,YNd9rkI-k.k%Xb[Ree%}>Isu)j82[?0R,G#%F+CST A,YNd9r5Rz5RZ,H "k$5YYYY&Y&Y&Y&YVdYom}гSTwFuPݨRBu,'YNbFJR)I-k$XE,HIj LLLdYɲe#F,Yvdr A,'YNbFJR)A)I-k$XddddddYmGJO3i택prR\.Iu~rSI,X.j< \^w< \.by\< \.ddddddddYɲ~rN uPݨR\.ԕjd9rarB-˅Z,"˅,,,,,,,,+YVdȲe#F,;Yvd9r$I,X.j< \^w< \.by\0pPeeeeejyt}_>~]O:+_}]m@}K]R߮6NԷ jd9r I,XgI-GRzbu $2222222ɲe%ƾ~/Q/Է Fv!uzH}ڐ:&I,'YN\OGZ,r=!Ij\HZ,S& $$$J,+YVldȲe'N,Yd9r$)IRzԻXG(I-!JP\Q,,,,,,,'Qy5O?~/?i:̺ Zr2MËS%yX,zI^-'էG{INO|'էG|INOӣ$70004444jTv +# O;O<,oOʟyTNS>? rR}~D|'DŽANϏ Tv=S S S SMSMSMSZMj3fTvSMu0aTNS1I!cT49>?l rR}~ZAx0uhsW6ןW6IB^-S7Mj7aTNS:IuF9;('uO夺 /rS S S S SMSMSMSZMper~IB^-l.iNS:MujlFj;F!(Tjjjjjjj5jT6SmLj7nTS:Mu$uK夺n*|'u[夺n,꺵rS S S SMSMSMS]sS|0+z8ί>]ߟq!?J^-ߟq%O;m<,7fTvS:Lu4iT'('uÞ;[('u夺nۣTTTTTTTVS?J>)?J^-ߟq%O;v\rS:Mu$H56RTc'I5vRTjRbaaaiiiiTVSmLj7nTS:Lu4I?IuG9('u۟T׍jjjjjjꚹ3?}ˇOTK^}smIS ׭Mj7nTS:MusTמ夺('յ&y!յFVSZMj3fTvS:Lu0iTNR]{ns|'յF9=7IuQnaaaiiiTVSLj3nTS:Lu4iTs#H57R͝Ts'I5wRBYH5l)m6[J-=NUۃ[3?4s7JO_Fo?kfVP^-rSmMj7nTS:MuQNkDG9夺FtR]#:M5L5L5L5L5M5M5Mj5zS7ϕmIy/Wc<-7iTNR]#:Iu$Iu('5T׈rS S S SMSMSMSZMj5fTvSMu0aTNSFtIQNkD'y!5TTTTTTTvx~ՏoIa?B^-.ivSM0aTNSz܏q?BN 9^ .ZMj5fT6SM0aTNS:Iw!'~N 9.z܏jjjjjjj5jT6SmLj7nTS:Mu$~܅Tq/;.z܏{9/z܏jj͖fKi~ܩjx0s|oLG8\Ij| yZ)?<BnTS:Lu4I#\I| 9p!'^ p!70000444jTGx9?<B7'#\ȫ.iNS:MurR=>|'.z|>…TGjjjjjjj5jT6SmLj7nTS:Mu$.z|>N#\I|B#\M5L5L5L5M5M5MuNU烹#|?UNop.햧Y7'X^-7aTNS:Muz夺3 N1z夺3@VSzVO*jpr!O;k yXnTNSFj;NjRBQL5L5L5L5M5M5M5Mj5jT6SMj7aTNS:Iu=frR]Tc(' PnaaaaiiktuZΣ"򻣫?Nv{ϳY>)Z7Z>(Z7<-7aTS:MujHlZ6R-;TNe'RHR-TTTTTTTTVS]u_׭쒧u+ay|RneZnTNRTc#H56RTc'I5 F!(ZMj5fT6SM0aTNS:I57R͍Ts#I5wR͝TjRBYL5L5L5L5M5Mƃn< tnj?_L߾'oˏ?Oxo/_?s}[o9[?󷫛ay|R>!ԗTקԗrR]RNS_TTTTTTTVSLj3nTvS:Lu4iTקԗrR]RNS_ O})7000044էStu<[)_`}[~o?}ݻ_|m5kˣ7%]S7˧kjvN9mt mtIumKZMj5jT6SM0aTNS:Iu%('5|'5T\BBk.AVSZMj3fTvS:Lu0iT'夺KPNk.!y!5TTTTTTTs[sF~?i=^}cj.`Y>)IuI9 )'uaaaaiiiT֛6ܳ]fyX,by|P>vrS:Mu$u$夺|'u$夺Tqjjjjjjj5jT6SmLj7nTS:Mu$u$夺|'u$夺:rS S S SMSMSMS=L1Ny+`.<Ÿx}|HC<-߾<,oO (70004444jT^~%Say|RrS:MujlFj;NQH5 F10000444jT6SmLj7nTS:Mu4IjnNjTjRbaaaiia)o=Qve탥B.ױױ]uay|RurR]NPN TTTTTTTVS}:OX^fX^ȫcy!OMu4iTc#H56RTc'I5 F!(TTTTTTTVSZMj3fTvS:Lu0iT'['('u;['('uT׭jjjjjj:T /nC^^OfIom6aĔzH@]P?G@TwrAX>mF\X>E@MAAAIIII,+YVldȲe'N,;Yd9r$)kAj\RZ}Z,E,ڃddddddddYɲe%F,Y6dɲ A,'YNd9r-7H-k],bb˵ 5YYYY&Y&Y9je<s۟~|`&>xӵwO;c<,oOgZ>$_CIu=$Iu >('5~PnaaaiiiiTVSmLj7nTS:Lu4Ik*B9夺&#ꚍH^HuMG(70000444jT6SmLj7nTS:Mu4IknB9ɉ; 夺'ꚟPnaaaiikrZ1Z 1w}?}xu779K<^(WV)O˻f9[G('uT׭#jjjjjjjj5jT6SmLj7nTS:Mu$u夺 wR]PNIu:BVSZMj3fTvS:Lu0aTNR]PNwR]PN [G(7000444ۃYGyߟtMkrwwFay|R~3r%;#WrR=\wR=\I3r!/zjjjjjjjj5jT6SmMj7nTS:MuagJN+9vFzR=\M5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:MuagJN N+9vFzjjjjjꚣ9J?__BXOէ_(iynIy+WMj7nTS:Mu$5DTMTrR]C4 !ZMjm۳+y-O;}<,oOGZnTNR]C4Iu ('5DTMBkFVSZMj3fTvS:Lu0iTNR]C4Iu $Iu ('5DTrS S S SMSMS]CSբ<c)ZZN+2|'IyEz^HyErS S S SMSMSMSMSZMj3fTvSMu0aTNR}ZTVd$'էIiEBO+2jjjjjjjj5jT6SmLj7nTS:Mu$էIiETVd$'էIiEFrS S S SMSMS]+2E>?0uy)sd;'jWJjWꤺK}d+uP-eeeeeee%J,+Y6ldȲe'N,Yd9r煉X>K\w|^^庈,,,,,,,,+YVdȲe#N,;Yvd9r$IS,!b q]X>oB\X>A\222222r]n<}ng󻟿yo_~zǻӻf;w7ߜo9B}QJz}/uRݥ}(uP-CX& $$$$J,+Y6ldȲe'N,Yd9rɾb>חZ,קRL"}2222222ɲe%J,Y6ldɲe'A,YNd9r^j\C^j\K-z22222>>G oѾz~~}/?O滷۷0t@@[Ay|H}<,'5PnaaaiiiiT֛jٶ=2m<-Y>)jNS:IuM ('57TrR] ZMj5fT6SM0aTNS:Iu('5Y|'5[TtrR]M5L5L5L5M5Mp)oc+c>wWi9N,˛SuAN.IuA9;!(7000444jT&WIy+W}<-TNS:Iu"A9$$Iu&A9%$/nTTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH51y`}!Ƨߝ ۛu[}6DX,%ɟNf<-t2t2#TNfTTTTTTTTVS}ׄy%}JyZ)}JyX,߾kZnTNR]ĠT&夺61$/61(70000444jT6SmLj7nTS:Mu4IkrR]鷺61('յA9M M5L5L5L5M5Msb>b81__ˢӛ{X,by|P>w.yHlZ6R-TNe'RHR-TTTTTTTTVS=|r~B7'o/A yZnTNSFj;NQH5 F!(ZMj5jT6SM0aTNS:I57R]SNj.)',TW!yjjjjjjU%>(:MuQNkD9夺@R] M5L5L5L5L5M5M5Mj5{/_f^+y|P~/<-7iTNRTc#H5vRTc'(TjS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5M5M>Z@YO_Oȶ>LnOqEJ7'뙑W뱑j7aTS:MuόrR]IόrR]I^HugFVSZMj3fTvS:Lu0iT'('u夺3T}fR]QnaaaaiiiTVSmLj3nTS:Lu4iT}fLT}fόrR]Qnaaai6[zsAOs7ޟ%t\;'4IuW꠺Q={.R=d9reIJlbY6,X],.eRIJ,,,,,,,,,+YVdȲe#F,;Yvd9r$I,X%r-AZZ,Βb6& $$$J,+YVldȲe'N,Yd9r$)k1Ij\kIPb˵u˵$5YYYY&Y&Y&YN3>-ikR49Nj.]Iͅ:nTO'5Jz$)IͅZ, X&5jtzbr~HIa#B^-6.Mu0aTNSzHq#|'F҅TI/TIrS S S SMSMSMSMSZMj3fTvSMu0aTNRTIrR=n$zHq#BNǍ0000444jT6SmLj7nTS:Mu4IǍ 97^wR=n$]It!'F҅TTTTTmtZs/̹^H:yBTw7.AuzJ}tT'YNbyHPa#B- X6^X6.ddddddddYɲe%F,Y6dɲ A,'YNd9tF. X6.byHPeeeeeee%J,+Y6ldȲe'N,Yd9rF҅Z,I/׻X6.byHz.byHPeeeeeea#锷=ܾ IO;n$^~X?l$6.ay|R~HW凍 vS:Lu0iT'7.zHz9It!'Fy!F҅TTTTTTTTVSLj3nTvS:Lu4iTc#F҅TI/;7.zHq#\j<\byXŹPaB-U $$$J,+Y6ldȲe'N,Yd9r$)U XVq^w<\s*΅,,,,,,,+YVdYɲe#F,;Yvd9r I,XVq.byXys*u*΅,,,,,,,sSx~?Wҷ^uXyO;>9߾zמ|?=}uۗ?>i^Wo?o_}y?~z??_^o^\_o|7#ߴ/t7g8P|^w,i endstream endobj 3969 0 obj 14867 endobj 3970 0 obj [ 3807 0 R 3808 0 R 3810 0 R 3811 0 R 3813 0 R 3814 0 R 3816 0 R 3817 0 R 3819 0 R 3820 0 R 3822 0 R 3823 0 R 3825 0 R 3826 0 R 3828 0 R 3829 0 R 3831 0 R 3832 0 R 3834 0 R 3835 0 R 3837 0 R 3838 0 R 3840 0 R 3841 0 R 3843 0 R 3844 0 R 3846 0 R 3847 0 R 3849 0 R 3850 0 R 3852 0 R 3853 0 R 3855 0 R 3856 0 R 3858 0 R 3859 0 R 3861 0 R 3862 0 R 3864 0 R 3865 0 R 3867 0 R 3868 0 R 3870 0 R 3871 0 R 3873 0 R 3874 0 R 3876 0 R 3877 0 R 3879 0 R 3880 0 R 3882 0 R 3883 0 R 3885 0 R 3886 0 R 3888 0 R 3889 0 R 3891 0 R 3892 0 R 3894 0 R 3895 0 R 3897 0 R 3898 0 R 3900 0 R 3901 0 R 3903 0 R 3904 0 R 3906 0 R 3907 0 R 3909 0 R 3910 0 R 3912 0 R 3913 0 R 3915 0 R 3916 0 R 3918 0 R 3919 0 R 3921 0 R 3922 0 R 3924 0 R 3925 0 R 3927 0 R 3928 0 R 3930 0 R 3931 0 R 3933 0 R 3934 0 R 3936 0 R 3937 0 R 3939 0 R 3940 0 R 3942 0 R 3943 0 R 3945 0 R 3946 0 R 3948 0 R 3949 0 R 3951 0 R 3952 0 R 3954 0 R 3955 0 R 3957 0 R 3958 0 R 3960 0 R 3961 0 R 3963 0 R 3964 0 R 3966 0 R 3967 0 R ] endobj 3971 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 3970 0 R /Contents 3968 0 R >> endobj 3972 0 obj << /Length 3973 0 R /Filter /FlateDecode >> stream xTr0+V;m:ӛ'L{H3j  J`lmMcg}>3hCܰ=&@x (8EY8,Kv>O {xXn ޳$|U!dS.  dEn_MՐ6Y銬?m>B}LGuKAE__h"ͻVZIw' \;o4-nֵY]gwu+{.PIHDk }㻊$'(߈ BdWPDֹ!y<ZjBFqcbJzҵI0t}/Ya/{,qѾ7zW/' ı걙ktE$=i۔; @]Qg.dG>M^y5ۮD hh~m] ٺM2+ hӤhJNap#a)F4{dq(y2qdNv5E0 endstream endobj 3973 0 obj 528 endobj 3974 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3972 0 R >> endobj 3975 0 obj << /Length 3976 0 R /Filter /FlateDecode >> stream xUMS0Wp@˖EoF0+;m$Q&+;ĉSN;c9k۷cĀ}9LW@qɮ 0IxE a3f,ٯi?v&ڿ,&" ߣ{h9j@~(nї,:Qf/2MxR"l'k*l^ek zُ[`} UH[JWŤZV'Z+ШQ-\\87eMy֕ae2 gR#t.8MY4wyǹ1- 0E-x@#EI$˨WȠ%*:izSh0.\ʗOf9`R$Z+,T>_zC-Un0Yg|3܁_1mSK`!nK+C"SV f>U\sv}S[rsGǙj6XwiDANd퍻; çVȠˀ>f"|ո-_0 .%QⲴ'yc1ϘжTMi@?9-=ʼn ;msۖbIJCGC4S?T0Jҝ# Ϊ/A?\ endstream endobj 3976 0 obj 635 endobj 3977 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3975 0 R >> endobj 3978 0 obj << /Length 3979 0 R /Filter /FlateDecode >> stream xTKs0WzYzd 2t'QSjYYqRa8>E (W~цêvA)bL# ~G1~N5@t|·(|]#ï( oQxާѻts8+8%ܽ9[YiU]Y/t`D}qi2bLz: hZVANsYɫζGYh.p&(e_Atx4s |*\ۗr ) O#;RHS 鱉n45g0xdθ ~"xЧљD%%,¦/ jyѶ-vA{?/-Ҋ0`pljWfP"9ú[ϾsHaSv ʐ9 (&s?G3iPG8n*!p2^I $`Yªp endstream endobj 3979 0 obj 532 endobj 3980 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3978 0 R >> endobj 3981 0 obj << /Length 3982 0 R /Filter /FlateDecode >> stream xTKs0+ cMgzsô8!ph_ jOMvoWQ@w_E**z0 O ~w8eߢ:B:tn4f;DMqCxgѻ(B*B+Δdܜ]6VWYkSi}mo!}&ysX޳_Hws$}+ͦ${pD{*Z|h6|v5iuwUJ4:HA0(G.:i[3:{3&w S+GmJ6ES4#`Ӂ$$Icf4UP(*4RTt8Yk^vz܅ޏN$I*qz:/=daW> endobj 3984 0 obj << /Length 3985 0 R /Filter /FlateDecode >> stream xUMo0W̱=qҽvPC"b~ JԽl8Lf<ۈ. *0Dۃ s$#4( hCx0c~N5e#Q=uZw)Oō2E#`IZ)^C盧f Z[־:o_ } 6PE44>/&: (ZTÃw8cYi}]^V7 HN82Luxt)#)Ls!#e=7H5k-/MyЮ!ϵq3ȴ͸Y]T(녉q)Q%8о!eamXك\Mf%a5cI:Ё)6zh{^4#sS(I8WV5tY endstream endobj 3985 0 obj 616 endobj 3986 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3984 0 R >> endobj 3987 0 obj << /Length 3988 0 R /Filter /FlateDecode >> stream xSn07CJ*EAeIPL(B*ul"#<Ώ{#avM\@c 9b"R.,Ua,OeAovF L+n,.Lv}/Mq 9v_{d5!!Y> endobj 3990 0 obj << /Length 3991 0 R /Filter /FlateDecode >> stream xTMs0+$@ȷ~3=tcfzHrpmfj Gwel$zڏDŽ}6cqPdއxO,7Vϱ#d |IS눓d|)ɇ2ywG("Z &rwWLTp[ LM֛_?@5\\{b=kiܯ& )*ɢ@bggMU.8W N H\"r cqD"gM$a6B$$Hrcm@0Ѣm~mj BEAI*4I ]GCS ۖ~vؼ3 蝰y pa endstream endobj 3991 0 obj 531 endobj 3992 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3990 0 R >> endobj 3993 0 obj << /Length 3994 0 R /Filter /FlateDecode >> stream xV[o0~WUjm}NC.V&J0Ťiw ! dOkC;>ϕA2 ?QCq"3+bVd9iFD~[Eulf8:ej}{vEs! ?݊j'IJ0xpf]_cI#s8Zsءpiˆl}Tj.T\v)xR e6!MMr} NƂ.LRj70 |Mqޮ㔀ؾ֓\Z x!r(ga:a1eo\bNj}bb'5(/'EO!d,@&> endobj 3996 0 obj << /Length 3997 0 R /Filter /FlateDecode >> stream xVMo0 WF}زz ء@`;&J",]iINȠGFCDuLCg oqT;s ~w/q&,GG_;g9{ ۨuA bCXD&Q a2KKS"PJ1)Lnήt-/q]la;|LzsYM|mJudc|C"]mΨwח"YQYd9"HA0(G.h#=zeLIW1LWF5xN/`Yզte},H$IxAdteeJ%SS)D sOo|V}̎ ItMҀfd(;0S ft3sm1Q|n[=mB1oKY]uYES>09KSy80E 2t8C'8=sOnσĮ NL^i"fZId<@4 fJb_P_kaüZC??*ǔP|Ԛ%99s ;):Xvs([Ӈ6J?j|{yڰkaLԷ ˄$F$<ƪ/_ endstream endobj 3997 0 obj 657 endobj 3998 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3996 0 R >> endobj 3999 0 obj << /Length 4000 0 R /Filter /FlateDecode >> stream xUK0++5m{TaU` 4m} ܺ <>x^=x"6QPP`Qb]>vt"NV< _g&(sZ{8Bߕoާq2Fae x D^fxW./DL fqaTena2; gP"iΥlpO)vL.(R(uwyAJVQrpDp™O)pe!'KG CLa*m+(ua:vA%Vohv+AC 'yʸI|!' c :p"7^wei/5srO(NyFje9 endstream endobj 4000 0 obj 651 endobj 4001 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 3999 0 R >> endobj 4002 0 obj << /Length 4003 0 R /Filter /FlateDecode >> stream xU]o0}WUZ<}LC*h{h+DIPʿ5$6DsׯRqHc 91!ܲq@wFM?DZqNP<ʋ]g- tPޙ}_ [qYώBgR9|&VAj;ٛZo d hf32htCs~IKaKUm endstream endobj 4003 0 obj 628 endobj 4004 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4002 0 R >> endobj 4005 0 obj << /Length 4006 0 R /Filter /FlateDecode >> stream xVKo8W̱-E{b7E{h@(M*4;$+m"h<?7<)ѹ #((=P`xMnCxrxM!ovΟ<rK܀iק9WY$Tَ&4gؼsޜ{7 Fjʈ6tw^Mq#7WcRr^v3YOav\X(K=yA X=C9$7x gkИ".DN ܛ07"Hl5? Yi;hiiD mn@(!;Xo m{AF |uҀ]B ejXNnl sd1& _u3PgbZ,aa,VT:sd纭DY1\upxE2ʲ&WpmG_D;fUYtҬY0Nt!5#* L57 1^BfEgXmu5vkp\r{9 R \jR:Im'1Eؖ,=æd sĴ~bUpb+nJΜhK R~Y9(S;`6 [IQI Vh \aWsjqwo%5\_J}o;uܲ32 iT%K46t[lс\V#oMS D0茒)ȡAK($7x G OC]J%=}d % 1€I|3Si0_I;6ٌ(Y5! endstream endobj 4006 0 obj 910 endobj 4007 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4005 0 R >> endobj 4008 0 obj << /Length 4009 0 R /Filter /FlateDecode >> stream xVMo@+H `!Ǫu"EqCYkXU0 u_Y0`mSۂofw W&"y(<84Q?Gs" fWc;KZvzs;p+,OSJ`RKCc^Ẽ,2Qͺa3wMQɅ,k0|){g߶u1 Dk&#@' 4FQYsu}+]WQ3']~$ c..*|U~1&` 7;3bUfQ`uD6YaA>q 0ݚw/yQֺё#ύDE ;Щǘ)G>x=-1nj%WEO!t@'6jU3b"Q?":jWY{E9Vśfr1kZ^;čiDgEfpa%ƻeps~,qıoeQc;' eKVrSgi 0)Ru E 3 lKn~ wcR[=?#gY?BRr!]vW!=NgFVk_KyEŸUW܇=)YDx@lzrH C_x\ NxT)+5kJȐp6 ^≇Byczl$2^bŷE frm{dwVbZ$>M$_{;gN@PAz}㬚?n endstream endobj 4009 0 obj 818 endobj 4010 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4008 0 R >> endobj 4011 0 obj << /Length 4012 0 R /Filter /FlateDecode >> stream xWߏ8~篘kCԇJzUDdL1twlq^nV g>{SzQ Dh=/h0}~OD7W{>x@{{|G7k.J`Q0MSB,5 [G r4U+]]j?Soe'S g4 Z@?ː0S J(c| \ty%E݁2fM# QqZO=.+0` "ĉDZYkht&"i ~j'NH;e!7GX\.'FZ,*[`^7('z]TisMV&5S'5o"uRnR:}ۣ)d ΁dONY+K9(s1Y)4a%uhznE3:q!PY}d|Rͮ)ny̬lNWYYZU295dS@3 wtKiٔE+>n7-Hfn)j[U*߼`T|I' +c,1g⛛qTe^X2_%(駩X1ޜ y6> endobj 4014 0 obj << /Length 4015 0 R /Filter /FlateDecode >> stream xVMo@+Dj,XCV{H" ⬌Y./=Mya߼og6+BrN!@\D=nPx];zo]xN`?hbl&8q:B҆a|:n< Z aRhh(LWpq+FKVe0J_ӣ3Bj}ImQQKw(#nZ,`1fGE:O+mJEa|j p 11M}<lJ!{i(]?ۛ ęK*TEQ,+4*$ݕ(uqcu7\\(A4h@'&!SseMoQޗˑQ5hSɟd7:8L`^δq>rT*Z -[E275"^kq!w;L w]㬸ЮTpa9.ǩɒrV8j ͢5V2,V.U883̚q.-ժ^L}uTj\"Ttw;4/dC y0Tadx*uDg>AK~F+nذ~U\s J k-z>JDlK`Zw=ٷa8 X dD-˭Spc)Ѽ< m|van0'H-` >g'gѲ8 endstream endobj 4015 0 obj 786 endobj 4016 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4014 0 R >> endobj 4017 0 obj << /Length 4018 0 R /Filter /FlateDecode >> stream xVMo0W8=0iLڡRZ]LSNH$7~ޏ}글5CH7BD Mn#s` vlW9nڄyz6;8s:Om|bGjO#$C`{B fZHb0[Ŵ}Op%*R+#bp2Dy@0N2K#cL0ށKvwW b( hV3Oq=]Sʘ[{(Ʀ=)7!Q~:ІmŖI(*<[7Mn0 -Qu^⪁&$>J8IBנ v|L߫ŎqM~`׏P5!(-4߰s!~J3PJ2iO7^@^&т_VP0dQP͒kPyAW9$nV=DҪ h`#Ǝ. GhS22ɔ1:4tٜ%a] QínFo͍壙W[^Bn]}vJmNkNG0Q{x|Radƈn2Tl 8$nQ`>Ms3j-B)oF_j E4]G#1;rR36jSC|fJc9UӷCrY6_<~b{6|8#H4q\>Fbȿx`Vc0 endstream endobj 4018 0 obj 774 endobj 4019 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4017 0 R >> endobj 4020 0 obj << /Length 4021 0 R /Filter /FlateDecode >> stream xUn0+%Q̱@]lQ Q[T(Fesjb1˗vύ_/Kh~7Xw@ "=phvA%.y'r|M/$?YKb)RR1bTdT3Z66}Re$?oEV|_So#{i~Mbb@1r[%Ƙ<*Y"PnJj󸳺V?8E0e24QN"M'lVE 'ܟ)Mkm t EQ MkaJW-U 9"2qC|JP8Κ(?Vl_;dOѳ"C9sb$;|]i!Fn$PWf[r=Ui:2Γ"݌cB-uYa/^Q?+H̪ m,Te@mT &>ݞ78=;02xbDpg] {d5-ήS endstream endobj 4021 0 obj 586 endobj 4022 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4020 0 R >> endobj 4023 0 obj << /Length 4024 0 R /Filter /FlateDecode >> stream xTKO0W̑=`c+mWT5b,B%"$ B{ɥo^#äCK,@zKA?,q.XF^ZoViP %Q!5՝??/gK>j>}Y{H,($$|:?K 2t~m>FEڨy9/&!'[Z먊Nʪ^+  X4َt8cI%;?WYWCBm({j%pOeĮXVXZH%rþqOvZ6s2"ۍ{J}:fUxu* endstream endobj 4024 0 obj 450 endobj 4025 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4023 0 R >> endobj 4026 0 obj << /Length 4027 0 R /Filter /FlateDecode >> stream xTn0+. z`XhiE%DeQ,2Da.%T 6eQ xr8*X8,ߠQOqX3{t1F!@\EQ"rCxfїE !+Ҕ&RL@J8S ;ݽ,Laf![׭egs>X>Po#<&ك80$ҵةYntBDn죾&Ek7f#rDB!1ExTE:7crLs[`S]u ¶ͺ3\Б I$B*[jt%R Ki9U8|YP$٨O:U{ endstream endobj 4027 0 obj 509 endobj 4028 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4026 0 R >> endobj 4029 0 obj << /Length 4030 0 R /Filter /FlateDecode >> stream xTMo0WP8C(h;t=@W!)艟y tϕ?ّ@qbQ LR98?{ƶ3@ؿ> endobj 4032 0 obj << /Length 4033 0 R /Filter /FlateDecode >> stream xUKo@+,cR,F f Za`S&bcy|3} PwEi}a C,IC,/P#kv~B (| qx5|}WQ,F!IOҲH.\BL!;|-[dYTXW |IM|m+T)Q^*jJ4*Jݖ+x0Y+`<P҉')v\?0JS+Rƪzr endstream endobj 4033 0 obj 568 endobj 4034 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4032 0 R >> endobj 4035 0 obj << /Length 4036 0 R /Filter /FlateDecode >> stream xUKo0+9VV!jQ{H!(Q}ǰO`Y&h|3 g.Js ykc8\$E󀢻 vWt&{y_NPޡ5F n8Q CF!uΗ Be>\j!(Ӎ^ VYn`UMº5]η$qK|7djۈHKnRq/N; *4jJjT7Ճ.$UM*zZ 9LP0sxJ=ڲRM\#H=67 Dyf[؞MvYU6U6@QyֽP[Ymz&o-VLK ") D))x>6ŽAYYgx02GY&Cd,dIvQ>> endobj 4038 0 obj << /Length 4039 0 R /Filter /FlateDecode >> stream xVn0+̒; zhi`e!%ے,=4hvwCk_|&Vz)yQ߄kn.&`/'5nu7 <:lwt pnvi*/DAd7J3i(/ ;DHHSp ExX1SI=^0Dr`/F`rh}cN"Q b//}H@z!RiXk,\IQ6B8La&jnau3k[meb\ Hp9Tͨ 9K&6(`\: ]1mfqrMV+W&(RS)Oe\sVA?K^au:ˬnKиGiD_)9n &&,-m_ : {xd8ďQlg Ç?LA㚹<B0Φ "V~` endstream endobj 4039 0 obj 796 endobj 4040 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4038 0 R >> endobj 4041 0 obj << /Length 4042 0 R /Filter /FlateDecode >> stream xUMo0 WIlY=hP p%i~(;Ɓew~w 5h툓`J8,Im,1S1 f!$+rkb#YT&]ZHui=$?ĸɌս4>&]BI@4qh&pFM1db͊͛ZŠ qMab$MMu p;,s6`O֤&\^zSѪ,"_DźtjzŌ0nH=DJ7dWؽ&)vE,5DMte yzi\^ +1$ͰmC]p!2/Gp9Lߪ Enjۿ 7Ԅn.8Ed}xɵ aPlc|;au&%srў"8 k%Uj֡ endstream endobj 4042 0 obj 530 endobj 4043 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4041 0 R >> endobj 4044 0 obj << /Length 4045 0 R /Filter /FlateDecode >> stream xUMo0+z\f=TvmUQ$|F; 9n"l~yÀ3 8ęv1PwjbLEѮAm{F팴=ӮmMlᯓ;~9Oh]݅ӺKg1 ~(lm{iO$Ap >d#,}:[~EiA IxoA^[qA$8"EOqM\|Q&|LlЀV=2=;]BE Mb CxG#2h&r@xnWS u7;MUou񎺮gϭHeTLufa41([iKI_=:&%ՃF9X擙lI}:W+`Ԗ.1C5묎~^0WFryx#>YUh endstream endobj 4045 0 obj 586 endobj 4046 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4044 0 R >> endobj 4047 0 obj << /Length 4048 0 R /Filter /FlateDecode >> stream xVMo0+͇=]iDC[UN0Sp߯  mfy3 ~s`فEVv`Do5 71ϰ]Vkn&xpr/Xccaܹ_c|`X$]iI> endobj 4050 0 obj << /Length 4051 0 R /Filter /FlateDecode >> stream xTn0+. r`XhiEBeIz!:6 Ssv|& =W~QvG S!0Iy+;n;k~ ܐ&F↬'Ou6'="V0(=X4\cM7!;۾_XeM[(6_ %?,uw>SF}zi}MF HkcV@bG{}] Mˊ6qc{wf$ D2Y}CLs7jJK[m`ghaT|}qŘIsrf30 y/ʪɚjf7 Iy/2.D3_^։z;B:]H2\(=H B3%uQhm-d+Of^4lϊrQpX(^v0 $.΀PS/+sU{7]? endstream endobj 4051 0 obj 487 endobj 4052 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4050 0 R >> endobj 4053 0 obj << /Length 4054 0 R /Filter /FlateDecode >> stream xVMo0+w{Xi*Uݪ"`oSp$۶!f72/ ~!έNM9hnQ`s_P"kVi7&M`G&hwao:Һ%B?Un6ַFaԲ8 Ð;a;z[ XjUEa:)f~VjdFKjcO %vL.RJGeHkԢHR N'ٔ2,eNV9Pۃ]:ù?s]BIQh0!JQEZ65Kf#.|J<3\[Z4> endobj 4056 0 obj << /Length 4057 0 R /Filter /FlateDecode >> stream xUKo0+ {\f=TvmUQ$I!G!mCCga!)Dv74uA1Imۘp_'s0ruc.] \;Q Kņa|oK`QK|)RR>bT {Uq`]eSV}3$bL Tki5TPX,T3GEl6/б+p3A6SD ØeycBD֒#)|)=7tJ(CS3YOeS] 󍸅QD ڨ,L)KG`qav2.$Oäh>H۞+na栕F^uwC&֧,z>NJERXblօ]T$F;՛Otl !tDHn.ڇŬѠJ]2pwVl ~^0?B<_̪}*t endstream endobj 4057 0 obj 585 endobj 4058 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4056 0 R >> endobj 4059 0 obj << /Length 4060 0 R /Filter /FlateDecode >> stream xUMo@+/+Օzd4YUm(cSc{у7o0FwC?سq~S('D닯wv5ܹc endstream endobj 4060 0 obj 555 endobj 4061 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4059 0 R >> endobj 4062 0 obj << /Length 4063 0 R /Filter /FlateDecode >> stream xVM6W̱,Eɒ[dE! YڢBһq}>$ef޼]b ;z_[1 M~H v4nš^=Mkcݏ=hѾgqサ Sq~݀Oa[ Y9g!$$`1/}VnAU:}M+#yxodL]1IKwnkE%1P,\SJVJx, (m΂a!#(1 $H0r,X<l&MA`~K#py3˟SE#nޟKUi:(_P Krkq}2]NaL=A;iyWK!HТ N=U@j̩"wڽ4P eƊ:߈O7e"u3ܻ s$jqqCss3ii aU!?'x$i*WQ'xfGAHs؝]e[\Md'7Wz_g0}^dTQu3c"}EhBf㍋dZVv3p0<(}v8 k"=xTq*3g8'Tbm ].c_Lw. WG/[&όP8rذX 𬀴̡4 YE;&EߵMTK;\դٝ :Z)kK}64?r@ 52kU9D0yՂ8q2Gj`[MZ&8szvː\]+Drr%Ÿ=12.&+NkiF;LjǑ>/S&(W ' endstream endobj 4063 0 obj 909 endobj 4064 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4062 0 R >> endobj 4065 0 obj << /Length 4066 0 R /Filter /FlateDecode >> stream xVKS0Wfe=N{`0$w'c'֒d"iG>?ix@{n(FADE$/p l#_vlDd;YtpnQ|+QΜ#CF2w>M'/z I@4 nO.YI Ss947濜}~5ZQEKl]|čbd !R_\ 4uSY> endobj 4068 0 obj << /Length 4069 0 R /Filter /FlateDecode >> stream xVMS0W,c?(Ge,J}WH2XY>u1>pHrȖ}cq~!0AxE {@/t}mCt_^Q]\bt68Us}: QHgiYLRJ. &>!Yމb`fu(H(k/!}KzV:qDd女Up#-R,5 FUaˌdz,JTF[D1N8)eϫi%U9hpr4lQ٢$M~~u?ǘ 0tDmS+S5TnB "Xʐ-hJ)v}"(t.!G1; cDhAզc6p[d#ՙ^LSJ6⯚A2P`o 9c=6LQ%ڈM2a:$ԪA:[ :ںn\*][5՚2Oƪt~0 y\UE]tt{+3ݔ(4|:vUz;>t>G}\}J0+U.*;5&\+8:`l[\+.[./qi/e  zkg3l.1Jթ 60t~laqSCYbxXw(u  39$BvYU/A endstream endobj 4069 0 obj 775 endobj 4070 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4068 0 R >> endobj 4071 0 obj << /Length 4072 0 R /Filter /FlateDecode >> stream xUMs0+ rLif̴8ӡ lX8$_ܚ%/zO> u!)d~Xt"a#p`npحs<}- tkp{gF*laUCRHKb)RR1bTdgת}pUV VmݤI75w|$'3B?X7J yM b@1bb٥%Ƙ ԅAvQizu1p(a['9^ 9f<ǚR1pVU-t@`T󨚱檦D&j(rj>Y{S*IKѸ-%!YgZ=%vzc}[MMp:+?e$'xpuMOH;dʻSh9}8e%>2e/xr>k oihܿ9.y,ao )t㧚AJ}( ǮΕs'-=nߒ@L?˽c3ܷyq8~a = 9tKv1> endobj 4074 0 obj << /Length 4075 0 R /Filter /FlateDecode >> stream xTn0+bA=0,4(T:#)MmyKNM,ä87osmd8 V/^?N_fߣ2B:%<( 'x+n:>bl+-O#L ?{pcۧ #0i:[Ucl>H} jxXM7BI4خXtThQ5Z/{uUFۂ-r?®ZWA#«`KDN1o;SL&~z3e ծC^zWC賓%Fy\V59Q3:5&i0zIs L7JopYR3huUԞL#\9uEڅyeAuȭnO)jb=Q13-\.n浮[WZUMCt.l5Ep=C #szko‘yrȾlb endstream endobj 4075 0 obj 528 endobj 4076 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4074 0 R >> endobj 4077 0 obj << /Length 4078 0 R /Filter /FlateDecode >> stream xVn0+%Q̱@SbӖ[TDAKɏX&akp$9b@: fyc88${߇ +q_[q{豤#m0ݞO8ꝌW u Ϊ0] endstream endobj 4078 0 obj 645 endobj 4079 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4077 0 R >> endobj 4080 0 obj << /Length 4081 0 R /Filter /FlateDecode >> stream xUMs0W=T՗-7(dvȭJ-¿g;c'm<}oWLj,,Jsȗcgc8d$U`ҽQD~aUoe5 endstream endobj 4081 0 obj 636 endobj 4082 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4080 0 R >> endobj 4083 0 obj << /Length 4084 0 R /Filter /FlateDecode >> stream xVo0~_qz6u6M*U( N6M[%@asw?>`@:K"8~-cp]"(nP]P{JU=mFD~*5Ax u-p\uo7 wQb¨RRH#HIȅpݥtࢬ$ 6ٝQٓ}vc_52MH]KWՔ Q!pJ,d 4\s0Vlps(BJqT4I >5ir@Γ. ʁ]|jK[P|FJ MO)F:$qiIÕ [*P!""T }VID9މFïZʍQ4oE Sˤ̀;28)[Hs]ER~{(=:H]ش@n*RE4AUvg{-cVNi,;.ӏn6A,qJ7Xܽ^~"1u9ޮp҂|en4 5..l21Z?%Oc|FϹ)Q T`w N $0}gҙ4JnmF(Vs h$\M%8;b<%V?@}P[hPaցVT'$C25%18hdgNn =h-JaWFS? ѽyzI< 7yE|]Y_x}B endstream endobj 4084 0 obj 756 endobj 4085 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4083 0 R >> endobj 4086 0 obj << /Length 4087 0 R /Filter /FlateDecode >> stream xVMO0W89GW PH]v;nB6(GS73/cO<(~Nl=>8 uQ ~HXEnq'(6ڴ[%\yGw}9#X{ ]zDʍƒm}DS-^PBHHc0[љkaVA,f}/656bɦ.vo[`plbVNA) Z*i0͌h檔@{a~@Ō@C:(0x g)dE.K ZJFUǮӅSDZӅ7ӗRU&7TADD% `c}2% ˴62CNcl@6_IcUu>e[X/l 9,B\xNqv<4 aU )Yjr<ڨDlmF AتuaA-H ԩ}7vh2U1eGu1fsNF1RVwx q!ϱv7, i2Wv1cOq4PNr x3z)LU˪ximC?}ҘViwҚnd,xèrI;TպhU!O(;Yv1hہtdbW/u.h;ô ޏK;wdm#K>f5dH endstream endobj 4087 0 obj 726 endobj 4088 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4086 0 R >> endobj 4089 0 obj << /Length 4090 0 R /Filter /FlateDecode >> stream xUMS0W=ö,C 4@ud`ɥwe%؉g,JoJ{1A*mt1DmbI ,&Gh=([g bpϣwG 0 y$-Hc!#+M{GB̙ҐK}{S`%~2e/I_Kg${P8%KlS,\*Ѩ(bѲ5?aSY%iu1DePhq1' Jf~6, KB\NfP.j8@>W7WpY"<@II^]CTL̔Jy@f\rEXt,$Ͱ%K*M׸.L- ڂզO/^ a;>b>o`*^@ɟI|qmJ౦4IJd|D2TF[ T45TF?> endobj 4092 0 obj << /Length 4093 0 R /Filter /FlateDecode >> stream xUMs0+ʱӺ2uiqCpbp$\+ L{jb<O}P|"d=A B`> ~ۑ׻6=|x6Z(ShLKg"ʹRK)m2Z2vZn]޸zu[n^>F&`xam(dbJ/U 8^ endstream endobj 4093 0 obj 633 endobj 4094 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4092 0 R >> endobj 4095 0 obj << /Length 4096 0 R /Filter /FlateDecode >> stream xUM0+{X_`JMVfU`TY6znb7<l;7Ia AE # žnpw(= ɢCx |D :f! I~ĈS.bĨt oTZ0+JZAj$_OEwVWڈگ@m//I(#a[,;UXPb*7ޮVEywF1p(a[D1N ]aXR*pBU xA)n /JwU0W6mդg("gazg Q#)b)#{xS21O81^ePp{CZ/g^|4˴2gָt${!U)( yrx6ASմڀzMQUFeҲleݘLnȲuq oP"؞kEFɕǭWu9-;'L  MZeajf؀\wO(v{3c]ypP]2H(t_=Uw endstream endobj 4096 0 obj 593 endobj 4097 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4095 0 R >> endobj 4098 0 obj << /Length 4099 0 R /Filter /FlateDecode >> stream xVMs0+ʱ3u=d1Lfp=0Xxo#ug.(,6k#)sZQMb@1bbƘ5mU"T#s@JF:u#)aLL'#)8.l=Rޝ O y& ReZ?R3*L#( C+wigr3B@GGB4rnx e3g֐yQsc G,`TkN*:.35^@(:|f=Pr mkdTRk[¹]ylzdoS n1zJ%N-e>Nɻ0KgAMEefvZ JIhq wSo9e. # bU-wz0ڵO!~hxti("psTwH_1O'wV^V4p7 endstream endobj 4099 0 obj 642 endobj 4100 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4098 0 R >> endobj 4101 0 obj << /Length 4102 0 R /Filter /FlateDecode >> stream xVKS0WWe@`V2BU驐d"yoէVO^)l=mlp a5Q iE \OQGd6&Wy{7whkmyWx>OOA34 ?P.Å+(%LATFZsrӟ޷iga@į53uiDu.]u;Bbmp(GcJ 7Zgg|-+d#Y4 p:~b.-c8@VUe$X> endobj 4104 0 obj << /Length 4105 0 R /Filter /FlateDecode >> stream xUMs0+ʱL\3!dTm&6`lMnMk}O+ǀs8$k﹵1D7 A݀7+Vt76&,᧗{zhM׸gt}WQXxc$F!e񹯔>DDp>5_ܚ` .߼/q/q;K|ԕǯ$ZInP8%KP,\*Ѩ(ը:[ӄT&kmFp&(eϫߴPb4dǞ~q.9 Uf &~ jmv'#) C#dz7/JTBDHG hL1v)|xWӑ#1;% #<f c1q ws:M+c-shS6]̗w4:Oq@RWnb~PzRW:sSIĊQ(1ʕy 8:qgc*+1bmHVe .!ekoĹ k.i߃tuh<{iNs>B'Fqˇn& |:r& 6:sKaD6,8mXUP)M endstream endobj 4105 0 obj 645 endobj 4106 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4104 0 R >> endobj 4107 0 obj << /Length 4108 0 R /Filter /FlateDecode >> stream xVK0W$G @ ViZvYʯgGMmU;o1= Cs(N CKR`1 [!ѰjVߟ~lEHGD_tvx] my|Hkw¹$\zck vһ`.z=?p\09~z҈/#M.]fSwD db¥ sJ8Yg*/[r 3A)CGN0C ţ-r >_BY)=.of-4BȽ'i{D}6%$MKjjS;zh~<&y6ZQ2.HL9EŧȝV9V⌤3  sdԘ87}\eȪSFOBr6@"88x[h֔T 6;I*+%,!ȟ"lP~][6m) VV:<"J_C6F V-6Hkc\ 0ړviGX.Pl;VZ-bI_m@g щJ^+{Һ(cWV{K''g{z 适&t4ǃQy'p%^;rЉn$W}'KihRPF/)sYQ2;h31 endstream endobj 4108 0 obj 838 endobj 4109 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4107 0 R >> endobj 4110 0 obj << /Length 4111 0 R /Filter /FlateDecode >> stream xVKs0W챝B8%rh;j+DS L=+;v;17 DZ߷V_WI20cEhnQkE݈}ا]ۚhYw(|Z=uw3WQ[xg˽~JBfYBHI2aXWaJ?LViSo_g4񵙺2bKHSK7Ք4^% ءX84AcF) vmzoTKCV(T%ZNH2R < RR3 搗RT0UV&v,7O]6?&$c'MR_*1tYH$Ͳ-S}2|--/kѻFc~8 [aYrsv5@ %,Ӯl@nG^? \>Xaä-v=auil7Bs+մo3/e1zYrk dUȜ7ٯdeakG a@B4N4B54@ +ʵ XOWwB}K](`4:֢[^Nǔ t%!V,V hJ-٬% LN#fk3EćJT{Zlʗ wv45 (}5j-P <) UӤؿ1j[_?Nx;JY mtw|ztqw3%SݖcU7 endstream endobj 4111 0 obj 776 endobj 4112 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4110 0 R >> endobj 4113 0 obj << /Length 4114 0 R /Filter /FlateDecode >> stream xVN0}W#HK6ƵPT ^X4v;*M<ǀȐCrnl $$>As ?R7cYZh{s ?̣;=Gjw-p*7 WN}:-eSs? CÔN7 K3JAFYyo?ZY`-ʯ^ǟ$W$+#Q8%%% J4RpRmme C6!Ej2T5Ek8s™r^- (%nD3e pt0dƳiv4*mlln" F q#kϳL&5-4\CDPN04Xp)'R=̗$%J%:Ub˪ uj@QIiSg=oFwHOw Pƀ^@e> endobj 4116 0 obj << /Length 4117 0 R /Filter /FlateDecode >> stream xTM0W̱=;HjJ=lkni}!qG~yᗄq'7 l4*Kܱøjwc?w?kKES%q=qL7*X$&)Pby -͉`B)3=hgJMP[{s1){c§XF,4VlC80$2iV@|mSvd^Nwi`QHlPE0$rL<'0Eh3:8 DsƮeLﲎxp= DeY ΝSJ%s2w[&)D +woeK,{cTH塸ers=I])2#:'zS[N Klk㠭zXځ=?y0ucu1;ڍ P Ǐ(?4y=g_2R(|pyJWWj- endstream endobj 4117 0 obj 522 endobj 4118 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4116 0 R >> endobj 4119 0 obj << /Length 4120 0 R /Filter /FlateDecode >> stream xUMs0+ʱ3MgzLƞd: AJweN 151 ?xݷ!b@8TuH"=X O,_=f{s_D'|ڈ—6QxܞGwUi}LQXֲT$ėm> C@J|yU=̼2]؋#bԦu?~VpI=>yy^N ~V-pFQփu{1U>p=/X=rƥ Lb:3w3Jc&9JOadG}]_ endstream endobj 4120 0 obj 623 endobj 4121 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4119 0 R >> endobj 4122 0 obj << /Length 4123 0 R /Filter /FlateDecode >> stream xV]o0}WVj=i=TM$PpS4imH0{|y P<.}#*xH": Q,$|E |ϗȚt۶!X]~M0>n Dʍ"6 \QoҲ׹yʹ"Uԕ[ 9w`zhnD! ǝ2BD u 'Coᣮ.g"yG>8:̳ufas}|g6~4&8pU;wS+[:[s~Tᚱqvejk,Ɠ;kZkgtZq-mcҁcRnnvKFI|!:~/o endstream endobj 4123 0 obj 708 endobj 4124 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4122 0 R >> endobj 4125 0 obj << /Length 4126 0 R /Filter /FlateDecode >> stream xVr6}W[%o,n53qC)E2$e A>54"],ER=Ae<mlb" C_"ݭ6E𲆿" Glu2TXYέw7##ԷAma0׳YJ<**QW`57dӞ4b].7 _adR!9*|!޿ϖUbǥj57=d;>8fBя$lb`|uwxdk!LofPIS)DP6JXp%{Tץ\lkQq*EV#%ŕGluW;{8vA2_Jpz/QJQeW+u<x;;)Jer2wu izCubXe/\m7d8RKBGZ4Y)a&OİuΠ8U&W+i<٠.J9U|ϢNPS%F$IJ5Z<2GTZvu%x<Ӂ/AVd514|<\}\ة*(/6j 4ZTq)Zk x9ƘMA_E.`ƒϵ`aΪkkc?绵 BdyE܄K!\*F 4㻫ۏn4 !^~K4?Θ= ~(9ٴ`V_HR= endstream endobj 4126 0 obj 970 endobj 4127 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4125 0 R >> endobj 4128 0 obj << /Length 4129 0 R /Filter /FlateDecode >> stream xUn0+%Q̱@]"QPBI%%ˎֱe€;\/<>7nBRzO'1DGԷpbvxX{/UESN*7 {s}@0DZ"Nr}(D%SK&/Z{Q՚}Dm__k#juwQ (F¶kVaA1f']?*3)JsmrY0)aLlW@rH0<\R1%5mv`~VJT ԍqd.!)rUC1N]L2D`Dw1rɑ {Ғk21u5>8.PvG:ҟ0jgS풹~ G!NrF{cW}\ endstream endobj 4129 0 obj 568 endobj 4130 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4128 0 R >> endobj 4131 0 obj << /Length 4132 0 R /Filter /FlateDecode >> stream xUM0+=`JMV ccwÏ7< (޷nPf0/!I{~o[Vi?z~e@[hV@臊6 `d-Rk%DDp.>ݛϰ,vme867O ?X.>+#"]-.Iu(%vn.UjJ8xT극+&%z~3WHN82b "1?r1Gc UmʢBeI&w2BilĄsGNa$ CjeU7ESO$ZEZ<s ")7Rxdj(8dR0²WX+Z&{3{LLw].wW1]-ވ4i{s]^a̓2EĢ(}B ۴mh!ZH4~m6126ֱ-,$ R&zڨ_0'rFItq('wvUq endstream endobj 4132 0 obj 555 endobj 4133 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4131 0 R >> endobj 4134 0 obj << /Type /Action /S /GoTo /D [3974 0 R /XYZ 72.0 720.0 null] >> endobj 4135 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 246.77 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4134 0 R /H /I >> endobj 4136 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4134 0 R /H /I >> endobj 4137 0 obj << /Type /Action /S /GoTo /D [3977 0 R /XYZ 72.0 720.0 null] >> endobj 4138 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 299.8 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4137 0 R /H /I >> endobj 4139 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 697.5 539.999 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4137 0 R /H /I >> endobj 4140 0 obj << /Type /Action /S /GoTo /D [3980 0 R /XYZ 72.0 720.0 null] >> endobj 4141 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 261.49 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4140 0 R /H /I >> endobj 4142 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4140 0 R /H /I >> endobj 4143 0 obj << /Type /Action /S /GoTo /D [3983 0 R /XYZ 72.0 720.0 null] >> endobj 4144 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 269.26 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4143 0 R /H /I >> endobj 4145 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 673.5 539.999 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4143 0 R /H /I >> endobj 4146 0 obj << /Type /Action /S /GoTo /D [3986 0 R /XYZ 72.0 720.0 null] >> endobj 4147 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 294.81 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4146 0 R /H /I >> endobj 4148 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4146 0 R /H /I >> endobj 4149 0 obj << /Type /Action /S /GoTo /D [3989 0 R /XYZ 72.0 720.0 null] >> endobj 4150 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 649.5 257.476 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4149 0 R /H /I >> endobj 4151 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 649.5 539.997 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4149 0 R /H /I >> endobj 4152 0 obj << /Type /Action /S /GoTo /D [3992 0 R /XYZ 72.0 720.0 null] >> endobj 4153 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 219.54 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4152 0 R /H /I >> endobj 4154 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 637.5 539.999 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4152 0 R /H /I >> endobj 4155 0 obj << /Type /Action /S /GoTo /D [3995 0 R /XYZ 72.0 720.0 null] >> endobj 4156 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 240.08 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4155 0 R /H /I >> endobj 4157 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 625.5 540.0 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4155 0 R /H /I >> endobj 4158 0 obj << /Type /Action /S /GoTo /D [3998 0 R /XYZ 72.0 720.0 null] >> endobj 4159 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 243.97 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4158 0 R /H /I >> endobj 4160 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4158 0 R /H /I >> endobj 4161 0 obj << /Type /Action /S /GoTo /D [4001 0 R /XYZ 72.0 720.0 null] >> endobj 4162 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 255.63 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4161 0 R /H /I >> endobj 4163 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 601.5 539.999 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4161 0 R /H /I >> endobj 4164 0 obj << /Type /Action /S /GoTo /D [4004 0 R /XYZ 72.0 720.0 null] >> endobj 4165 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 262.87 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4166 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4164 0 R /H /I >> endobj 4167 0 obj << /Type /Action /S /GoTo /D [4007 0 R /XYZ 72.0 720.0 null] >> endobj 4168 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 251.76 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4169 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4167 0 R /H /I >> endobj 4170 0 obj << /Type /Action /S /GoTo /D [4010 0 R /XYZ 72.0 720.0 null] >> endobj 4171 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 565.5 243.98 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4170 0 R /H /I >> endobj 4172 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 565.5 539.998 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4170 0 R /H /I >> endobj 4173 0 obj << /Type /Action /S /GoTo /D [4013 0 R /XYZ 72.0 720.0 null] >> endobj 4174 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 243.42 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4175 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 553.5 540.0 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4173 0 R /H /I >> endobj 4176 0 obj << /Type /Action /S /GoTo /D [4016 0 R /XYZ 72.0 720.0 null] >> endobj 4177 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 247.31 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4178 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4176 0 R /H /I >> endobj 4179 0 obj << /Type /Action /S /GoTo /D [4019 0 R /XYZ 72.0 720.0 null] >> endobj 4180 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 237.31 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4181 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 529.5 540.0 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4179 0 R /H /I >> endobj 4182 0 obj << /Type /Action /S /GoTo /D [4022 0 R /XYZ 72.0 720.0 null] >> endobj 4183 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 240.65 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4182 0 R /H /I >> endobj 4184 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4182 0 R /H /I >> endobj 4185 0 obj << /Type /Action /S /GoTo /D [4025 0 R /XYZ 72.0 720.0 null] >> endobj 4186 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 505.5 250.64 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4185 0 R /H /I >> endobj 4187 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 505.5 539.999 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4185 0 R /H /I >> endobj 4188 0 obj << /Type /Action /S /GoTo /D [4028 0 R /XYZ 72.0 720.0 null] >> endobj 4189 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 222.88 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4188 0 R /H /I >> endobj 4190 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4188 0 R /H /I >> endobj 4191 0 obj << /Type /Action /S /GoTo /D [4031 0 R /XYZ 72.0 720.0 null] >> endobj 4192 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 224.54 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4193 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4191 0 R /H /I >> endobj 4194 0 obj << /Type /Action /S /GoTo /D [4034 0 R /XYZ 72.0 720.0 null] >> endobj 4195 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 226.21 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4196 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 469.5 540.0 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4194 0 R /H /I >> endobj 4197 0 obj << /Type /Action /S /GoTo /D [4037 0 R /XYZ 72.0 720.0 null] >> endobj 4198 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 220.1 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4197 0 R /H /I >> endobj 4199 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 457.5 539.999 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4197 0 R /H /I >> endobj 4200 0 obj << /Type /Action /S /GoTo /D [4040 0 R /XYZ 72.0 720.0 null] >> endobj 4201 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 227.88 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4202 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 445.5 540.0 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4200 0 R /H /I >> endobj 4203 0 obj << /Type /Action /S /GoTo /D [4043 0 R /XYZ 72.0 720.0 null] >> endobj 4204 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 222.32 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4203 0 R /H /I >> endobj 4205 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4203 0 R /H /I >> endobj 4206 0 obj << /Type /Action /S /GoTo /D [4046 0 R /XYZ 72.0 720.0 null] >> endobj 4207 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 220.09 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4206 0 R /H /I >> endobj 4208 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4206 0 R /H /I >> endobj 4209 0 obj << /Type /Action /S /GoTo /D [4049 0 R /XYZ 72.0 720.0 null] >> endobj 4210 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 238.42 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4211 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4209 0 R /H /I >> endobj 4212 0 obj << /Type /Action /S /GoTo /D [4052 0 R /XYZ 72.0 720.0 null] >> endobj 4213 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 230.64 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4212 0 R /H /I >> endobj 4214 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 397.5 539.999 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4212 0 R /H /I >> endobj 4215 0 obj << /Type /Action /S /GoTo /D [4055 0 R /XYZ 72.0 720.0 null] >> endobj 4216 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 234.54 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4215 0 R /H /I >> endobj 4217 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 385.5 540.0 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4215 0 R /H /I >> endobj 4218 0 obj << /Type /Action /S /GoTo /D [4058 0 R /XYZ 72.0 720.0 null] >> endobj 4219 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 223.43 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4218 0 R /H /I >> endobj 4220 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 373.5 539.999 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4218 0 R /H /I >> endobj 4221 0 obj << /Type /Action /S /GoTo /D [4061 0 R /XYZ 72.0 720.0 null] >> endobj 4222 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 241.76 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4223 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 361.5 539.999 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4221 0 R /H /I >> endobj 4224 0 obj << /Type /Action /S /GoTo /D [4064 0 R /XYZ 72.0 720.0 null] >> endobj 4225 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 237.88 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4226 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 349.5 540.0 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4224 0 R /H /I >> endobj 4227 0 obj << /Type /Action /S /GoTo /D [4067 0 R /XYZ 72.0 720.0 null] >> endobj 4228 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 337.5 262.32 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4227 0 R /H /I >> endobj 4229 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 337.5 540.0 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4227 0 R /H /I >> endobj 4230 0 obj << /Type /Action /S /GoTo /D [4070 0 R /XYZ 72.0 720.0 null] >> endobj 4231 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 263.99 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4232 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 325.5 540.0 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4230 0 R /H /I >> endobj 4233 0 obj << /Type /Action /S /GoTo /D [4073 0 R /XYZ 72.0 720.0 null] >> endobj 4234 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 313.5 231.19 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4233 0 R /H /I >> endobj 4235 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 313.5 539.999 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4233 0 R /H /I >> endobj 4236 0 obj << /Type /Action /S /GoTo /D [4076 0 R /XYZ 72.0 720.0 null] >> endobj 4237 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 277.86 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4238 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4236 0 R /H /I >> endobj 4239 0 obj << /Type /Action /S /GoTo /D [4079 0 R /XYZ 72.0 720.0 null] >> endobj 4240 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 235.1 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4239 0 R /H /I >> endobj 4241 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 289.5 540.0 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4239 0 R /H /I >> endobj 4242 0 obj << /Type /Action /S /GoTo /D [4082 0 R /XYZ 72.0 720.0 null] >> endobj 4243 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 226.76 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4242 0 R /H /I >> endobj 4244 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4242 0 R /H /I >> endobj 4245 0 obj << /Type /Action /S /GoTo /D [4085 0 R /XYZ 72.0 720.0 null] >> endobj 4246 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 224.53 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4245 0 R /H /I >> endobj 4247 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4245 0 R /H /I >> endobj 4248 0 obj << /Type /Action /S /GoTo /D [4088 0 R /XYZ 72.0 720.0 null] >> endobj 4249 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 248.97 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4250 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 253.5 539.998 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4248 0 R /H /I >> endobj 4251 0 obj << /Type /Action /S /GoTo /D [4091 0 R /XYZ 72.0 720.0 null] >> endobj 4252 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 250.64 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4253 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 241.5 539.999 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4251 0 R /H /I >> endobj 4254 0 obj << /Type /Action /S /GoTo /D [4094 0 R /XYZ 72.0 720.0 null] >> endobj 4255 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 235.08 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4254 0 R /H /I >> endobj 4256 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 229.5 540.0 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4254 0 R /H /I >> endobj 4257 0 obj << /Type /Action /S /GoTo /D [4097 0 R /XYZ 72.0 720.0 null] >> endobj 4258 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 237.31 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4257 0 R /H /I >> endobj 4259 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 217.5 540.0 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4257 0 R /H /I >> endobj 4260 0 obj << /Type /Action /S /GoTo /D [4100 0 R /XYZ 72.0 720.0 null] >> endobj 4261 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 236.75 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4262 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4260 0 R /H /I >> endobj 4263 0 obj << /Type /Action /S /GoTo /D [4103 0 R /XYZ 72.0 720.0 null] >> endobj 4264 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 261.19 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4265 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 193.5 539.998 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4263 0 R /H /I >> endobj 4266 0 obj << /Type /Action /S /GoTo /D [4106 0 R /XYZ 72.0 720.0 null] >> endobj 4267 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 262.86 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4266 0 R /H /I >> endobj 4268 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 181.5 539.999 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4266 0 R /H /I >> endobj 4269 0 obj << /Type /Action /S /GoTo /D [4109 0 R /XYZ 72.0 720.0 null] >> endobj 4270 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 227.87 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4271 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 169.5 540.0 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4269 0 R /H /I >> endobj 4272 0 obj << /Type /Action /S /GoTo /D [4112 0 R /XYZ 72.0 720.0 null] >> endobj 4273 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 252.31 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4274 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 157.5 539.999 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4272 0 R /H /I >> endobj 4275 0 obj << /Type /Action /S /GoTo /D [4115 0 R /XYZ 72.0 720.0 null] >> endobj 4276 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 145.5 253.98 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4277 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 145.5 539.999 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4275 0 R /H /I >> endobj 4278 0 obj << /Type /Action /S /GoTo /D [4118 0 R /XYZ 72.0 720.0 null] >> endobj 4279 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 212.6 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4278 0 R /H /I >> endobj 4280 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4278 0 R /H /I >> endobj 4281 0 obj << /Type /Action /S /GoTo /D [4121 0 R /XYZ 72.0 720.0 null] >> endobj 4282 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 222.61 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4283 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 121.5 540.0 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4281 0 R /H /I >> endobj 4284 0 obj << /Type /Action /S /GoTo /D [4124 0 R /XYZ 72.0 720.0 null] >> endobj 4285 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 109.5 215.92 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4284 0 R /H /I >> endobj 4286 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 109.5 540.0 118.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4284 0 R /H /I >> endobj 4287 0 obj << /Type /Action /S /GoTo /D [4127 0 R /XYZ 72.0 720.0 null] >> endobj 4288 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 97.5 225.92 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4289 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 97.5 539.999 106.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4287 0 R /H /I >> endobj 4290 0 obj << /Type /Action /S /GoTo /D [4130 0 R /XYZ 72.0 720.0 null] >> endobj 4291 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 85.5 225.38 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4292 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 85.5 539.999 94.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4290 0 R /H /I >> endobj 4293 0 obj << /Type /Action /S /GoTo /D [4133 0 R /XYZ 72.0 720.0 null] >> endobj 4294 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 73.5 219.83 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4293 0 R /H /I >> endobj 4295 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 73.5 539.999 82.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4293 0 R /H /I >> endobj 4296 0 obj << /Length 4297 0 R /Filter /FlateDecode >> stream x]ו{ ^&ө\1@`Ė-X"5$mg}jl6ϑXU[rOת{7?uo?ǫ/?jϧY/8?PoO~?_߼f{_9?x{o>/O_׶7wh/4vk_ͧ8Vx^߽_?OwOQ:O?Q_:H??||Ӈ/Ӈ__~>s5&qH%^C&.qJ !!!!))))MS5v>q]x@<6C.x7Ep`l ?` q````````&Mv"Ep!SN\"Dp@07 sA0w<@0   LLlqq^8wO{~~^e{ibkxTw盩ԍ)~*uR}n>c]-꠺SUSzg:&E,Y.M,c2v],c82C, $$$F,Y6dɲ A,'YNd9r"%enbX.ebX!yedddddddَl[zpvUvgF}wWe釷wocu3- }N'uSzH}Ɩ:T/۞Reeeeeeee#F<ì uߩNc:T/Au,Y.\bYC˺#*X=QŲB}e,,,,,,,,Y6ldɲe'N,Yd9r"E,XSŲBe5Z,뾩bYwN& $$/O˶߿oPݩ^R?(7rR|rS S S SMSMSMSMSmLj7nTS:Lu4iT.RZI j$?H jjjjjjjj3fTvSMu0aTNS]Lu"՚/PN5_|'՚/PN5_Tk@~>}>4_`Šې7?ow4Z^[$?jbɛچX|P^;KNAaaaaiiiT6SmMj7aTNS:Mu2eTc#H56RTc'I5vRT 8L5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H57R͍Ts#H5wR͝Ts'~^,}% ZwR ZR Lj;U3+y-Oc<,/ayT.S]ZI&$jMH('՚H~jMH(70000444fTvSM0aTNSLu2E5!TkB"N5!TkBB9քrS S S SMSMSm>6:?d>?ڬ5Z2Ӆ|P~~w<,/kʛZ{}PNׇ^j!yjjjjjj3fTvSMu0aTNSLu"rR>$ITkR>(70004444fTvSMu0aTNSLu"rR>('rR>$?HTTTTTTT_qf76Oxm^|P yX-_yB,'c#c#c#c'c'c'c' 00004444fTvSMu0aTNSLu"H56RTc#I5vRT 8H5S S S S SMSMSMSmLj7nTS:Lu4iT.S]Fj;Nyjaaaaii]GO]j3ЯN]nO<ڃ;?<o^ݽD -<,/ɏ֐7';;;6Sm} K7'3i6{<,7iT.RTc#H5vRTc'I5RT00004444fTvSMu0aTNSLu"H57R͍Ts#I5wR͝T (?+(7iT.S]ZPNp;-j="A Lj3nTS:Lu4iT.S]zEI~TI zrS S S S SMSMSMSmLj7nTS:Lu4iT.S]ZOPN|;2j=#C9S2jjjjj1]x0f؋6fooVX^~n4)?/(Oay|Q~^(PnT.S]ZOQNFF5?TTTLy,f+y@yX-_ 7'i.S]LujlFj;Aqjz~7IJ&JReeeeeeee#F,;Yvd9r A,'YN\dre I-54Z,kd!50,,,,,,,__Lꌾߚ:/ڻ{anyZ>(qŅ<,/_l\q!o2eTTTTTTTTTTTTTTTTTT6SmMj7nTS:Mu2eTFjl;NjAqjjjjjjj3fTvSMu0aTNSLu"H57R͍Ts'I5wR͝T Ӣgߜݴ(9^||Q˛|P>7Mu4eT֞ڔj-N6Z{jK~jM6SmLj7nTS:Mu4eTF6Z{jKjM9֞ڔj-yjjjjjjj3fTvSMu0aTNS]Lu"SrR=%IԦTkOmIԦTTTTTTktWy<.~'p7wikEi|<,/ϷʛiT.S]LujfTk=;֊6IִQNrS S S SMSMSMSmLj3nTS:Lu4iT.S]Z('Z&NrREoZ(70004444fTvSMu0aTNSLu"ZG9֊8IQN*NTk]ZϸEm2YԷ?||~`Ux*.7's<-[N5vTk"N5vTkB9؅rS S S SMSMSMSmLǶ¥|Q˛[fyXnT.S]ZcI.ZcI.ZcM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]H.j]('PN5v PnaaaaiiQg>_ٿϯ?< ]^(X^jMMyX-_ߴ)oOʗ.S]zn9Cj0D9CZ; QnaaaaiiiTSiޮ}<,/ay|R>wrS]Lu"arR$IvTTk!M5L5L5L5M5M5Mj3fTvS:Lu0iTNS]Luj0D9CZ; QNÐCjjjjjjS}߾gAե^~3)?SǔErS]Z[PNe;֖=jm#AeLj;Um|P>6n|7Mu2EeZ[PNeZ[H~jmC6SmLj7nTS:Mu4eT.R-{('ڲGTkI졜TkM5L5L5L5M5M׹4wVaG^Z fyX-_j0ɛZ &NS]Lu"j0I To$'j0ILrS S S SMSMSMSmLj3nTS:Lu4iT.S]i5i5|'O 'O~Z 6SmLj7nTS:Mu4eT~Z 9~Z 9~Z 9~Z v=?Hj0M5L5L5L5L5M5Mų@wy}egۘv(p$Mu2eTkZK$I>PNATkLj3nTS:Lu4iT.S]ZK('Z@9I>H~j-}TTTTTTT[<vݻ?/z/w/SB]GS;BTkuPMK,kK Ų2PbY3Ų&2Rec& $$$F,Y6dɲ A,'YNd9r"%5vZ,k.5rZ,k!5n,,,,,,,,Y6ldɲe'A,Yd9r"EK,k"XLEjbYidddddddYS|0Eɯm!_^IN!fyX-_~땼Y>)+yZnT.S]+98B^+98JnaaaiiiT~~|QyWf^i^aNS]Lu^ N/{^/8JnaaaiiiiT6SM0aTNS:Mu2E/{^+98B~^Z㢻`\ԾoE^Z|C|C<-oE@NS]LujmeK9VjmeK9VZ[RnaaaaiiiT6SMj7aTNS:Mu2eTk+[I|'ʖrRl)'ʖrS S S SMSMSMSmLj3nTS:Lu4iT.S]Z[RN;Vjme+A-bߓ`Կmk;۶ǣy4Y>)_iv|ayToHN{ ?Hv|Lj3nTvS:Lu4iT.S]Hv|z;ToHN{$'=jjjjjjj3fTvSMu0aTNSLu"=wR#9ގ =jjjjjjm1l3}3^o3?Xb=xDZ>(?l<,/k]IN.rRuAj TTTTTTT6S=ly~.VʛVAc+aNS]Luj Tk];ֺ II~j TTTTTTTT6SmMj7aTS:Mu2eTk]Z('ZD9ֺ RuAjjjjjj'7)ڮ|~8x"w}Q>˛[fyXnTkZC9ִFTkZC9ִrRi Lj;UǿWEy?,oOnyZ>(aNS]LujMk('՚HjMk('՚H~jMk(70004444fTvSMu0aTNSLu"՚PN5TkZC9ִFTkZCG?4mڦzZk5"i)[(?ʦYNFFFNNNNAAaaaaiiiiT6SM0aTNS:Mu2Ejl);NjaaaaaiiiT6SMj7aTNS:Mu2eTs#H57R͝Ts'I5R̓T (?WRwwM5L5L5L5M5M5M5Mj3fTvS:Lu0iT.S]HjqT;Zw%?HSnaaaaiiiT6SMj7aTNS:Mu2eT;Zw%ISNuǝrR;jjjjj[kc;ꁳ+k}g+_w˗Iۗ|P~TkM5L5L5L5M5M5Mj3vu~/v)_f|얧Y4eT֖jmy NZ[H~jmy@6SmLj7nTS:Mu4eT֖jmy@9֖jmy A,p,/x@@}k?z^/yZ>(Ey}YnT.REj-0TkZ $?H!PnaaaaiiiT6SMj7aTNS:Mu2eTc#H56RTc'I5RT 8L5L5L5L5M5M5Mj3fTvS:Lu0iTNS]Luj-Tkɇ;IH~j- TTTTTTTk]5|0/Ms>/z&ws?/_l"y!oO_n"y!O/6M$/r 9Dyjjjjjjj3fTvS:Lu0aTNS]Lujlr 9DN/7M$/rɯaaaaiiiT6SMj7aTNS:Mu2eT_n"y!'՗H~=I&rR}䅜T_n"y!700044ckkI~K<\r~+Y%#aP~~+<,/ky IrR5Zk('Z^#yjjjjjj3fTgq~+/ay|R>vA,Mu2eTky Zk$IPNFTky Lj3nTS:Lu4iT.S]Zk('Z^C9IH~j-TTTTTTT_%snyw8d.w4߯ԍ)f&uR=>ɤ&A,'YNdrZ2$Xւ!Ų I-XC,kddddddddȲe#N,;Yvd9r$I,Y.\dIJI-],k1bYKZ$5YYYY&Y&Y&Y6ldȲe'N,Yd9r$I,Y.>RezZ#XJu>Reeee%}>=wƃa<}~x79/G?EyAH,{i&$7iT.S]Z('Z%NZrRZZ(70004444fTo7~iv[(@YnT.RTc#H56RTc'I5RT00000444fTvSM0aTNSLu2EjnNjAyjZjl~Է_kw_o4\Oj].ɛzbW|P^OJ0iT.S]HxT'IzT'R'(70000444fTKu#J~^Pw IyByZnT.S]ZDQNT;sQj=E9ֳQjjjjjjj3fTvSMu0aTNSLu"zhrRǦ$IT)R(7000444:Mtø깨]NܽtiQ˛[fyXnT.S]ZEQN\;sQj=%A\Ljmy-Oc<,/ayT.S]sQj=%N\ZEQN\aaaaiiiT6SMj7aTNS:Mu2eTs#H57R͝Ts'I5R̓T )i|n:Mu2E$'gz;LrR~A$70004444fTvSMu0aTNSLu"՚QN$'g3R~&6SmLj7nTS:Mu4eT.R~&9N?|'g3Ivbnt}07ewxY۞)>On7'c<-OS:Mu2eTk&E9LJTk&E9LJTk&E6SmN|m\nyZ>(ay|Q>˛妺Lu"/ZN5Tk&E9LJTk&E6SmLj7nTS:Mu4eT.RZ3)wRZ3)IfRjjjjjꋙ]>'}7.Om{껟n+fV>z|/?=?֌şoӇ_7oϯ~r~/|z_>//>^o?Ww6W5翎O/~z__5J endstream endobj 4297 0 obj 14372 endobj 4298 0 obj [ 4135 0 R 4136 0 R 4138 0 R 4139 0 R 4141 0 R 4142 0 R 4144 0 R 4145 0 R 4147 0 R 4148 0 R 4150 0 R 4151 0 R 4153 0 R 4154 0 R 4156 0 R 4157 0 R 4159 0 R 4160 0 R 4162 0 R 4163 0 R 4165 0 R 4166 0 R 4168 0 R 4169 0 R 4171 0 R 4172 0 R 4174 0 R 4175 0 R 4177 0 R 4178 0 R 4180 0 R 4181 0 R 4183 0 R 4184 0 R 4186 0 R 4187 0 R 4189 0 R 4190 0 R 4192 0 R 4193 0 R 4195 0 R 4196 0 R 4198 0 R 4199 0 R 4201 0 R 4202 0 R 4204 0 R 4205 0 R 4207 0 R 4208 0 R 4210 0 R 4211 0 R 4213 0 R 4214 0 R 4216 0 R 4217 0 R 4219 0 R 4220 0 R 4222 0 R 4223 0 R 4225 0 R 4226 0 R 4228 0 R 4229 0 R 4231 0 R 4232 0 R 4234 0 R 4235 0 R 4237 0 R 4238 0 R 4240 0 R 4241 0 R 4243 0 R 4244 0 R 4246 0 R 4247 0 R 4249 0 R 4250 0 R 4252 0 R 4253 0 R 4255 0 R 4256 0 R 4258 0 R 4259 0 R 4261 0 R 4262 0 R 4264 0 R 4265 0 R 4267 0 R 4268 0 R 4270 0 R 4271 0 R 4273 0 R 4274 0 R 4276 0 R 4277 0 R 4279 0 R 4280 0 R 4282 0 R 4283 0 R 4285 0 R 4286 0 R 4288 0 R 4289 0 R 4291 0 R 4292 0 R 4294 0 R 4295 0 R ] endobj 4299 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 4298 0 R /Contents 4296 0 R >> endobj 4300 0 obj << /Length 4301 0 R /Filter /FlateDecode >> stream xUMo0+`JP) =ՊXKwq$-<1DGdžwF\?jCv,`Ws endstream endobj 4301 0 obj 580 endobj 4302 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4300 0 R >> endobj 4303 0 obj << /Length 4304 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ}NC*V &AK0UݯB6D]8|yJ`\AH UXv"i#p»8<<.w 4 o>sҥ'M4a|&R AZ#Nr2(LWp{vܳ6^*8miZ=L'_G3B?X7uQh㥛c7Mp/{-TFяl jUNy"Jė2$s| "cU2*Si9e>XZ7olYf_ BАD , fvHȥhށNH1FL(CP-(k}bro=UKG )pw XmaBd[GܝO/ F%<$vKP=\n(K Ug{3JQ>ƙU0trqzݜ~w7=?K9!zv|07z!0ݠo=PXV3w~~'.r>X!mZڵn[ܾmš8 ?^+~ɜ B0ʏ?'?3Ypf endstream endobj 4304 0 obj 666 endobj 4305 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4303 0 R >> endobj 4306 0 obj << /Length 4307 0 R /Filter /FlateDecode >> stream xVM0+ú=Vj**Q{ج*IWC>=u7D1z͛l;?(a { K0Ixpˢ?;g0=ܬ{POψ.%h౓}WQȂO$FaZb"Zs 1\nLR_0ui,3̾g YM~mF4^ztjcpJZY8U!)bߣʖ?}%YXԦm@e  KmR!1\~9K03E ~unPNK%Q6OQV.w聖DX-JcŒ ")'RA%9j_IE % )˗WW!5[ 宂SaHwB`]^=6 :a=:kEE&ՈDNZ,dd ʴubl̸;Eu96)\U6E 𹞧:,;HUj\OBX0WϭJl :>?2淣 Nuȫ,> endobj 4309 0 obj << /Length 4310 0 R /Filter /FlateDecode >> stream xVMo0+qJ=DvE!la`IOm6y0x\F*e1D| (!ܱh ~Dَ>Ӿ w6= _GD3#x p=q &B(OM2?XP)CH8,V7>MQjX4Ʀk ˴vq|^$.gߵ2e/I[Kw$[poN;6 JToWqV.G2嬦ZXq|7!vetm(btujiɜ^(IN$~gWaU~ endstream endobj 4310 0 obj 649 endobj 4311 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4309 0 R >> endobj 4312 0 obj << /Length 4313 0 R /Filter /FlateDecode >> stream xVMo0+Fj?X 9Vj*)U{HEKؐ(~bjy3g'D }6@Xd; `Ne5َD+U3xp[ܻ%B>Tn޷r"߷F~8YYl> pJ/ZeQJJIe`8*S *56b~c75#@6 ƄQyqQ::L9"('b!#b?M<􉙜HLeL WsR=KFYkiYȪM,’a^!]-5(?XDqh M풥ax'C_Iɝ*jڲ4~'u/^|gھ%#bhj]I8V(ή.-kpB`ĜCGYzSfVui kd~J.,SRka-U%TZ++Cȥrgg#8Nl-OVO:\=09wZseݦcb\TmV8J*֥Syo4f6uy]ܚ6lu+4: [hB { w3wz6# Zhxhj}_4nAgj,ê5: =(1'>Pq9}B'ZU  endstream endobj 4313 0 obj 720 endobj 4314 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4312 0 R >> endobj 4315 0 obj << /Length 4316 0 R /Filter /FlateDecode >> stream xVMo@+~9Vj*)(b@vqβLnMŢa߼}3Jso] `EXO~ !X(|1x QHNBZeu}QҲH.\BJawy-&MeiV;ӸGMτ ?v}Aǿ"ݤP8% -vZ,0)bWVM9fSPz$' JJ!ɱU2%)(K2\un'}1Z¢\Bov^Y S6{!K)*g(J$%Q!oYծp{DT넧tA1H!l5^d3HP,šgi`im äU^rBIJYA.ƌjɰ}Klq*vvyK+ j\krO$zfQ] Wqθk ߏv n#W]#gzfe![,q)|5;:WYa֮"/kl9;? fWgeK:6ŏQ!эvަ~=> endobj 4318 0 obj << /Length 4319 0 R /Filter /FlateDecode >> stream xVK0+_`JMVvU`*ho3X?wfv6MpD]mQxX,ykoK ߝy|H]xvzwpG78W. A|N-\JI9Qi><PsYU+شe& jT|x9}c]|RSFTji}]M3ŀb$t]&Ko(1옣."n"߷VES}z&}Q0&Zʜ蝜FAoujUQ5t$Y@9ฬaghK} 0<ϤA7jf ݒ#)|)= ecw-īYmb|]BWF2g)XG}.Ӕa[8OgA4"iS(c(K%/ 0/5Y61a,jM牙;vkFxyqUM3-\**VMcniz1C[Zu˴~&9Gi#.9> endobj 4321 0 obj << /Length 4322 0 R /Filter /FlateDecode >> stream xVMo@+Fj~CJ=Dl80,62$J}g1uOMEoΛgG,a }p1 !\cG݂Kb(_ڇd !ݹhq>8sn!joV׹J`1/cAr}.J3]d%`4JhuqηQᜲwVmRc#t{즰 ^ !|Q#른rxϲТWgBn/rB(VbI}Cxȣ !zJ'! D'kMZBZһbEX<7JgTu :ĞQ,Ax)G^xgRbOc^nCI-}gOZ@ĥăm)G)8--9c:ȀVE]yG(l |!_)dcI˲N7623]ɺm) Һc_ph'کFej UZPlsHL 0!+Q#Im"I i-'C_Y1Z&B*i]9=J'#j.CT jw G8*}{ihh|mkdne"/$RCD> c=byo(1vhz͜CčƿSjŷ endstream endobj 4322 0 obj 748 endobj 4323 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4321 0 R >> endobj 4324 0 obj << /Length 4325 0 R /Filter /FlateDecode >> stream xVMo0+J[?C+mWC**&A!@mUׯ4m ͼk湲mX|"Q $D42nc+lWw|΅/k4K;g bð ̓7 MZihj?[j3l%`uJhuYO]Զ5_^;&;B1qbb8S1kv)RHpL&RD Ø&o!a$!p{3%䳐`fE3(eclVB^WчT͚&fW2Pcǖq0{mNUM'THC$Mc80}# Bпz'nHB497уlV)H&WQW TMQ Z8֙ hDa連-Ks@̦YS2s髵|WPjtm cNi4tP^{Jm'ť?< \?V?VdE!R634M LU}9Rʇ},r?6i@^ ]y̻j`#d#ǔ<"P 鍖a1f(~ZAb8߼26ll4U?./BFUSU_ ^ endstream endobj 4325 0 obj 679 endobj 4326 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4324 0 R >> endobj 4327 0 obj << /Length 4328 0 R /Filter /FlateDecode >> stream xUˎ0wY`!"γ ĕBUl6ާQҲWJq""2?>ǯ$n=x(ND JTkT7O}wW۔4LVf~>' Jfqlƫ"81A Ab)\<,Vn $6-^W <.!aF !) Є%eUy;PD"BY&?I[$Qd$ah$&(tTk(¡bxZUTl,͋#%eZA0_#^']6cm#g]^ikHҴmk87䴼\e6}wxj]-ťck^v)G/Ok?3GY/ݏ0흋킹|JCaDgU5? endstream endobj 4328 0 obj 572 endobj 4329 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4327 0 R >> endobj 4330 0 obj << /Length 4331 0 R /Filter /FlateDecode >> stream xUMo0+=Ǖ6+R{h &A%@ʿ1I{6Dy_[3Haw^A}y>0paˢ݀-5+vvh7o'w(pݱuĕB?UlηQ, .wR܅̇C/y/gXUSTVCnG:^OfjʈWj-x2JDb]K%R*UGI Pl_s.1G j] */| $戋 gqZ R7]Jܚ |o|VguȋN뎪&P.Q2P%md\r| e$cMJX%3_=6&XNڗG{=n^vL0B(qXA$iU7PFUi c}3b5{Oi9gt8t]Hu4)u:PY1Н9>9-?Ic{<ϥ3爟Qj:bLC & Q.+]5_s endstream endobj 4331 0 obj 576 endobj 4332 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4330 0 R >> endobj 4333 0 obj << /Length 4334 0 R /Filter /FlateDecode >> stream xVMo0+J[?WڮJQC[ULBN_'im ͼkr 6xp ,>w("YGჱgv+n;>X‡5Ïzs%` 0oMâx$( FPXlVFmব$MҕEji,~g3B?Y.>k#ju4;&9B1qbb٥:Ƙ5jUusJ#0#J Q0&6q4x[y@ؕ$ ~O)@Ƈc2\7sR=KW&@ +s(ȪRsInIzbp8vbpnZ]Th B$x"DL$?EI(C!y#R8Mmgt 껅"l nkedeYj^ua)e M+kbhž Gif㬂6xd=9(氬l3mI׵έJ+mMRwVf?C_NǢ.L7x5hB;Dz&\e i+~CL2iuQ'ngeqB0Jή>XU_ endstream endobj 4334 0 obj 687 endobj 4335 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4333 0 R >> endobj 4336 0 obj << /Length 4337 0 R /Filter /FlateDecode >> stream xT=o0+nlgj+u!@4pR׆&:6>?>邈CZcpp9<K~LgK4Em8=R7j4ӸߤJޕ6[ݩ3-\s%|5OyЁ_)&p!]/Qyx'p8u"QBV-3 7ԍ0,9haK2x%(PcɷnId}>ɧ(vzܛP%up'M;^_o:NxA~u`0ݝe0,Sq㨚N endstream endobj 4337 0 obj 408 endobj 4338 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4336 0 R >> endobj 4339 0 obj << /Length 4340 0 R /Filter /FlateDecode >> stream xUMo0 WQ%Ym4@Mibb;'vZ;gQ$_}cl8R!4p EpB[-jZCp- ^[%*7e}#,Z3XILz!2#,zߖ:%E_RatC x R)7hQ6Dt7Ye~`KDN5:CpnmեJs 9}!d[d!u4Bt0o vPLk81LPEjGਙ5$4-&;jV7vj\*#'6|w$L.<,QeH-_۟EP> K4f1N `\'<>qE ./8j{nꌆ!]f Q=M WLuqt<|'O}qoΦއ9 ?3vt'=ִv˅L!dp#'Q[յ#`vLxe5xf6Q|Vxdƹpdg|3 endstream endobj 4340 0 obj 604 endobj 4341 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4339 0 R >> endobj 4342 0 obj << /Length 4343 0 R /Filter /FlateDecode >> stream xTn0+."EZfD@q%9dEK#[ioM$A$pL{$9`e搈 eDi ~E9~9i!&OU {x$4%<_ln"޳E"rCسO 5gi#UQbnٮ/]QW|g_YJwVzo9Fg`> endobj 4345 0 obj << /Length 4346 0 R /Filter /FlateDecode >> stream xTn0+ 3\DJf@q$,RߡDٱ2L3zq^Hϝ[L, ɃWq0>x+&B(~НtqX{~E3x|"4%<]ЧgtD?7Uu#̗iCdG1)ܖx3fIynlY>W}~T9u\#kXgyLu r[m!0FD%YELj/NKsFZLpȩK'؇qY)s`!H4qDOì) n*[`YV-ھl2(f6XTC-"JGbdZI(5 9L3ϾōM'X}Lzp2?T6ϊfχ؜!LG* r<.Y6$]:[yw]hDG99 =%6]?a H< IVR K߲:p[HEc8!Mf#bNm'/sMTPkn1~s2>9o\9:FD' endstream endobj 4346 0 obj 562 endobj 4347 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4345 0 R >> endobj 4348 0 obj << /Length 4349 0 R /Filter /FlateDecode >> stream xUKO0W̱8j=R6MB hN@Rgx̃ǀ{n9;("BI};+:4S"mW}:DzGws q`x]*6 Fa%Ghඋ\/wp.LܤQ,{ߗs ?9-[p)Jj*Ղ{^pJ**5T,|\\Tsr+Cp&(exs7dB-q_.KGySM=Dؓ# ,#sUR D+Y>"|_y]ܞ>H{WٙNZZZ?yfް[&ԝ7SeRw9QIXn D([A@Z1Oc8"I5(Mj?m2VPDx߬צ> endobj 4351 0 obj << /Length 4352 0 R /Filter /FlateDecode >> stream xT;o0+ngݱU["RB 꿯`PcArw_|o52$N,j=ab~ԇh <jBK4`М]-m!LDW2kt5gdrTl|n.:_5;O-aM3r $aiBF=ĈE0<|;d|pX[ bD$ѶiȊrC7em%f'r'R9*8#\,-[N:gG}(栬;Ma&MZj<+9Յ¹SE֤[/*U%XCMI5GOEsCK O_'4. k^3~4v>z} \U~LB6 endstream endobj 4352 0 obj 396 endobj 4353 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4351 0 R >> endobj 4354 0 obj << /Length 4355 0 R /Filter /FlateDecode >> stream xUKo@+Hv CʡUȢfmSŋ}g`S|0/ :0]z/[-@} ̍o=\??vlLNYD֔>zqww?69>}#ij]j}ΔVQ* !"rx W?@JS]?A|}{<%]YFOZ:w}E@IQG5#D۔vZe$i:I"49_LpȉC9TT*SBC =q!Q5 wol*upHQp>sn+,Ͱ)EҘחr35*륱UG,IS9('+c.€s|kf|ܐG|7Z/{ FrUmI LԿ K˹nGEM/X "o[ŋkڎ$tZ $n9BnIʑhU75L֘Xv:;(VISn4i9GhnUs*8WĒ$)s2B#gA^/+f(/hdq BYw03YtZ_/־І۶ě~`Nf\ {MYK~sVv2 endstream endobj 4355 0 obj 656 endobj 4356 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4354 0 R >> endobj 4357 0 obj << /Length 4358 0 R /Filter /FlateDecode >> stream xV]o }Բ >JTR*bdj4v6^Qr~ 8 PZdܞ\^iL}ze9݉Srrܔ.kss<ʁ.2E UjD^u1e1b8[͸X/j>/LME#Wa`KDNOhvL c~No "!?'96&iU {j)dql'y)e5ZS#ǘih3gPcYLN|W0bztA&ɼ۳.u屻ӗ2b!r$jJ슺b 3,Nh)JWgLhg Bpb}|u76\7~vnܴ`](GvkI> endobj 4360 0 obj << /Length 4361 0 R /Filter /FlateDecode >> stream xUێ0}+qWu}iԇ*T@Z;ƐBa3>s<?; ("qk 6<KMijy6hYw'u(|vc5Sg!B7 +}.OzU*p%Dpea7o_!v.o |p>8o,IůZ?IԙGVQu N*J%YEg(QGyQt5O4 Vn.' JF.gˮ2qCvI,3R4 # P֑JRJZCMј1R>j" 0fjvcG(#;|gX|4#ۗa#.exjf|OtZpz"> endobj 4363 0 obj << /Length 4364 0 R /Filter /FlateDecode >> stream xUn0}Wc+ޱ1o"U]!"TY5+~ǹP%S$g|x} #ijWk|k "&v8ᯟOV)!ƭ<%,AA?G ^UjD%zOdl7Yqf *NG &DeѠ µd = O@='3.{a\QU.Wy7T}"y!*:Q=;g=/|te'Mb:]vƦE^ߌˀȩkN8><,h(t]h 9h{ft8bj/-TVtb&7I0W]tJ:$RT2/r~KU/82 B TY4fh~Sn:cTnV`X;kL[]O |hJ5kúþAC='WL9 Gju/%߭wv՝ m endstream endobj 4364 0 obj 593 endobj 4365 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4363 0 R >> endobj 4366 0 obj << /Length 4367 0 R /Filter /FlateDecode >> stream xUn0 }WZl[]"b2J;,;K"X$))tߺAi/pt,mYBPA¤pu7ɺ0w紕9U!S*AxTu )Cmh"P#%m\lX$EY874NN't\"rU{d 9@{  &CBtęv$Q8v(fu,S}"u1*:IYWv>r]iLXʹ̷*=5,NhK(*Q9ayt$]pfAIrwƑ7_G-|]NӉ_ˢ K&>ƧW YH5.4{n5=o`ͮ\'kLg[7BkEׯdúu<ߎcB9IP2:{0. endstream endobj 4367 0 obj 562 endobj 4368 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4366 0 R >> endobj 4369 0 obj << /Length 4370 0 R /Filter /FlateDecode >> stream xUKo0+Hwl-*H{h$N`#ny%!4Ӷ3clq@oCbCqL87V=0fER>cl 2 uHp^]g8໊ am} jOÙll7 RWGnQw]_eA?jG`ϋL@eKj-8Ϧe=3OB? A#؂ .9%s 4nzcNAΩ!=g3]AiHuU h6e]+<2u[x|Segꏤe|^?]IIIatr9".f#'?mP>cFqV, S Us R/LyKw_t(⍑9 .-84& Ы[Sn< q-G6!&Y'Ssg8 Nm=_xx> endobj 4372 0 obj << /Length 4373 0 R /Filter /FlateDecode >> stream xVn0+HXZ(]CE[*lɑrB˲^Ȇ5|iH!BXDav MnoP7{J{6n­O'w0|w$H܇ǤkoaX:c7xK1/BA\B+k3Ow6O]C!:74ňɎLm$YyY\^|VlͶ䯳|e6=VFB(ŘșCJ09LJl+wk] 84TZ%E,.j'*Uh(E!FA(p*hD06kqn,OsCsz8q}a"\jy1G BxlAד: S* ޕ|zHFkߋےA[ɾ~lk9TBY(C8iAi%9Ԭa2AA W3؋WB}WE&QlSgE~l ,Dő\4QOd }qrr'iQe\$=R[V9_lEY(ؙf,trDZ[|Vv פLy%4&e ԊhَzZlWI7Ls_Q+g%c[@2 dA:[R: w#/Q I?0oGiQsNc.;x>{cUɹ endstream endobj 4373 0 obj 779 endobj 4374 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4372 0 R >> endobj 4375 0 obj << /Length 4376 0 R /Filter /FlateDecode >> stream xVn0wDj=yCb*Hh N`@ v5m}=p!un,8 FQp>D/aۛM^`5bGm F ӹh"qCΜaX9_cxY1/BA\x/+{ܛK֧Sꪡː.~0 }qbdEȡLm,EY\^|^/.|50f1 c"'vF0{"C|SO)(e2:1p0I$]%lDW C\e ;d`(e3 f/y 8Cp"FQ@F|7nboĹify"7#&,TCF3bwz_#5* +2? _ZAL<2 =D\ċ 7Q-l[gE>P"H.1O% 6@Y:U. 6ӂ׽˲ؑ=gZak~f۲qʍG0הDyff &Ϯ@C]wMSA="JÛr)Y v[/vTvbN~ʟBI"Ym.ۑ,1N%%*;=}=7xbupnhqpy?1sLI;19 endstream endobj 4376 0 obj 780 endobj 4377 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4375 0 R >> endobj 4378 0 obj << /Length 4379 0 R /Filter /FlateDecode >> stream xTMs0+fu%rj;M;!!xZW 0x޷>;PWf:qk`|0O Ef1Wh,ֺf l6OpQ{˩5ą3$o*71p}"NZ.R e\ ow"*g:7I.eoιφ]#mi Q}mРBD$ yv}Uv,r pJ."*G-R刣%cbHpCOP&M.(!o4;qPH}TgcU/YP#߇|wL,.O=E|\V,!VJ)*y|(,QF8^zC$L?zm-.&*]uegs6ϒKbb0'-vȳc.J2hB:ڭ4'XO${/P4CbXϥ0/ "'S_U5 endstream endobj 4379 0 obj 552 endobj 4380 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4378 0 R >> endobj 4381 0 obj << /Length 4382 0 R /Filter /FlateDecode >> stream xUn@wg{ U[f2RqdQ;wfxvjg8py(9"e=5ɀ0bZl۵<{_ o:μ|S!l!Z) p ~|3~ QI5y){c}N]}.S 3?ItxHCn4BDP˲|QݾZ*^*.N,B0iHPP lA<Ԝ19t/9%O훅ƛHuٟTDdT&9ޟ|>O^rFMf%y/=+FHƹyPnU}JLwUZ2ʈ`o p{m'*vt'z}e"=:lەA{2偉*v. #A6S{}^Q1lfIϦs; E}Y_jN endstream endobj 4382 0 obj 554 endobj 4383 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4381 0 R >> endobj 4384 0 obj << /Length 4385 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ`ܧmڇԇUUV N j~RC֧{|1xF*{0!6 1gԌش>[ Ѿ_^Q]""gw5Bߕ6 ޗ=F!^=6`DHT$$Dg˟'Z7_xA>,ϫV_;e?IZ\ #[p_8%JJ'˪ߤ# gHJ04ej(uV@DHG<>fV$`нf 5(F$3}PD`\Ac]=s`C؈mHPHLjӔ`%7w|_umŔ/h2BNL0+t6v8Y\ :Psf3܍h;iťI8*Y1ZR&k}t`]l-]8@ls~Fux/H\ArI`<i]Tf=yaµ5]`%,d F٠1F=?lQ/v˷s@|/D/)/79_P\ endstream endobj 4385 0 obj 682 endobj 4386 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4384 0 R >> endobj 4387 0 obj << /Length 4388 0 R /Filter /FlateDecode >> stream xV]o0}Wܷ&]qiRVUAC[U48 SHCOkCs=0ǹd0Ͻ AhFa?h ͊uڝc?Z ~yûh=KμQ!jCXz_b(BKP2"3i> n&'Z5;/oOwu[_u _AZ\#Zp ЎrK%"$y2ʋuYܗfmʊS*+yF}D[z X {Iv˘SpզlRh"=D h",OQnC)DHʐE]~tIꃝO]‘jv쟫6WE+Jt@0CmI{"CJrwjJsr:}DGdM$6M VW\KFPåym,NpA'SԦqSwγ9IU- :P.~pz=X܍v֖&Mr栛pfn2Mptu ɶVYVJ=t'VHϐ^=`XWYeXumA­'M9kVnrDZ6Jiz؊Fx 6=x{;1춪3$߮„B4x}xcUdLO endstream endobj 4388 0 obj 678 endobj 4389 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4387 0 R >> endobj 4390 0 obj << /Length 4391 0 R /Filter /FlateDecode >> stream xVO0~_G $@2K;IIұ;II@{P>wq9\dl]4Y )R$I,$1gchAw'W߯Dm ]ޣUu')m0ضMy56pQ6T1!Jm=ꋋ_E>U.= PC3rލt42٢{ʘ:1tu^:տul9mXUZ9z#r:^6!,! "O4vMzdHNd$Swc)Xww?z1ݩ8%tR\2”;"q~_2O9 a(!a-d b\=E9`SK-:ʣ]){vJ6 RQpkFbxIZduJ> endobj 4393 0 obj << /Length 4394 0 R /Filter /FlateDecode >> stream xS=o0+nl8gccj*uRu2D)$HH1B14Jg=ӽǑ0@{f.(a{ c8b2&(U8 3ty=~=c d%ķ 1cu#;v/DؑpAk!N~H!bB|~S A1Uc 63}V[HFfEBP( u(/y7YoHbkS&4Ot)R Egpa/7dʕ0ESBL48Wު;?h@ endstream endobj 4394 0 obj 327 endobj 4395 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4393 0 R >> endobj 4396 0 obj << /Length 4397 0 R /Filter /FlateDecode >> stream xUK Wq#5txZ!jzج*qK Di}xtOQf`o+(H<:hn+?G?c[~&@<<:tA3&77u1 "īZD3E"i_;xq*fPsnr8)!|O甽K2b'IS5$6&MԎ-r:慹mj9öP a#Reи )D9+?w`LN 56` LB1d?2LxH(<SU^uL#:b݇+7ٿצ<$i~}eVx&ZK'{a^)UPGn>eUKk 2ʈ`1X7y3GH8y*3фd4M.oC%ph2 "ͪ݀n?=MlekVICqX=[LLj8/KHۧ?ݡ+ǻħwݒ&:y/̪ endstream endobj 4397 0 obj 566 endobj 4398 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4396 0 R >> endobj 4399 0 obj << /Length 4400 0 R /Filter /FlateDecode >> stream xSn0+J6k+RT=D9PB$>B*DȻ;3kTzxS KpWC@ Yz;d/ dIn(|""xQ/]ïj해|9\ Ž܆dpR /QKD<sX]$8"ӑI:- q(smX&:1ݻB`StR]ɳI|X&E FCa(67-l(j*5<1i fR,i7>k.AQ9Ű7:|ꗠ)aH[)K*]o:Vg endstream endobj 4400 0 obj 363 endobj 4401 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4399 0 R >> endobj 4402 0 obj << /Length 4403 0 R /Filter /FlateDecode >> stream xTn0+7[ fD@I8 EE[;b[S'͛D0'`^ )u \1 pSx`رvq{—kFûh~@7!CgdqALw髦hFSwB1s: ;Сl(Mۯ΅Kr:߬Ӳݒ!*'hb3T8]wS& ,4K2.zfYUK#kzL6_%8!1Í&6imhzfw(nȜyM05ʜV_Yc endstream endobj 4403 0 obj 516 endobj 4404 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4402 0 R >> endobj 4405 0 obj << /Length 4406 0 R /Filter /FlateDecode >> stream xTMo0 W&Q>z밵nA C;vcwE(NvZ+G>R_"K?0[E/& H=DA(1?%;5~ ?"p?[Ļh'*m$r̷bs ,@HVpv,M^,*j]β@29G=/~'/%am=MeZp, ș2Mm5:ʘ4-fM^WW4MC^F,(d($b%C`o i}~@48/}hɎ؋puwEYF\3gsmFjY3ZvyA+ 3Umgzx]e;Ac* Jc4hOyE [Y`š<)QgHILHr췬ʗɩZF"6SEt>U|IN'joQxwC9x'x7B'n({pVG endstream endobj 4406 0 obj 535 endobj 4407 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4405 0 R >> endobj 4408 0 obj << /Length 4409 0 R /Filter /FlateDecode >> stream xTM0++u6έUzUXM DU}mIH&f<ۈOJ36Ѷ((\!K- ~ww5s aXF_g8<_Q'>D3!!,i>RF$F7$3t7r4jWfy]{ ]Tu>C5甽A_s?ECGŁ!Qfs[Tm֘fE=߶eH@0(G.1.KKcPTj3ui8b>C,sD\~۲MSH%*ZSFv.آa/Y ]1Hav&A3(D&Bk\xAscf4P վlRγҾd mOyL]1cqolg?j nMM 'upcÏ(>1Z$M\S&nڰ_ endstream endobj 4409 0 obj 534 endobj 4410 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4408 0 R >> endobj 4411 0 obj << /Length 4412 0 R /Filter /FlateDecode >> stream xTn0+ |H}+z3"$Eʔl(]D2Lb̡g]?h# ]a\1ܱpAhWq;~.@?BxnxL҆0>'8B傅q(?%_嬱nUi]պL@2ꬹ~G-9(^rΊj}}4k4=LnY2M17j 9&{K[$ekLpȩ1.taF NBcD/,6ܮ l *4r j3+)*WĴ#?A#m=P͈#ftlL$^=m퓢t+~*:z BNwokHΈа(VhLk=E3FiD -yzxk6e1 . 8YZh8oȸ(5ӵ|@/ZH19k<2ث#{*pQ{|o1þ&sNv=9>h:ij]_^ ^ endstream endobj 4412 0 obj 539 endobj 4413 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4411 0 R >> endobj 4414 0 obj << /Length 4415 0 R /Filter /FlateDecode >> stream xTn0+ |o-- p&*SEߗïnOM($jfw  Ua2*Y8NS¸vq{~$.A=)~'q#69J"%%P܅2"0h™A몞{yhu^my<읙nc)*aECB,lU4!b|Sq2kA0(Gz.= S!%ZMSzeyjkƏC ~9wv]2L# Iѽϼ}quv Sb6&ezPFxVnqa]n!.Y_]h?UVP3Hja :'sg(~Y@*P뚍?/@ 쬀Wk/NQ$OR622よF9W,_`Kb ֯m]͡ulxnU1C}U{;1;c}ە'G5>%ƨ endstream endobj 4415 0 obj 540 endobj 4416 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4414 0 R >> endobj 4417 0 obj << /Length 4418 0 R /Filter /FlateDecode >> stream xTn0+ K.IAz0"$(GvKFпR۲eք2Lb!ggW\8ev !$tB1,O_q#mvy?/;?GB Ļ`~$*mu| 8DP`DBmZ,$_CY$y XUhQVq}{4^ d}m~54ViY3Cevhm5:rLv>N|6[m2b a -{ aJ5#DsL)ڦuRro~V\W}GG.0.仿yQVɎF> endobj 4420 0 obj << /Length 4421 0 R /Filter /FlateDecode >> stream xTMo0+Hkml֪MVA!$;c?ܚo ܸc O!}&ca"M}ݎ}A|X %h{4HYoHhhx!5S\P6m7{=fFoU?1;hcd< $S78.Kb*/J0__LH Jb\U.ke<̡<+X% {]=Ȧ?P/(wE1޷]&ĜQ(-6wv=oɚ endstream endobj 4421 0 obj 542 endobj 4422 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4420 0 R >> endobj 4423 0 obj << /Length 4424 0 R /Filter /FlateDecode >> stream xTn0+._"[6z3"$(\Wr-(%#Ev{jB "1␳]  Mޑ}1D2JIU;]b7gl/8 Gǀ ߤ[n ޑD+m)%n04?Y8UFah !\5ۀ/ ׀uVHWΚGH/(x; ~뢍ëiOqF<%#!^}n[,rW13nKS" A̳(n1RkzJ09zXUTey-b&kIuݳ+}]΄0Vknz .<\.*PT" گvk2HkuȎw={Xf> endobj 4426 0 obj << /Length 4427 0 R /Filter /FlateDecode >> stream xTn0+ ;E)Лa=$AEؒbI0j" ehHσ0- WLhv~wlݧkn_A ^]a4uI0 O a> endobj 4429 0 obj << /Length 4430 0 R /Filter /FlateDecode >> stream xVn0 +xl#{o= 0XN $k+]~(ٖ&mZ'IJGRғCo?Q`sZE4. Ph93f&ݷ_G8f(iu|#v~,oP27D? ;;Tb ,+^ZH˚Xq~/F{}oM#͸"#`ya é Dkqb )..rr+ź~ >sQXy.09qt=cT??x敂%Ϟ!7 CzԘ}SMKI&Q$!#ЯB!g܋ Zfty{I :n^;.u> endobj 4432 0 obj << /Length 4433 0 R /Filter /FlateDecode >> stream xUKO0W$IoioJ{ Zj Nhm!jgϓɳǀ}pXc 8ba, Oa]Z7PJ[(|%q<-0bUl])q RݸDvb)XfCp@0AFWVz6ˊ͗Ɩ(RɃN8)eəPˏ x@8c:g_di! IYmsgy$($}(Ӻ&GD`4"$qCazX\(]7WE)W8CPU<{9쥶9v](D`)U~Cţ9b\8$fӇ,!`6H3]cA9㻖qI*Ua1DiVz.q=&\UNt쐊UonjۛF~mz`dosm쭗tẇѕUˮ2SzȢJ) v:ɂh"}+ ! iQ2/vnnRJ, dԾLlS6?w#s++ 6*Bqɪ0 endstream endobj 4433 0 obj 679 endobj 4434 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4432 0 R >> endobj 4435 0 obj << /Length 4436 0 R /Filter /FlateDecode >> stream xTn0+._"[_)Л=$Aຒ*nѿ/S0w5;'}m9lvih"BL%$*}K0v? 'roW[W RFCH󣴌SeKxqHwpwquk_VԮ<ԍdmt]|3NWJ<4i5(݁p:sV@NU[W=u͂Ҁ3B'@h` 9y.޻Gx_hwHZz'X87n6D#M$ ䷿*We;&jcm@)\;)/ʪLPT" <|]V@d41Zڦ>{C>HY\L7>d) ڇ!˼q;x;ף}gZ:Ä(gFd(s yIrdN:0frjeN/j endstream endobj 4436 0 obj 512 endobj 4437 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4435 0 R >> endobj 4438 0 obj << /Length 4439 0 R /Filter /FlateDecode >> stream xUKo0+HmsW+j=4UE %i~<$m!oc@A({n1 !FC+ ϩݱwvGƻ@tx^3nGDFa}]zC`P$Y\f y "KtYZ`祮fX`hm)q RD :|,`U P1is4Iff(yMި3!y !3R\pS|II1cŹ [f^tQAӰM_ttg Ƿs᳑.(.dyPш(!lYavuXfga1~AA2|BE"(%jTS&VVB.ئ İIz`']C(RL}GUsw]&E[ʌpFiإ X jn2vuc n]ThtXpS^]:iFnK]e(+D^+Fr=!C[~d\+ z c?7-Ȝ" k(o;j?iZ endstream endobj 4439 0 obj 607 endobj 4440 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4438 0 R >> endobj 4441 0 obj << /Length 4442 0 R /Filter /FlateDecode >> stream xUM W1 VmVk=1-8(?Uݕ0̼9yvvHs 68B!'@"DcQx `vFf/m<'߁0 ^ Zo'r2%׽waM?30s_K^@ptHq_ӰBg\:NַcL7KnR!pL_ 2f@dР2}/և"?Nň{cx</+f.ޜԆ 4,/wV>G endstream endobj 4442 0 obj 512 endobj 4443 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4441 0 R >> endobj 4444 0 obj << /Length 4445 0 R /Filter /FlateDecode >> stream xVKs0+L' zCȶbڒ#a?fzibl#-iw?}xPM&蹳1DobI ,&> endobj 4447 0 obj << /Length 4448 0 R /Filter /FlateDecode >> stream xVMo8W _޶ek(ڤCNw(Q%z6,rySBMxHzȀ{MY. #l/Uݽ=0S35C2O*:>2R8cbG7Blm~K „QB.RW Y6U?8+O"!};S}KLILS y`5IFp|0sYYÍGk6vD_{h|are̋aaJ5''jƱ Ѭ51<o6NjצqG[ևT\Xt{taZqpHK`7N@:{g;ԃ3^3::c9)W?v둬0I~ޛ :cq95\-} x\F3 wو Χ1TXaRd7OH@1h8N_!m7Țg(E.Pvnbj X-܏N[`,Ba%p@ӾFm><#dňAJBsħ2=:~1[ST()؅bV?d endstream endobj 4448 0 obj 884 endobj 4449 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Contents 4447 0 R >> endobj 4450 0 obj << /Type /Action /S /GoTo /D [4302 0 R /XYZ 72.0 720.0 null] >> endobj 4451 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 709.5 211.49 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4450 0 R /H /I >> endobj 4452 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 709.5 540.0 718.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4450 0 R /H /I >> endobj 4453 0 obj << /Type /Action /S /GoTo /D [4305 0 R /XYZ 72.0 720.0 null] >> endobj 4454 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 697.5 242.88 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4453 0 R /H /I >> endobj 4455 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 697.5 540.0 706.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4453 0 R /H /I >> endobj 4456 0 obj << /Type /Action /S /GoTo /D [4308 0 R /XYZ 72.0 720.0 null] >> endobj 4457 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 685.5 236.19 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4456 0 R /H /I >> endobj 4458 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 685.5 539.999 694.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4456 0 R /H /I >> endobj 4459 0 obj << /Type /Action /S /GoTo /D [4311 0 R /XYZ 72.0 720.0 null] >> endobj 4460 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 673.5 240.1 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4459 0 R /H /I >> endobj 4461 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 673.5 540.0 682.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4459 0 R /H /I >> endobj 4462 0 obj << /Type /Action /S /GoTo /D [4314 0 R /XYZ 72.0 720.0 null] >> endobj 4463 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 661.5 229.53 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4462 0 R /H /I >> endobj 4464 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 661.5 539.999 670.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4462 0 R /H /I >> endobj 4465 0 obj << /Type /Action /S /GoTo /D [4317 0 R /XYZ 72.0 720.0 null] >> endobj 4466 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 649.5 242.31 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4465 0 R /H /I >> endobj 4467 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 649.5 539.999 658.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4465 0 R /H /I >> endobj 4468 0 obj << /Type /Action /S /GoTo /D [4320 0 R /XYZ 72.0 720.0 null] >> endobj 4469 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 637.5 241.75 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4468 0 R /H /I >> endobj 4470 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 637.5 540.0 646.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4468 0 R /H /I >> endobj 4471 0 obj << /Type /Action /S /GoTo /D [4323 0 R /XYZ 72.0 720.0 null] >> endobj 4472 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 625.5 232.87 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4471 0 R /H /I >> endobj 4473 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 625.5 539.999 634.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4471 0 R /H /I >> endobj 4474 0 obj << /Type /Action /S /GoTo /D [4326 0 R /XYZ 72.0 720.0 null] >> endobj 4475 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 613.5 209.26 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4474 0 R /H /I >> endobj 4476 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 613.5 540.0 622.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4474 0 R /H /I >> endobj 4477 0 obj << /Type /Action /S /GoTo /D [4329 0 R /XYZ 72.0 720.0 null] >> endobj 4478 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 601.5 221.48 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4477 0 R /H /I >> endobj 4479 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 601.5 540.0 610.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4477 0 R /H /I >> endobj 4480 0 obj << /Type /Action /S /GoTo /D [4332 0 R /XYZ 72.0 720.0 null] >> endobj 4481 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 589.5 217.61 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4480 0 R /H /I >> endobj 4482 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 589.5 539.999 598.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4480 0 R /H /I >> endobj 4483 0 obj << /Type /Action /S /GoTo /D [4335 0 R /XYZ 72.0 720.0 null] >> endobj 4484 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 577.5 212.6 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4483 0 R /H /I >> endobj 4485 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 577.5 540.0 586.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4483 0 R /H /I >> endobj 4486 0 obj << /Type /Action /S /GoTo /D [4338 0 R /XYZ 72.0 720.0 null] >> endobj 4487 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 565.5 183.292 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4486 0 R /H /I >> endobj 4488 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 565.5 539.998 574.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4486 0 R /H /I >> endobj 4489 0 obj << /Type /Action /S /GoTo /D [4341 0 R /XYZ 72.0 720.0 null] >> endobj 4490 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 553.5 213.45 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4489 0 R /H /I >> endobj 4491 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 553.5 539.999 562.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4489 0 R /H /I >> endobj 4492 0 obj << /Type /Action /S /GoTo /D [4344 0 R /XYZ 72.0 720.0 null] >> endobj 4493 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 541.5 211.77 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4492 0 R /H /I >> endobj 4494 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 541.5 539.999 550.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4492 0 R /H /I >> endobj 4495 0 obj << /Type /Action /S /GoTo /D [4347 0 R /XYZ 72.0 720.0 null] >> endobj 4496 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 529.5 220.1 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4495 0 R /H /I >> endobj 4497 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 529.5 539.999 538.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4495 0 R /H /I >> endobj 4498 0 obj << /Type /Action /S /GoTo /D [4350 0 R /XYZ 72.0 720.0 null] >> endobj 4499 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 517.5 228.44 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4498 0 R /H /I >> endobj 4500 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 517.5 539.999 526.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4498 0 R /H /I >> endobj 4501 0 obj << /Type /Action /S /GoTo /D [4353 0 R /XYZ 72.0 720.0 null] >> endobj 4502 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 505.5 190.151 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4501 0 R /H /I >> endobj 4503 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 505.5 539.998 514.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4501 0 R /H /I >> endobj 4504 0 obj << /Type /Action /S /GoTo /D [4356 0 R /XYZ 72.0 720.0 null] >> endobj 4505 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 493.5 244.54 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4504 0 R /H /I >> endobj 4506 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 493.5 539.999 502.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4504 0 R /H /I >> endobj 4507 0 obj << /Type /Action /S /GoTo /D [4359 0 R /XYZ 72.0 720.0 null] >> endobj 4508 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 481.5 312.86 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4507 0 R /H /I >> endobj 4509 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 481.5 540.0 490.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4507 0 R /H /I >> endobj 4510 0 obj << /Type /Action /S /GoTo /D [4362 0 R /XYZ 72.0 720.0 null] >> endobj 4511 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 469.5 302.87 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4510 0 R /H /I >> endobj 4512 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 469.5 539.999 478.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4510 0 R /H /I >> endobj 4513 0 obj << /Type /Action /S /GoTo /D [4365 0 R /XYZ 72.0 720.0 null] >> endobj 4514 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 457.5 287.32 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4513 0 R /H /I >> endobj 4515 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 457.5 539.998 466.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4513 0 R /H /I >> endobj 4516 0 obj << /Type /Action /S /GoTo /D [4368 0 R /XYZ 72.0 720.0 null] >> endobj 4517 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 445.5 277.33 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4516 0 R /H /I >> endobj 4518 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 445.5 539.999 454.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4516 0 R /H /I >> endobj 4519 0 obj << /Type /Action /S /GoTo /D [4371 0 R /XYZ 72.0 720.0 null] >> endobj 4520 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 433.5 244.55 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4519 0 R /H /I >> endobj 4521 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 433.5 540.0 442.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4519 0 R /H /I >> endobj 4522 0 obj << /Type /Action /S /GoTo /D [4374 0 R /XYZ 72.0 720.0 null] >> endobj 4523 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 421.5 311.75 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4522 0 R /H /I >> endobj 4524 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 421.5 540.0 430.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4522 0 R /H /I >> endobj 4525 0 obj << /Type /Action /S /GoTo /D [4377 0 R /XYZ 72.0 720.0 null] >> endobj 4526 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 409.5 301.76 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4525 0 R /H /I >> endobj 4527 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 409.5 540.0 418.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4525 0 R /H /I >> endobj 4528 0 obj << /Type /Action /S /GoTo /D [4380 0 R /XYZ 72.0 720.0 null] >> endobj 4529 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 397.5 262.88 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4528 0 R /H /I >> endobj 4530 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 397.5 539.998 406.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4528 0 R /H /I >> endobj 4531 0 obj << /Type /Action /S /GoTo /D [4383 0 R /XYZ 72.0 720.0 null] >> endobj 4532 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 385.5 265.66 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4531 0 R /H /I >> endobj 4533 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 385.5 539.999 394.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4531 0 R /H /I >> endobj 4534 0 obj << /Type /Action /S /GoTo /D [4386 0 R /XYZ 72.0 720.0 null] >> endobj 4535 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 373.5 286.21 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4534 0 R /H /I >> endobj 4536 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 373.5 539.998 382.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4534 0 R /H /I >> endobj 4537 0 obj << /Type /Action /S /GoTo /D [4389 0 R /XYZ 72.0 720.0 null] >> endobj 4538 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 361.5 276.22 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4537 0 R /H /I >> endobj 4539 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 361.5 540.0 370.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4537 0 R /H /I >> endobj 4540 0 obj << /Type /Action /S /GoTo /D [4392 0 R /XYZ 72.0 720.0 null] >> endobj 4541 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 349.5 210.66 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4540 0 R /H /I >> endobj 4542 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 349.5 539.999 358.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4540 0 R /H /I >> endobj 4543 0 obj << /Type /Action /S /GoTo /D [4395 0 R /XYZ 72.0 720.0 null] >> endobj 4544 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 337.5 252.55 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4543 0 R /H /I >> endobj 4545 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 337.5 539.997 346.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4543 0 R /H /I >> endobj 4546 0 obj << /Type /Action /S /GoTo /D [4398 0 R /XYZ 72.0 720.0 null] >> endobj 4547 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 325.5 227.33 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4546 0 R /H /I >> endobj 4548 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 325.5 539.999 334.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4546 0 R /H /I >> endobj 4549 0 obj << /Type /Action /S /GoTo /D [4401 0 R /XYZ 72.0 720.0 null] >> endobj 4550 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 313.5 269.005 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4549 0 R /H /I >> endobj 4551 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.997 313.5 539.997 322.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4549 0 R /H /I >> endobj 4552 0 obj << /Type /Action /S /GoTo /D [4404 0 R /XYZ 72.0 720.0 null] >> endobj 4553 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 301.5 237.33 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4552 0 R /H /I >> endobj 4554 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 301.5 540.0 310.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4552 0 R /H /I >> endobj 4555 0 obj << /Type /Action /S /GoTo /D [4407 0 R /XYZ 72.0 720.0 null] >> endobj 4556 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 289.5 210.66 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4555 0 R /H /I >> endobj 4557 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 289.5 539.999 298.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4555 0 R /H /I >> endobj 4558 0 obj << /Type /Action /S /GoTo /D [4410 0 R /XYZ 72.0 720.0 null] >> endobj 4559 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 277.5 205.66 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4558 0 R /H /I >> endobj 4560 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 277.5 540.0 286.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4558 0 R /H /I >> endobj 4561 0 obj << /Type /Action /S /GoTo /D [4413 0 R /XYZ 72.0 720.0 null] >> endobj 4562 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 265.5 203.44 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4561 0 R /H /I >> endobj 4563 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 265.5 539.999 274.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4561 0 R /H /I >> endobj 4564 0 obj << /Type /Action /S /GoTo /D [4416 0 R /XYZ 72.0 720.0 null] >> endobj 4565 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 253.5 201.78 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4564 0 R /H /I >> endobj 4566 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 253.5 539.999 262.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4564 0 R /H /I >> endobj 4567 0 obj << /Type /Action /S /GoTo /D [4419 0 R /XYZ 72.0 720.0 null] >> endobj 4568 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 241.5 211.78 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4567 0 R /H /I >> endobj 4569 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 241.5 540.0 250.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4567 0 R /H /I >> endobj 4570 0 obj << /Type /Action /S /GoTo /D [4422 0 R /XYZ 72.0 720.0 null] >> endobj 4571 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 229.5 211.77 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4570 0 R /H /I >> endobj 4572 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 229.5 539.999 238.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4570 0 R /H /I >> endobj 4573 0 obj << /Type /Action /S /GoTo /D [4425 0 R /XYZ 72.0 720.0 null] >> endobj 4574 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 217.5 211.22 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4573 0 R /H /I >> endobj 4575 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 217.5 539.999 226.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4573 0 R /H /I >> endobj 4576 0 obj << /Type /Action /S /GoTo /D [4428 0 R /XYZ 72.0 720.0 null] >> endobj 4577 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 205.5 210.11 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4576 0 R /H /I >> endobj 4578 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 205.5 540.0 214.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4576 0 R /H /I >> endobj 4579 0 obj << /Type /Action /S /GoTo /D [4431 0 R /XYZ 72.0 720.0 null] >> endobj 4580 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 193.5 226.78 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4579 0 R /H /I >> endobj 4581 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 193.5 539.999 202.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4579 0 R /H /I >> endobj 4582 0 obj << /Type /Action /S /GoTo /D [4434 0 R /XYZ 72.0 720.0 null] >> endobj 4583 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 181.5 231.78 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4582 0 R /H /I >> endobj 4584 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 181.5 540.0 190.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4582 0 R /H /I >> endobj 4585 0 obj << /Type /Action /S /GoTo /D [4437 0 R /XYZ 72.0 720.0 null] >> endobj 4586 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 169.5 226.78 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4585 0 R /H /I >> endobj 4587 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 169.5 539.999 178.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4585 0 R /H /I >> endobj 4588 0 obj << /Type /Action /S /GoTo /D [4440 0 R /XYZ 72.0 720.0 null] >> endobj 4589 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 157.5 231.78 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4588 0 R /H /I >> endobj 4590 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 157.5 540.0 166.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4588 0 R /H /I >> endobj 4591 0 obj << /Type /Action /S /GoTo /D [4443 0 R /XYZ 72.0 720.0 null] >> endobj 4592 0 obj << /Type /Annot /Subtype /Link /Rect [ 120.0 145.5 215.672 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4591 0 R /H /I >> endobj 4593 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.998 145.5 539.998 154.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4591 0 R /H /I >> endobj 4594 0 obj << /Type /Action /S /GoTo /D [4446 0 R /XYZ 72.0 720.0 null] >> endobj 4595 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 133.5 218.99 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4594 0 R /H /I >> endobj 4596 0 obj << /Type /Annot /Subtype /Link /Rect [ 525.0 133.5 540.0 142.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4594 0 R /H /I >> endobj 4597 0 obj << /Type /Action /S /GoTo /D [4449 0 R /XYZ 72.0 720.0 null] >> endobj 4598 0 obj << /Type /Annot /Subtype /Link /Rect [ 144.0 121.5 245.37 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4597 0 R /H /I >> endobj 4599 0 obj << /Type /Annot /Subtype /Link /Rect [ 524.999 121.5 539.999 130.5 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /A 4597 0 R /H /I >> endobj 4600 0 obj << /Length 4601 0 R /Filter /FlateDecode >> stream x_\Gz{~\_,sNoۻHg0ZJ$RKRvTj3ݒscK5GawSUWv,O_}Sڞ|]Gm?VݭϷ?ק|_^?_z}WO^|#WWWӾ=}Ͽ}O?㧷懧??~w_}oo滿/|pnۿJߧ8o__Ey?ׯgy9..qJ!n!qxBE`!CN"8Ep`@l X6,;`) X "!!!)))UCp+q!"qx@wS$Ep)c@06cA0vQ@0V"XE`&]v"8Dp)S'`n ` `    LLME˱p1_nb9 )(TWoeR'rn&XM,&e˲eŲ,E,K! $$$J,+Y6ldȲe'N,Yd9r$)elbX.ebE,e}˅wS˒y꠺Q=JzT'b(RH-k"X! E,Ej LLLdYɲe#F,Yvdr A,'YNb(R@H-k"X!dddddddYɲe%J,Y6dɲ A,YNd9r Q5Dz5DZ,"k"5YYYY&Y&Y&Yz1g$}Ӕ7)߽n*q~#C~KM z\%㲁`@l Xv,;`) XV"XE`&]v"8Dp)S'`l ` `    LLL"XE`&Mv"Ep!SN ` ;Y@0 f,""""""X>{F[Èo|r{[׶3ܭxnTO{T~Nԓ,'YNbZ,׍ PbZ,׭ RDj LLLdYɲe%F,Yvdr A,'YNb. Z,ו!Pb. Z,׵!P\HMAAAIIII,+YVldȲe'N,;Yd9r$)Fr)"X[EuE,"ReeeeeeF974߿#8sW9g)ԕ!IuzZ,1rZ,1Xc2Reeeeeeee%J,Y6ldȲe'N,Yd9ruLFj\drZ,1r,,,,,,,+YVdYɲe#F,;Yvd9r I,Xc2R:&.똌b@]r,,,,,,,?x}{oM<޽~Q^zE؍kZ~;^b.vRi\yڏq`\y}׺q#.zE=GQ/zԋG.zG/zǸ1.z̋Ǽv8\y] pv/\5cZw#.zE=G^ȋGQ/zG/zG1.zǼ1/zkkop\y_5kE=G\ȋyc}:˨~;K3hǺnnzJnR=^7CTwP$)k.X9ԻXչbVRZKMAAAIII,+YVdȲe#N,;Yd9r$IS,,Aj\sw\3r.bfReeeeeeee%J,Y6ldɲe'N,Yd9r嚈H-k:"XIb&P\222222wu/e~G7Zm;9}>^(oOʏ_ʫ%SMj7nTS:Mu:5C9s3:9C93R]g(70000444jTڎb~%oay|RދA-OMu4iT׹Iu|'urR]k('urS S S SMSMSMSZMj5fTvSMu0aTNSPN;7:~#y!urS S S SMSMSMSe0DnLJojy} z(?*cByXnTNSRN눡;C:f(y!uАrS S S SMSMSMSMSZMj3fTvSMu0aTNR]')'urR])'uQB$"x0_MP)}]Է׳uzH}{1^']+,;Yvd9r$IS,&e˲eIJbYv,X"e)ddddddddYɲe%F,Y6dɲ A,'YNd9rmҒZ,-w\˵=Kj\& $$$J,+YVldȲe'N,Yd9r$)enbX.ebXf,b,,,,,i4zɗݸ }w]Z~~wo>}`sQl[z%_H^-k $O;f6SmLj7nTS:Mu$ղjHlZvR-;TNj)ZVS\ ׮ LNy,˛urS:MujlFj;NQH5 F10000444jT6SmLj7nTS:Mu4IjnNjTjRbaaaiiw}:AK}}WO]s6G?wIB<,oO]W.M0aTNS:Iuͻ('5|'5T׼KBkEVS٬GP~%_lJw=IgSjNS:Iuͻ('5T׼rR]. yZMj5fT6SM0aTNS:Iuͻ('5|'5T׼rR].M5L5L5L5M5Mt.=w7<ۏ_pu#xUKiyxI<,oOʻvS:Lu0iTNR]QN>6wR]QN>6IuFVSZն^aR>)ojY0iT'('u;('uT}ljjjjjjjj5jT6SmMj7nTS:Mu꺏rR]QN>6Iu&y!uzڶcz-fRRwFuPݨRBuzH=r I,'YN\3(rMr͟5}Z,Ij LLLdYɲe%F,Yvdr A,'YNbFLR0A/I-ku5Z,,,,,,,,+YVdȲe#N,;Yvd9r$IS,Ij\#rM5;IMAAAAII]˸[kb2ٺQRS܏SAliyvYnTNR}>[9>|rR}>[w=/|rS S S SMSMSMSMSZMj3fTvSMu0aTNRTog$':wRTog$':TTTTTTTVSLj3fTvS:Lu4iT'INuz;['9INujjjjj瓠kx|>o~j5kZ5=~ %ay|RFWTVSmLj3nTS:Lu4iTo$'ۆ1wRmTo$'۶1M5L5L5L5M5M5Mj5jT6SmMj7aTS:Mum?zQN=emWTo$70004444jT6SmLj7nTS:Mu$ۆ3ILrRm:To Rl)m6[J-͖fKi kZ+|__LHj9hB"-O;s<,oOׄrR]wR]IuMH('5!TTTTTTTVS9Шy)by|PwN,Mu4iTׄrR]wR]IuMH$/&$jjjjjjjj5jT6SmMj7nTS:MuꚐPNkBB9 夺&$R]M5L5L5L5L5M5M1.?/_z~|~/B&^v<:MxfZ>^zBרWㅎS~Q7' rS:Mu7-'u rR]R('u EB@ ZMj5fT6SM0aTNS:IuHTׁwR]R('u rR]R(700044r'˝*ݟ~a^kۜz|R^k%kiy|JnTvSMu0aTNSFj;NQH5 F!(ZMj5jT6SM0aTNS:I57R͍Ts#I5wR͝Ts',Tjjjjjj'Twyxd;sq?ڏP9Aǒݽ+iy<6fXR^-7jT6SmLj7nTS:Mu4IkaJ9;)夺ZRnaaaiiiTVSLj3nTS:Lu4iT”rR] SwR] SIu-L%/jjjjjjp]#,Looca?E>[?;HS^6f/LW+ O;+ Mu4iT`T`||Ljjjjjjjj5jT6SmMj7nTS:MuLLLLBW0Anaaaaii(]գ="Wu,O?K-_^<:^ ŰWüaۮq5lWy1WeU~Uf\WeUyUf^WeEbxQfmpe֦EbxQfm^^2qU&U*WeUzU^WeUvU]WeU~Uf\WeUqUf^WeEMbxQfm evEZX.ʬmë2qU&U*Wez}Wo$]z=}^YOy yZ)AF+[gIzZ>(_~z(yXnTNS~NB9H9 夺~N"y!sM5L5L5L5M5M5M5Mj5jT6SMj7aTNS:IurR]?'TI('s PnaaaaiiB1,Әj_˷~Sr1o/}懏o5}?I,WˇkAyZ)7Iu 0('5TC0004444jT?, Ez%O;<,oO?,+yTNSFjl;NjRBQL5L5L5L5L5M5M5Mj5jT6SmMj7aTNS:Mu`PNk!NkA9夺jjjjjїmdgx3_͏w|5xL?/۶xw?iyxOyX,o)4iTFe#ղjHZvR-;Bj)ZMoŅmIy/W[rS:Mu$H56R=} օ|'I5vR=}%'(z]TTTTTTVSZMj3fTvS:Lu0iT'Fjn;NjTjS S S SMSMSMS=|{֗o6o>ukW~xO_rR]r('u GTׁIuȑ:CVSZ?_nyZ)ay|R>rS:Mu:C99:C99R]r(70000444jT6SmLj7nTS:Mu4IjnNjTjRbaaaiiХo˗oP}.+y{vay|R=Wjj7nTS:Mu$=WrR=ݳ{!ItTO^ ٽjjjjjjjj5jT6SmMj7nTS:Mu+9ٽ+9ٽR=ݳ{%70000444jT6SmLj7nTS:Mu4I{vzgB+9ٽ+l)mt:mtc6x_.O/w[ϟ^.;?\^ȫ<-^./a6SM0aTNS:IlZ6R-TNe'RHR-TK1000444jTVSmLj7nTS:Lu4IjlNj;F!(TTTTTTTTVSLj3nTvS:Lu4iTs#H57R͍Ts'I5wRBYH5l)m6[J-vU=烑[囡;㩷XO '|'<Tbjjjjjjj5jk*֎bn|RbWk*&yZ)_S1rS:Mu$TLrRM I6ToS1 ަbjjjjjjjj5jT6SmMj7nTS:Mum*&9ަbm*&9ަbRM$7000044Ӧ׸m?;yw8V۶G4|P^wNy,˛nTS:Lu4iT|rR]1wR]1Iu('5TTTTTTTVSZMj3fTvS:Lu0iT'夺c鷺cꚏI^Hu(70004444jT6SmLj7nTS:Mu$5T|rR]1Iu$/cjjjj͖fK}k>EGn{󮴼S~(˛c=Dy|PMj7aTS:MusrR]wIsrR]wI^Hu9FVSzxQzS~(˛c=DyTNSTםcsrR]wI^Hu9FVSZMj3fTvS:Lu0iTNR]wQN1wR]wQN1Iu9FxPZLŎW_}zwnglIwp]ɫຒ:Mu4I;zB+9ຒ+VSZMj3fTvS:Lu0aTNR=u%'\TOwp]Itׅ+VSZMj3fTvS:Lu0iT'ຒ+9ຒ y!\WrS S S S SMSMS={mF_}skӛ yZ)?I4iTO?x%'^wR=}TO?x!/z+VSZMj3fTvS:Lu0iT'F/;>~JN/aaaaiiiTVSmLj3nTS:Lu4iTO?x%'^wR=}TO?x%'^M5L5L5L5M5MumzF:+/t&5懗wp?,˛j;<-7iTNR=oy+o;]IBN@rS S S SMSMSMSZMj5fTvSMu0aTNSz t!'VwR=oy+oT[.ZMj5fTvSM0aTNSz t!'V 9]IB@rS S S S SMSMS=m{FmŹ&ǓӛT7S~z3!˛iT']IT[.z y!V VSZMj3fTvS:Lu0iT'F@rR=o|'V 9]I0000444jT6SmLj7nTS:Mu4I@rR=o|'V 9]IBnaaaiik+]|O_^t >{7}㻿_Ϛk[[w c%#Z>(?V2c%CyXnTS:Mu$ղjHlZ6R-;TNj)ZVSZMj3fTvS:Lu0iTNRTc#H5vRTc'(TjS S S SMSMSMSZMj5fTvSMu0aTNSFj;NjRBYL5L5L5L5M5MfK{u䃼V>Qؗokmj4¢Z>(oiyorS:Lu4iTrR]#,Iu('5’aQnaaaaiiiTCu%m<,oOʏxʫ[4iT'夺FX鷺FXaQNkEVSZMj3fTvS:Lu0aTNR]#,Iu$Iu('5’aQnaaaiiiQ`r5_^t?z?{0v|Ou4&#by|P>w.PꚌHꚌPNk2B9ɈaaaaiiiTVSmLj3nTS:Lu4iTdrR]wR]IuMF('5TTTTTTTVSZMj3fTvS:Lu0iT'夺&#鷺&#ꚌH^HuMF(7000444FwyoWϯCknOXѕgPzKkRz߾^Ϸ?ק|˫__O~zoop}7=oO_|iO;8)߾=QwJ{ endstream endobj 4601 0 obj 13690 endobj 4602 0 obj [ 4451 0 R 4452 0 R 4454 0 R 4455 0 R 4457 0 R 4458 0 R 4460 0 R 4461 0 R 4463 0 R 4464 0 R 4466 0 R 4467 0 R 4469 0 R 4470 0 R 4472 0 R 4473 0 R 4475 0 R 4476 0 R 4478 0 R 4479 0 R 4481 0 R 4482 0 R 4484 0 R 4485 0 R 4487 0 R 4488 0 R 4490 0 R 4491 0 R 4493 0 R 4494 0 R 4496 0 R 4497 0 R 4499 0 R 4500 0 R 4502 0 R 4503 0 R 4505 0 R 4506 0 R 4508 0 R 4509 0 R 4511 0 R 4512 0 R 4514 0 R 4515 0 R 4517 0 R 4518 0 R 4520 0 R 4521 0 R 4523 0 R 4524 0 R 4526 0 R 4527 0 R 4529 0 R 4530 0 R 4532 0 R 4533 0 R 4535 0 R 4536 0 R 4538 0 R 4539 0 R 4541 0 R 4542 0 R 4544 0 R 4545 0 R 4547 0 R 4548 0 R 4550 0 R 4551 0 R 4553 0 R 4554 0 R 4556 0 R 4557 0 R 4559 0 R 4560 0 R 4562 0 R 4563 0 R 4565 0 R 4566 0 R 4568 0 R 4569 0 R 4571 0 R 4572 0 R 4574 0 R 4575 0 R 4577 0 R 4578 0 R 4580 0 R 4581 0 R 4583 0 R 4584 0 R 4586 0 R 4587 0 R 4589 0 R 4590 0 R 4592 0 R 4593 0 R 4595 0 R 4596 0 R 4598 0 R 4599 0 R ] endobj 4603 0 obj << /Resources 10 0 R /Type /Page /MediaBox [0 0 612 792] /CropBox [0 0 612 792] /BleedBox [0 0 612 792] /TrimBox [0 0 612 792] /Parent 11 0 R /Annots 4602 0 R /Contents 4600 0 R >> endobj 4604 0 obj << /Type /Action /S /GoTo /D [9 0 R /XYZ 72.0 720.0 null] >> endobj 4605 0 obj << /Title (SystemTap Tapset Reference Manual) /Parent 4606 0 R /Next 4607 0 R /A 4604 0 R >> endobj 4608 0 obj << /Type /Action /S /GoTo /D [324 0 R /XYZ 72.0 720.0 null] >> endobj 4607 0 obj << /Title (Table of Contents) /Parent 4606 0 R /Prev 4605 0 R /Next 4609 0 R /A 4608 0 R >> endobj 4609 0 obj << /Title /Parent 4606 0 R /Prev 4607 0 R /Next 4610 0 R /A 168 0 R >> endobj 4610 0 obj << /Title /Parent 4606 0 R /Prev 4609 0 R /Next 4611 0 R /First 4612 0 R /Last 4613 0 R /Count -141 /A 171 0 R >> endobj 4612 0 obj << /Title (function::addr) /Parent 4610 0 R /Next 4614 0 R /A 174 0 R >> endobj 4614 0 obj << /Title (function::asmlinkage) /Parent 4610 0 R /Prev 4612 0 R /Next 4615 0 R /A 177 0 R >> endobj 4615 0 obj << /Title (function::backtrace) /Parent 4610 0 R /Prev 4614 0 R /Next 4616 0 R /A 180 0 R >> endobj 4616 0 obj << /Title (function::caller) /Parent 4610 0 R /Prev 4615 0 R /Next 4617 0 R /A 183 0 R >> endobj 4617 0 obj << /Title (function::caller_addr) /Parent 4610 0 R /Prev 4616 0 R /Next 4618 0 R /A 186 0 R >> endobj 4618 0 obj << /Title (function::callers) /Parent 4610 0 R /Prev 4617 0 R /Next 4619 0 R /A 189 0 R >> endobj 4619 0 obj << /Title (function::cmdline_arg) /Parent 4610 0 R /Prev 4618 0 R /Next 4620 0 R /A 192 0 R >> endobj 4620 0 obj << /Title (function::cmdline_args) /Parent 4610 0 R /Prev 4619 0 R /Next 4621 0 R /A 195 0 R >> endobj 4621 0 obj << /Title (function::cmdline_str) /Parent 4610 0 R /Prev 4620 0 R /Next 4622 0 R /A 198 0 R >> endobj 4622 0 obj << /Title (function::cpu) /Parent 4610 0 R /Prev 4621 0 R /Next 4623 0 R /A 201 0 R >> endobj 4623 0 obj << /Title (function::cpuid) /Parent 4610 0 R /Prev 4622 0 R /Next 4624 0 R /A 204 0 R >> endobj 4624 0 obj << /Title (function::current_exe_file) /Parent 4610 0 R /Prev 4623 0 R /Next 4625 0 R /A 207 0 R >> endobj 4625 0 obj << /Title (function::egid) /Parent 4610 0 R /Prev 4624 0 R /Next 4626 0 R /A 210 0 R >> endobj 4626 0 obj << /Title (function::env_var) /Parent 4610 0 R /Prev 4625 0 R /Next 4627 0 R /A 213 0 R >> endobj 4627 0 obj << /Title (function::euid) /Parent 4610 0 R /Prev 4626 0 R /Next 4628 0 R /A 216 0 R >> endobj 4628 0 obj << /Title (function::execname) /Parent 4610 0 R /Prev 4627 0 R /Next 4629 0 R /A 219 0 R >> endobj 4629 0 obj << /Title (function::fastcall) /Parent 4610 0 R /Prev 4628 0 R /Next 4630 0 R /A 222 0 R >> endobj 4630 0 obj << /Title (function::gid) /Parent 4610 0 R /Prev 4629 0 R /Next 4631 0 R /A 225 0 R >> endobj 4631 0 obj << /Title (function::int_arg) /Parent 4610 0 R /Prev 4630 0 R /Next 4632 0 R /A 228 0 R >> endobj 4632 0 obj << /Title (function::is_myproc) /Parent 4610 0 R /Prev 4631 0 R /Next 4633 0 R /A 231 0 R >> endobj 4633 0 obj << /Title (function::is_return) /Parent 4610 0 R /Prev 4632 0 R /Next 4634 0 R /A 234 0 R >> endobj 4634 0 obj << /Title (function::long_arg) /Parent 4610 0 R /Prev 4633 0 R /Next 4635 0 R /A 237 0 R >> endobj 4635 0 obj << /Title (function::longlong_arg) /Parent 4610 0 R /Prev 4634 0 R /Next 4636 0 R /A 240 0 R >> endobj 4636 0 obj << /Title (function::modname) /Parent 4610 0 R /Prev 4635 0 R /Next 4637 0 R /A 243 0 R >> endobj 4637 0 obj << /Title (function::module_name) /Parent 4610 0 R /Prev 4636 0 R /Next 4638 0 R /A 246 0 R >> endobj 4638 0 obj << /Title (function::module_size) /Parent 4610 0 R /Prev 4637 0 R /Next 4639 0 R /A 249 0 R >> endobj 4639 0 obj << /Title (function::ns_egid) /Parent 4610 0 R /Prev 4638 0 R /Next 4640 0 R /A 252 0 R >> endobj 4640 0 obj << /Title (function::ns_euid) /Parent 4610 0 R /Prev 4639 0 R /Next 4641 0 R /A 255 0 R >> endobj 4641 0 obj << /Title (function::ns_gid) /Parent 4610 0 R /Prev 4640 0 R /Next 4642 0 R /A 258 0 R >> endobj 4642 0 obj << /Title (function::ns_pgrp) /Parent 4610 0 R /Prev 4641 0 R /Next 4643 0 R /A 261 0 R >> endobj 4643 0 obj << /Title (function::ns_pid) /Parent 4610 0 R /Prev 4642 0 R /Next 4644 0 R /A 264 0 R >> endobj 4644 0 obj << /Title (function::ns_ppid) /Parent 4610 0 R /Prev 4643 0 R /Next 4645 0 R /A 267 0 R >> endobj 4645 0 obj << /Title (function::ns_sid) /Parent 4610 0 R /Prev 4644 0 R /Next 4646 0 R /A 270 0 R >> endobj 4646 0 obj << /Title (function::ns_tid) /Parent 4610 0 R /Prev 4645 0 R /Next 4647 0 R /A 273 0 R >> endobj 4647 0 obj << /Title (function::ns_uid) /Parent 4610 0 R /Prev 4646 0 R /Next 4648 0 R /A 276 0 R >> endobj 4648 0 obj << /Title (function::pexecname) /Parent 4610 0 R /Prev 4647 0 R /Next 4649 0 R /A 279 0 R >> endobj 4649 0 obj << /Title (function::pgrp) /Parent 4610 0 R /Prev 4648 0 R /Next 4650 0 R /A 282 0 R >> endobj 4650 0 obj << /Title (function::pid) /Parent 4610 0 R /Prev 4649 0 R /Next 4651 0 R /A 285 0 R >> endobj 4651 0 obj << /Title (function::pid2execname) /Parent 4610 0 R /Prev 4650 0 R /Next 4652 0 R /A 288 0 R >> endobj 4652 0 obj << /Title (function::pid2task) /Parent 4610 0 R /Prev 4651 0 R /Next 4653 0 R /A 291 0 R >> endobj 4653 0 obj << /Title (function::pn) /Parent 4610 0 R /Prev 4652 0 R /Next 4654 0 R /A 294 0 R >> endobj 4654 0 obj << /Title (function::pnlabel) /Parent 4610 0 R /Prev 4653 0 R /Next 4655 0 R /A 297 0 R >> endobj 4655 0 obj << /Title (function::pointer_arg) /Parent 4610 0 R /Prev 4654 0 R /Next 4656 0 R /A 300 0 R >> endobj 4656 0 obj << /Title (function::pp) /Parent 4610 0 R /Prev 4655 0 R /Next 4657 0 R /A 303 0 R >> endobj 4657 0 obj << /Title (function::ppfunc) /Parent 4610 0 R /Prev 4656 0 R /Next 4658 0 R /A 306 0 R >> endobj 4658 0 obj << /Title (function::ppid) /Parent 4610 0 R /Prev 4657 0 R /Next 4659 0 R /A 309 0 R >> endobj 4659 0 obj << /Title (function::print_backtrace) /Parent 4610 0 R /Prev 4658 0 R /Next 4660 0 R /A 312 0 R >> endobj 4660 0 obj << /Title (function::print_backtrace_fileline) /Parent 4610 0 R /Prev 4659 0 R /Next 4661 0 R /A 315 0 R >> endobj 4661 0 obj << /Title (function::print_regs) /Parent 4610 0 R /Prev 4660 0 R /Next 4662 0 R /A 318 0 R >> endobj 4662 0 obj << /Title (function::print_stack) /Parent 4610 0 R /Prev 4661 0 R /Next 4663 0 R /A 487 0 R >> endobj 4663 0 obj << /Title (function::print_syms) /Parent 4610 0 R /Prev 4662 0 R /Next 4664 0 R /A 490 0 R >> endobj 4664 0 obj << /Title (function::print_ubacktrace) /Parent 4610 0 R /Prev 4663 0 R /Next 4665 0 R /A 493 0 R >> endobj 4665 0 obj << /Title (function::print_ubacktrace_brief) /Parent 4610 0 R /Prev 4664 0 R /Next 4666 0 R /A 496 0 R >> endobj 4666 0 obj << /Title (function::print_ubacktrace_fileline) /Parent 4610 0 R /Prev 4665 0 R /Next 4667 0 R /A 499 0 R >> endobj 4667 0 obj << /Title (function::print_ustack) /Parent 4610 0 R /Prev 4666 0 R /Next 4668 0 R /A 502 0 R >> endobj 4668 0 obj << /Title (function::print_usyms) /Parent 4610 0 R /Prev 4667 0 R /Next 4669 0 R /A 505 0 R >> endobj 4669 0 obj << /Title (function::probe_type) /Parent 4610 0 R /Prev 4668 0 R /Next 4670 0 R /A 508 0 R >> endobj 4670 0 obj << /Title (function::probefunc) /Parent 4610 0 R /Prev 4669 0 R /Next 4671 0 R /A 511 0 R >> endobj 4671 0 obj << /Title (function::probemod) /Parent 4610 0 R /Prev 4670 0 R /Next 4672 0 R /A 514 0 R >> endobj 4672 0 obj << /Title (function::pstrace) /Parent 4610 0 R /Prev 4671 0 R /Next 4673 0 R /A 517 0 R >> endobj 4673 0 obj << /Title (function::register) /Parent 4610 0 R /Prev 4672 0 R /Next 4674 0 R /A 520 0 R >> endobj 4674 0 obj << /Title (function::registers_valid) /Parent 4610 0 R /Prev 4673 0 R /Next 4675 0 R /A 523 0 R >> endobj 4675 0 obj << /Title (function::regparm) /Parent 4610 0 R /Prev 4674 0 R /Next 4676 0 R /A 526 0 R >> endobj 4676 0 obj << /Title (function::remote_id) /Parent 4610 0 R /Prev 4675 0 R /Next 4677 0 R /A 529 0 R >> endobj 4677 0 obj << /Title (function::remote_uri) /Parent 4610 0 R /Prev 4676 0 R /Next 4678 0 R /A 532 0 R >> endobj 4678 0 obj << /Title (function::s32_arg) /Parent 4610 0 R /Prev 4677 0 R /Next 4679 0 R /A 535 0 R >> endobj 4679 0 obj << /Title (function::s64_arg) /Parent 4610 0 R /Prev 4678 0 R /Next 4680 0 R /A 538 0 R >> endobj 4680 0 obj << /Title (function::set_int_arg) /Parent 4610 0 R /Prev 4679 0 R /Next 4681 0 R /A 541 0 R >> endobj 4681 0 obj << /Title (function::set_long_arg) /Parent 4610 0 R /Prev 4680 0 R /Next 4682 0 R /A 544 0 R >> endobj 4682 0 obj << /Title (function::set_longlong_arg) /Parent 4610 0 R /Prev 4681 0 R /Next 4683 0 R /A 547 0 R >> endobj 4683 0 obj << /Title (function::set_pointer_arg) /Parent 4610 0 R /Prev 4682 0 R /Next 4684 0 R /A 550 0 R >> endobj 4684 0 obj << /Title (function::set_s32_arg) /Parent 4610 0 R /Prev 4683 0 R /Next 4685 0 R /A 553 0 R >> endobj 4685 0 obj << /Title (function::set_s64_arg) /Parent 4610 0 R /Prev 4684 0 R /Next 4686 0 R /A 556 0 R >> endobj 4686 0 obj << /Title (function::set_u32_arg) /Parent 4610 0 R /Prev 4685 0 R /Next 4687 0 R /A 559 0 R >> endobj 4687 0 obj << /Title (function::set_u64_arg) /Parent 4610 0 R /Prev 4686 0 R /Next 4688 0 R /A 562 0 R >> endobj 4688 0 obj << /Title (function::set_uint_arg) /Parent 4610 0 R /Prev 4687 0 R /Next 4689 0 R /A 565 0 R >> endobj 4689 0 obj << /Title (function::set_ulong_arg) /Parent 4610 0 R /Prev 4688 0 R /Next 4690 0 R /A 568 0 R >> endobj 4690 0 obj << /Title (function::set_ulonglong_arg) /Parent 4610 0 R /Prev 4689 0 R /Next 4691 0 R /A 571 0 R >> endobj 4691 0 obj << /Title (function::sid) /Parent 4610 0 R /Prev 4690 0 R /Next 4692 0 R /A 574 0 R >> endobj 4692 0 obj << /Title (function::sprint_backtrace) /Parent 4610 0 R /Prev 4691 0 R /Next 4693 0 R /A 577 0 R >> endobj 4693 0 obj << /Title (function::sprint_stack) /Parent 4610 0 R /Prev 4692 0 R /Next 4694 0 R /A 580 0 R >> endobj 4694 0 obj << /Title (function::sprint_syms) /Parent 4610 0 R /Prev 4693 0 R /Next 4695 0 R /A 583 0 R >> endobj 4695 0 obj << /Title (function::sprint_ubacktrace) /Parent 4610 0 R /Prev 4694 0 R /Next 4696 0 R /A 586 0 R >> endobj 4696 0 obj << /Title (function::sprint_ustack) /Parent 4610 0 R /Prev 4695 0 R /Next 4697 0 R /A 589 0 R >> endobj 4697 0 obj << /Title (function::sprint_usyms) /Parent 4610 0 R /Prev 4696 0 R /Next 4698 0 R /A 592 0 R >> endobj 4698 0 obj << /Title (function::stack) /Parent 4610 0 R /Prev 4697 0 R /Next 4699 0 R /A 595 0 R >> endobj 4699 0 obj << /Title (function::stack_size) /Parent 4610 0 R /Prev 4698 0 R /Next 4700 0 R /A 598 0 R >> endobj 4700 0 obj << /Title (function::stack_unused) /Parent 4610 0 R /Prev 4699 0 R /Next 4701 0 R /A 601 0 R >> endobj 4701 0 obj << /Title (function::stack_used) /Parent 4610 0 R /Prev 4700 0 R /Next 4702 0 R /A 604 0 R >> endobj 4702 0 obj << /Title (function::stp_pid) /Parent 4610 0 R /Prev 4701 0 R /Next 4703 0 R /A 607 0 R >> endobj 4703 0 obj << /Title (function::symdata) /Parent 4610 0 R /Prev 4702 0 R /Next 4704 0 R /A 610 0 R >> endobj 4704 0 obj << /Title (function::symfile) /Parent 4610 0 R /Prev 4703 0 R /Next 4705 0 R /A 613 0 R >> endobj 4705 0 obj << /Title (function::symfileline) /Parent 4610 0 R /Prev 4704 0 R /Next 4706 0 R /A 616 0 R >> endobj 4706 0 obj << /Title (function::symline) /Parent 4610 0 R /Prev 4705 0 R /Next 4707 0 R /A 619 0 R >> endobj 4707 0 obj << /Title (function::symname) /Parent 4610 0 R /Prev 4706 0 R /Next 4708 0 R /A 622 0 R >> endobj 4708 0 obj << /Title (function::target) /Parent 4610 0 R /Prev 4707 0 R /Next 4709 0 R /A 625 0 R >> endobj 4709 0 obj << /Title (function::task_ancestry) /Parent 4610 0 R /Prev 4708 0 R /Next 4710 0 R /A 628 0 R >> endobj 4710 0 obj << /Title (function::task_backtrace) /Parent 4610 0 R /Prev 4709 0 R /Next 4711 0 R /A 631 0 R >> endobj 4711 0 obj << /Title (function::task_cpu) /Parent 4610 0 R /Prev 4710 0 R /Next 4712 0 R /A 634 0 R >> endobj 4712 0 obj << /Title (function::task_current) /Parent 4610 0 R /Prev 4711 0 R /Next 4713 0 R /A 637 0 R >> endobj 4713 0 obj << /Title (function::task_cwd_path) /Parent 4610 0 R /Prev 4712 0 R /Next 4714 0 R /A 640 0 R >> endobj 4714 0 obj << /Title (function::task_egid) /Parent 4610 0 R /Prev 4713 0 R /Next 4715 0 R /A 643 0 R >> endobj 4715 0 obj << /Title (function::task_euid) /Parent 4610 0 R /Prev 4714 0 R /Next 4716 0 R /A 646 0 R >> endobj 4716 0 obj << /Title (function::task_exe_file) /Parent 4610 0 R /Prev 4715 0 R /Next 4717 0 R /A 815 0 R >> endobj 4717 0 obj << /Title (function::task_execname) /Parent 4610 0 R /Prev 4716 0 R /Next 4718 0 R /A 818 0 R >> endobj 4718 0 obj << /Title (function::task_fd_lookup) /Parent 4610 0 R /Prev 4717 0 R /Next 4719 0 R /A 821 0 R >> endobj 4719 0 obj << /Title (function::task_gid) /Parent 4610 0 R /Prev 4718 0 R /Next 4720 0 R /A 824 0 R >> endobj 4720 0 obj << /Title (function::task_max_file_handles) /Parent 4610 0 R /Prev 4719 0 R /Next 4721 0 R /A 827 0 R >> endobj 4721 0 obj << /Title (function::task_nice) /Parent 4610 0 R /Prev 4720 0 R /Next 4722 0 R /A 830 0 R >> endobj 4722 0 obj << /Title (function::task_ns_egid) /Parent 4610 0 R /Prev 4721 0 R /Next 4723 0 R /A 833 0 R >> endobj 4723 0 obj << /Title (function::task_ns_euid) /Parent 4610 0 R /Prev 4722 0 R /Next 4724 0 R /A 836 0 R >> endobj 4724 0 obj << /Title (function::task_ns_gid) /Parent 4610 0 R /Prev 4723 0 R /Next 4725 0 R /A 839 0 R >> endobj 4725 0 obj << /Title (function::task_ns_pid) /Parent 4610 0 R /Prev 4724 0 R /Next 4726 0 R /A 842 0 R >> endobj 4726 0 obj << /Title (function::task_ns_tid) /Parent 4610 0 R /Prev 4725 0 R /Next 4727 0 R /A 845 0 R >> endobj 4727 0 obj << /Title (function::task_ns_uid) /Parent 4610 0 R /Prev 4726 0 R /Next 4728 0 R /A 848 0 R >> endobj 4728 0 obj << /Title (function::task_open_file_handles) /Parent 4610 0 R /Prev 4727 0 R /Next 4729 0 R /A 851 0 R >> endobj 4729 0 obj << /Title (function::task_parent) /Parent 4610 0 R /Prev 4728 0 R /Next 4730 0 R /A 854 0 R >> endobj 4730 0 obj << /Title (function::task_pid) /Parent 4610 0 R /Prev 4729 0 R /Next 4731 0 R /A 857 0 R >> endobj 4731 0 obj << /Title (function::task_prio) /Parent 4610 0 R /Prev 4730 0 R /Next 4732 0 R /A 860 0 R >> endobj 4732 0 obj << /Title (function::task_state) /Parent 4610 0 R /Prev 4731 0 R /Next 4733 0 R /A 863 0 R >> endobj 4733 0 obj << /Title (function::task_tid) /Parent 4610 0 R /Prev 4732 0 R /Next 4734 0 R /A 866 0 R >> endobj 4734 0 obj << /Title (function::task_uid) /Parent 4610 0 R /Prev 4733 0 R /Next 4735 0 R /A 869 0 R >> endobj 4735 0 obj << /Title (function::tid) /Parent 4610 0 R /Prev 4734 0 R /Next 4736 0 R /A 872 0 R >> endobj 4736 0 obj << /Title (function::u32_arg) /Parent 4610 0 R /Prev 4735 0 R /Next 4737 0 R /A 875 0 R >> endobj 4737 0 obj << /Title (function::u64_arg) /Parent 4610 0 R /Prev 4736 0 R /Next 4738 0 R /A 878 0 R >> endobj 4738 0 obj << /Title (function::u_register) /Parent 4610 0 R /Prev 4737 0 R /Next 4739 0 R /A 881 0 R >> endobj 4739 0 obj << /Title (function::uaddr) /Parent 4610 0 R /Prev 4738 0 R /Next 4740 0 R /A 884 0 R >> endobj 4740 0 obj << /Title (function::ubacktrace) /Parent 4610 0 R /Prev 4739 0 R /Next 4741 0 R /A 887 0 R >> endobj 4741 0 obj << /Title (function::ucallers) /Parent 4610 0 R /Prev 4740 0 R /Next 4742 0 R /A 890 0 R >> endobj 4742 0 obj << /Title (function::uid) /Parent 4610 0 R /Prev 4741 0 R /Next 4743 0 R /A 893 0 R >> endobj 4743 0 obj << /Title (function::uint_arg) /Parent 4610 0 R /Prev 4742 0 R /Next 4744 0 R /A 896 0 R >> endobj 4744 0 obj << /Title (function::ulong_arg) /Parent 4610 0 R /Prev 4743 0 R /Next 4745 0 R /A 899 0 R >> endobj 4745 0 obj << /Title (function::ulonglong_arg) /Parent 4610 0 R /Prev 4744 0 R /Next 4746 0 R /A 902 0 R >> endobj 4746 0 obj << /Title (function::umodname) /Parent 4610 0 R /Prev 4745 0 R /Next 4747 0 R /A 905 0 R >> endobj 4747 0 obj << /Title (function::user_mode) /Parent 4610 0 R /Prev 4746 0 R /Next 4748 0 R /A 908 0 R >> endobj 4748 0 obj << /Title (function::ustack) /Parent 4610 0 R /Prev 4747 0 R /Next 4749 0 R /A 911 0 R >> endobj 4749 0 obj << /Title (function::usymdata) /Parent 4610 0 R /Prev 4748 0 R /Next 4750 0 R /A 914 0 R >> endobj 4750 0 obj << /Title (function::usymfile) /Parent 4610 0 R /Prev 4749 0 R /Next 4751 0 R /A 917 0 R >> endobj 4751 0 obj << /Title (function::usymfileline) /Parent 4610 0 R /Prev 4750 0 R /Next 4752 0 R /A 920 0 R >> endobj 4752 0 obj << /Title (function::usymline) /Parent 4610 0 R /Prev 4751 0 R /Next 4613 0 R /A 923 0 R >> endobj 4613 0 obj << /Title (function::usymname) /Parent 4610 0 R /Prev 4752 0 R /A 926 0 R >> endobj 4611 0 obj << /Title /Parent 4606 0 R /Prev 4610 0 R /Next 4753 0 R /First 4754 0 R /Last 4755 0 R /Count -23 /A 929 0 R >> endobj 4754 0 obj << /Title (function::HZ) /Parent 4611 0 R /Next 4756 0 R /A 932 0 R >> endobj 4756 0 obj << /Title (function::cpu_clock_ms) /Parent 4611 0 R /Prev 4754 0 R /Next 4757 0 R /A 935 0 R >> endobj 4757 0 obj << /Title (function::cpu_clock_ns) /Parent 4611 0 R /Prev 4756 0 R /Next 4758 0 R /A 938 0 R >> endobj 4758 0 obj << /Title (function::cpu_clock_s) /Parent 4611 0 R /Prev 4757 0 R /Next 4759 0 R /A 941 0 R >> endobj 4759 0 obj << /Title (function::cpu_clock_us) /Parent 4611 0 R /Prev 4758 0 R /Next 4760 0 R /A 944 0 R >> endobj 4760 0 obj << /Title (function::delete_stopwatch) /Parent 4611 0 R /Prev 4759 0 R /Next 4761 0 R /A 947 0 R >> endobj 4761 0 obj << /Title (function::get_cycles) /Parent 4611 0 R /Prev 4760 0 R /Next 4762 0 R /A 950 0 R >> endobj 4762 0 obj << /Title (function::gettimeofday_ms) /Parent 4611 0 R /Prev 4761 0 R /Next 4763 0 R /A 953 0 R >> endobj 4763 0 obj << /Title (function::gettimeofday_ns) /Parent 4611 0 R /Prev 4762 0 R /Next 4764 0 R /A 956 0 R >> endobj 4764 0 obj << /Title (function::gettimeofday_s) /Parent 4611 0 R /Prev 4763 0 R /Next 4765 0 R /A 959 0 R >> endobj 4765 0 obj << /Title (function::gettimeofday_us) /Parent 4611 0 R /Prev 4764 0 R /Next 4766 0 R /A 962 0 R >> endobj 4766 0 obj << /Title (function::jiffies) /Parent 4611 0 R /Prev 4765 0 R /Next 4767 0 R /A 965 0 R >> endobj 4767 0 obj << /Title (function::ktime_get_ns) /Parent 4611 0 R /Prev 4766 0 R /Next 4768 0 R /A 968 0 R >> endobj 4768 0 obj << /Title (function::local_clock_ms) /Parent 4611 0 R /Prev 4767 0 R /Next 4769 0 R /A 971 0 R >> endobj 4769 0 obj << /Title (function::local_clock_ns) /Parent 4611 0 R /Prev 4768 0 R /Next 4770 0 R /A 974 0 R >> endobj 4770 0 obj << /Title (function::local_clock_s) /Parent 4611 0 R /Prev 4769 0 R /Next 4771 0 R /A 1143 0 R >> endobj 4771 0 obj << /Title (function::local_clock_us) /Parent 4611 0 R /Prev 4770 0 R /Next 4772 0 R /A 1146 0 R >> endobj 4772 0 obj << /Title (function::read_stopwatch_ms) /Parent 4611 0 R /Prev 4771 0 R /Next 4773 0 R /A 1149 0 R >> endobj 4773 0 obj << /Title (function::read_stopwatch_ns) /Parent 4611 0 R /Prev 4772 0 R /Next 4774 0 R /A 1152 0 R >> endobj 4774 0 obj << /Title (function::read_stopwatch_s) /Parent 4611 0 R /Prev 4773 0 R /Next 4775 0 R /A 1155 0 R >> endobj 4775 0 obj << /Title (function::read_stopwatch_us) /Parent 4611 0 R /Prev 4774 0 R /Next 4776 0 R /A 1158 0 R >> endobj 4776 0 obj << /Title (function::start_stopwatch) /Parent 4611 0 R /Prev 4775 0 R /Next 4755 0 R /A 1161 0 R >> endobj 4755 0 obj << /Title (function::stop_stopwatch) /Parent 4611 0 R /Prev 4776 0 R /A 1164 0 R >> endobj 4753 0 obj << /Title /Parent 4606 0 R /Prev 4611 0 R /Next 4777 0 R /First 4778 0 R /Last 4779 0 R /Count -4 /A 1167 0 R >> endobj 4778 0 obj << /Title (function::ctime) /Parent 4753 0 R /Next 4780 0 R /A 1170 0 R >> endobj 4780 0 obj << /Title (function::tz_ctime) /Parent 4753 0 R /Prev 4778 0 R /Next 4781 0 R /A 1173 0 R >> endobj 4781 0 obj << /Title (function::tz_gmtoff) /Parent 4753 0 R /Prev 4780 0 R /Next 4779 0 R /A 1176 0 R >> endobj 4779 0 obj << /Title (function::tz_name) /Parent 4753 0 R /Prev 4781 0 R /A 1179 0 R >> endobj 4777 0 obj << /Title /Parent 4606 0 R /Prev 4753 0 R /Next 4782 0 R /First 4783 0 R /Last 4783 0 R /Count -1 /A 1182 0 R >> endobj 4783 0 obj << /Title (function::system) /Parent 4777 0 R /A 1185 0 R >> endobj 4782 0 obj << /Title /Parent 4606 0 R /Prev 4777 0 R /Next 4784 0 R /First 4785 0 R /Last 4786 0 R /Count -25 /A 1188 0 R >> endobj 4785 0 obj << /Title (function::addr_to_node) /Parent 4782 0 R /Next 4787 0 R /A 1191 0 R >> endobj 4787 0 obj << /Title (function::bytes_to_string) /Parent 4782 0 R /Prev 4785 0 R /Next 4788 0 R /A 1194 0 R >> endobj 4788 0 obj << /Title (function::mem_page_size) /Parent 4782 0 R /Prev 4787 0 R /Next 4789 0 R /A 1197 0 R >> endobj 4789 0 obj << /Title (function::pages_to_string) /Parent 4782 0 R /Prev 4788 0 R /Next 4790 0 R /A 1200 0 R >> endobj 4790 0 obj << /Title (function::proc_mem_data) /Parent 4782 0 R /Prev 4789 0 R /Next 4791 0 R /A 1203 0 R >> endobj 4791 0 obj << /Title (function::proc_mem_rss) /Parent 4782 0 R /Prev 4790 0 R /Next 4792 0 R /A 1206 0 R >> endobj 4792 0 obj << /Title (function::proc_mem_shr) /Parent 4782 0 R /Prev 4791 0 R /Next 4793 0 R /A 1209 0 R >> endobj 4793 0 obj << /Title (function::proc_mem_size) /Parent 4782 0 R /Prev 4792 0 R /Next 4794 0 R /A 1212 0 R >> endobj 4794 0 obj << /Title (function::proc_mem_string) /Parent 4782 0 R /Prev 4793 0 R /Next 4795 0 R /A 1215 0 R >> endobj 4795 0 obj << /Title (function::proc_mem_txt) /Parent 4782 0 R /Prev 4794 0 R /Next 4796 0 R /A 1218 0 R >> endobj 4796 0 obj << /Title (function::vm_fault_contains) /Parent 4782 0 R /Prev 4795 0 R /Next 4797 0 R /A 1221 0 R >> endobj 4797 0 obj << /Title (probe::vm.brk) /Parent 4782 0 R /Prev 4796 0 R /Next 4798 0 R /A 1224 0 R >> endobj 4798 0 obj << /Title (probe::vm.kfree) /Parent 4782 0 R /Prev 4797 0 R /Next 4799 0 R /A 1227 0 R >> endobj 4799 0 obj << /Title (probe::vm.kmalloc) /Parent 4782 0 R /Prev 4798 0 R /Next 4800 0 R /A 1230 0 R >> endobj 4800 0 obj << /Title (probe::vm.kmalloc_node) /Parent 4782 0 R /Prev 4799 0 R /Next 4801 0 R /A 1233 0 R >> endobj 4801 0 obj << /Title (probe::vm.kmem_cache_alloc) /Parent 4782 0 R /Prev 4800 0 R /Next 4802 0 R /A 1236 0 R >> endobj 4802 0 obj << /Title (probe::vm.kmem_cache_alloc_node) /Parent 4782 0 R /Prev 4801 0 R /Next 4803 0 R /A 1239 0 R >> endobj 4803 0 obj << /Title (probe::vm.kmem_cache_free) /Parent 4782 0 R /Prev 4802 0 R /Next 4804 0 R /A 1242 0 R >> endobj 4804 0 obj << /Title (probe::vm.mmap) /Parent 4782 0 R /Prev 4803 0 R /Next 4805 0 R /A 1245 0 R >> endobj 4805 0 obj << /Title (probe::vm.munmap) /Parent 4782 0 R /Prev 4804 0 R /Next 4806 0 R /A 1248 0 R >> endobj 4806 0 obj << /Title (probe::vm.oom_kill) /Parent 4782 0 R /Prev 4805 0 R /Next 4807 0 R /A 1251 0 R >> endobj 4807 0 obj << /Title (probe::vm.pagefault) /Parent 4782 0 R /Prev 4806 0 R /Next 4808 0 R /A 1254 0 R >> endobj 4808 0 obj << /Title (probe::vm.pagefault.return) /Parent 4782 0 R /Prev 4807 0 R /Next 4809 0 R /A 1257 0 R >> endobj 4809 0 obj << /Title (probe::vm.write_shared) /Parent 4782 0 R /Prev 4808 0 R /Next 4786 0 R /A 1260 0 R >> endobj 4786 0 obj << /Title (probe::vm.write_shared_copy) /Parent 4782 0 R /Prev 4809 0 R /A 1263 0 R >> endobj 4784 0 obj << /Title /Parent 4606 0 R /Prev 4782 0 R /Next 4810 0 R /First 4811 0 R /Last 4812 0 R /Count -11 /A 1266 0 R >> endobj 4811 0 obj << /Title (function::cputime_to_msecs) /Parent 4784 0 R /Next 4813 0 R /A 1269 0 R >> endobj 4813 0 obj << /Title (function::cputime_to_string) /Parent 4784 0 R /Prev 4811 0 R /Next 4814 0 R /A 1272 0 R >> endobj 4814 0 obj << /Title (function::cputime_to_usecs) /Parent 4784 0 R /Prev 4813 0 R /Next 4815 0 R /A 1275 0 R >> endobj 4815 0 obj << /Title (function::msecs_to_string) /Parent 4784 0 R /Prev 4814 0 R /Next 4816 0 R /A 1278 0 R >> endobj 4816 0 obj << /Title (function::nsecs_to_string) /Parent 4784 0 R /Prev 4815 0 R /Next 4817 0 R /A 1281 0 R >> endobj 4817 0 obj << /Title (function::task_start_time) /Parent 4784 0 R /Prev 4816 0 R /Next 4818 0 R /A 1284 0 R >> endobj 4818 0 obj << /Title (function::task_stime) /Parent 4784 0 R /Prev 4817 0 R /Next 4819 0 R /A 1287 0 R >> endobj 4819 0 obj << /Title (function::task_time_string) /Parent 4784 0 R /Prev 4818 0 R /Next 4820 0 R /A 1290 0 R >> endobj 4820 0 obj << /Title (function::task_time_string_tid) /Parent 4784 0 R /Prev 4819 0 R /Next 4821 0 R /A 1293 0 R >> endobj 4821 0 obj << /Title (function::task_utime) /Parent 4784 0 R /Prev 4820 0 R /Next 4812 0 R /A 1296 0 R >> endobj 4812 0 obj << /Title (function::usecs_to_string) /Parent 4784 0 R /Prev 4821 0 R /A 1299 0 R >> endobj 4810 0 obj << /Title /Parent 4606 0 R /Prev 4784 0 R /Next 4822 0 R /First 4823 0 R /Last 4824 0 R /Count -16 /A 1302 0 R >> endobj 4823 0 obj << /Title (probe::scheduler.balance) /Parent 4810 0 R /Next 4825 0 R /A 1471 0 R >> endobj 4825 0 obj << /Title (probe::scheduler.cpu_off) /Parent 4810 0 R /Prev 4823 0 R /Next 4826 0 R /A 1474 0 R >> endobj 4826 0 obj << /Title (probe::scheduler.cpu_on) /Parent 4810 0 R /Prev 4825 0 R /Next 4827 0 R /A 1477 0 R >> endobj 4827 0 obj << /Title (probe::scheduler.ctxswitch) /Parent 4810 0 R /Prev 4826 0 R /Next 4828 0 R /A 1480 0 R >> endobj 4828 0 obj << /Title (probe::scheduler.kthread_stop) /Parent 4810 0 R /Prev 4827 0 R /Next 4829 0 R /A 1483 0 R >> endobj 4829 0 obj << /Title (probe::scheduler.kthread_stop.return) /Parent 4810 0 R /Prev 4828 0 R /Next 4830 0 R /A 1486 0 R >> endobj 4830 0 obj << /Title (probe::scheduler.migrate) /Parent 4810 0 R /Prev 4829 0 R /Next 4831 0 R /A 1489 0 R >> endobj 4831 0 obj << /Title (probe::scheduler.process_exit) /Parent 4810 0 R /Prev 4830 0 R /Next 4832 0 R /A 1492 0 R >> endobj 4832 0 obj << /Title (probe::scheduler.process_fork) /Parent 4810 0 R /Prev 4831 0 R /Next 4833 0 R /A 1495 0 R >> endobj 4833 0 obj << /Title (probe::scheduler.process_free) /Parent 4810 0 R /Prev 4832 0 R /Next 4834 0 R /A 1498 0 R >> endobj 4834 0 obj << /Title (probe::scheduler.process_wait) /Parent 4810 0 R /Prev 4833 0 R /Next 4835 0 R /A 1501 0 R >> endobj 4835 0 obj << /Title (probe::scheduler.signal_send) /Parent 4810 0 R /Prev 4834 0 R /Next 4836 0 R /A 1504 0 R >> endobj 4836 0 obj << /Title (probe::scheduler.tick) /Parent 4810 0 R /Prev 4835 0 R /Next 4837 0 R /A 1507 0 R >> endobj 4837 0 obj << /Title (probe::scheduler.wait_task) /Parent 4810 0 R /Prev 4836 0 R /Next 4838 0 R /A 1510 0 R >> endobj 4838 0 obj << /Title (probe::scheduler.wakeup) /Parent 4810 0 R /Prev 4837 0 R /Next 4824 0 R /A 1513 0 R >> endobj 4824 0 obj << /Title (probe::scheduler.wakeup_new) /Parent 4810 0 R /Prev 4838 0 R /A 1516 0 R >> endobj 4822 0 obj << /Title /Parent 4606 0 R /Prev 4810 0 R /Next 4839 0 R /First 4840 0 R /Last 4841 0 R /Count -18 /A 1519 0 R >> endobj 4840 0 obj << /Title (probe::ioblock.end) /Parent 4822 0 R /Next 4842 0 R /A 1522 0 R >> endobj 4842 0 obj << /Title (probe::ioblock.request) /Parent 4822 0 R /Prev 4840 0 R /Next 4843 0 R /A 1525 0 R >> endobj 4843 0 obj << /Title (probe::ioblock_trace.bounce) /Parent 4822 0 R /Prev 4842 0 R /Next 4844 0 R /A 1528 0 R >> endobj 4844 0 obj << /Title (probe::ioblock_trace.end) /Parent 4822 0 R /Prev 4843 0 R /Next 4845 0 R /A 1531 0 R >> endobj 4845 0 obj << /Title (probe::ioblock_trace.request) /Parent 4822 0 R /Prev 4844 0 R /Next 4846 0 R /A 1534 0 R >> endobj 4846 0 obj << /Title (probe::ioscheduler.elv_add_request) /Parent 4822 0 R /Prev 4845 0 R /Next 4847 0 R /A 1537 0 R >> endobj 4847 0 obj << /Title (probe::ioscheduler.elv_add_request.kp) /Parent 4822 0 R /Prev 4846 0 R /Next 4848 0 R /A 1540 0 R >> endobj 4848 0 obj << /Title (probe::ioscheduler.elv_add_request.tp) /Parent 4822 0 R /Prev 4847 0 R /Next 4849 0 R /A 1543 0 R >> endobj 4849 0 obj << /Title (probe::ioscheduler.elv_completed_request) /Parent 4822 0 R /Prev 4848 0 R /Next 4850 0 R /A 1546 0 R >> endobj 4850 0 obj << /Title (probe::ioscheduler.elv_next_request) /Parent 4822 0 R /Prev 4849 0 R /Next 4851 0 R /A 1549 0 R >> endobj 4851 0 obj << /Title (probe::ioscheduler.elv_next_request.return) /Parent 4822 0 R /Prev 4850 0 R /Next 4852 0 R /A 1552 0 R >> endobj 4852 0 obj << /Title (probe::ioscheduler_trace.elv_abort_request) /Parent 4822 0 R /Prev 4851 0 R /Next 4853 0 R /A 1555 0 R >> endobj 4853 0 obj << /Title (probe::ioscheduler_trace.elv_completed_request) /Parent 4822 0 R /Prev 4852 0 R /Next 4854 0 R /A 1558 0 R >> endobj 4854 0 obj << /Title (probe::ioscheduler_trace.elv_issue_request) /Parent 4822 0 R /Prev 4853 0 R /Next 4855 0 R /A 1561 0 R >> endobj 4855 0 obj << /Title (probe::ioscheduler_trace.elv_requeue_request) /Parent 4822 0 R /Prev 4854 0 R /Next 4856 0 R /A 1564 0 R >> endobj 4856 0 obj << /Title (probe::ioscheduler_trace.plug) /Parent 4822 0 R /Prev 4855 0 R /Next 4857 0 R /A 1567 0 R >> endobj 4857 0 obj << /Title (probe::ioscheduler_trace.unplug_io) /Parent 4822 0 R /Prev 4856 0 R /Next 4841 0 R /A 1570 0 R >> endobj 4841 0 obj << /Title (probe::ioscheduler_trace.unplug_timer) /Parent 4822 0 R /Prev 4857 0 R /A 1573 0 R >> endobj 4839 0 obj << /Title /Parent 4606 0 R /Prev 4822 0 R /Next 4858 0 R /First 4859 0 R /Last 4860 0 R /Count -6 /A 1576 0 R >> endobj 4859 0 obj << /Title (probe::scsi.iocompleted) /Parent 4839 0 R /Next 4861 0 R /A 1579 0 R >> endobj 4861 0 obj << /Title (probe::scsi.iodispatching) /Parent 4839 0 R /Prev 4859 0 R /Next 4862 0 R /A 1582 0 R >> endobj 4862 0 obj << /Title (probe::scsi.iodone) /Parent 4839 0 R /Prev 4861 0 R /Next 4863 0 R /A 1585 0 R >> endobj 4863 0 obj << /Title (probe::scsi.ioentry) /Parent 4839 0 R /Prev 4862 0 R /Next 4864 0 R /A 1588 0 R >> endobj 4864 0 obj << /Title (probe::scsi.ioexecute) /Parent 4839 0 R /Prev 4863 0 R /Next 4860 0 R /A 1591 0 R >> endobj 4860 0 obj << /Title (probe::scsi.set_state) /Parent 4839 0 R /Prev 4864 0 R /A 1594 0 R >> endobj 4858 0 obj << /Title /Parent 4606 0 R /Prev 4839 0 R /Next 4865 0 R /First 4866 0 R /Last 4867 0 R /Count -11 /A 1597 0 R >> endobj 4866 0 obj << /Title (probe::tty.init) /Parent 4858 0 R /Next 4868 0 R /A 1600 0 R >> endobj 4868 0 obj << /Title (probe::tty.ioctl) /Parent 4858 0 R /Prev 4866 0 R /Next 4869 0 R /A 1603 0 R >> endobj 4869 0 obj << /Title (probe::tty.open) /Parent 4858 0 R /Prev 4868 0 R /Next 4870 0 R /A 1606 0 R >> endobj 4870 0 obj << /Title (probe::tty.poll) /Parent 4858 0 R /Prev 4869 0 R /Next 4871 0 R /A 1609 0 R >> endobj 4871 0 obj << /Title (probe::tty.read) /Parent 4858 0 R /Prev 4870 0 R /Next 4872 0 R /A 1612 0 R >> endobj 4872 0 obj << /Title (probe::tty.receive) /Parent 4858 0 R /Prev 4871 0 R /Next 4873 0 R /A 1615 0 R >> endobj 4873 0 obj << /Title (probe::tty.register) /Parent 4858 0 R /Prev 4872 0 R /Next 4874 0 R /A 1618 0 R >> endobj 4874 0 obj << /Title (probe::tty.release) /Parent 4858 0 R /Prev 4873 0 R /Next 4875 0 R /A 1621 0 R >> endobj 4875 0 obj << /Title (probe::tty.resize) /Parent 4858 0 R /Prev 4874 0 R /Next 4876 0 R /A 1624 0 R >> endobj 4876 0 obj << /Title (probe::tty.unregister) /Parent 4858 0 R /Prev 4875 0 R /Next 4867 0 R /A 1627 0 R >> endobj 4867 0 obj << /Title (probe::tty.write) /Parent 4858 0 R /Prev 4876 0 R /A 1630 0 R >> endobj 4865 0 obj << /Title /Parent 4606 0 R /Prev 4858 0 R /Next 4877 0 R /First 4878 0 R /Last 4879 0 R /Count -8 /A 1838 0 R >> endobj 4878 0 obj << /Title (probe::irq_handler.entry) /Parent 4865 0 R /Next 4880 0 R /A 1841 0 R >> endobj 4880 0 obj << /Title (probe::irq_handler.exit) /Parent 4865 0 R /Prev 4878 0 R /Next 4881 0 R /A 1844 0 R >> endobj 4881 0 obj << /Title (probe::softirq.entry) /Parent 4865 0 R /Prev 4880 0 R /Next 4882 0 R /A 1847 0 R >> endobj 4882 0 obj << /Title (probe::softirq.exit) /Parent 4865 0 R /Prev 4881 0 R /Next 4883 0 R /A 1850 0 R >> endobj 4883 0 obj << /Title (probe::workqueue.create) /Parent 4865 0 R /Prev 4882 0 R /Next 4884 0 R /A 1853 0 R >> endobj 4884 0 obj << /Title (probe::workqueue.destroy) /Parent 4865 0 R /Prev 4883 0 R /Next 4885 0 R /A 1856 0 R >> endobj 4885 0 obj << /Title (probe::workqueue.execute) /Parent 4865 0 R /Prev 4884 0 R /Next 4879 0 R /A 1859 0 R >> endobj 4879 0 obj << /Title (probe::workqueue.insert) /Parent 4865 0 R /Prev 4885 0 R /A 1862 0 R >> endobj 4877 0 obj << /Title /Parent 4606 0 R /Prev 4865 0 R /Next 4886 0 R /First 4887 0 R /Last 4888 0 R /Count -68 /A 1865 0 R >> endobj 4887 0 obj << /Title (function::format_ipaddr) /Parent 4877 0 R /Next 4889 0 R /A 1868 0 R >> endobj 4889 0 obj << /Title (function::htonl) /Parent 4877 0 R /Prev 4887 0 R /Next 4890 0 R /A 1871 0 R >> endobj 4890 0 obj << /Title (function::htonll) /Parent 4877 0 R /Prev 4889 0 R /Next 4891 0 R /A 1874 0 R >> endobj 4891 0 obj << /Title (function::htons) /Parent 4877 0 R /Prev 4890 0 R /Next 4892 0 R /A 1877 0 R >> endobj 4892 0 obj << /Title (function::ip_ntop) /Parent 4877 0 R /Prev 4891 0 R /Next 4893 0 R /A 1880 0 R >> endobj 4893 0 obj << /Title (function::ntohl) /Parent 4877 0 R /Prev 4892 0 R /Next 4894 0 R /A 1883 0 R >> endobj 4894 0 obj << /Title (function::ntohll) /Parent 4877 0 R /Prev 4893 0 R /Next 4895 0 R /A 1886 0 R >> endobj 4895 0 obj << /Title (function::ntohs) /Parent 4877 0 R /Prev 4894 0 R /Next 4896 0 R /A 1889 0 R >> endobj 4896 0 obj << /Title (probe::netdev.change_mac) /Parent 4877 0 R /Prev 4895 0 R /Next 4897 0 R /A 1892 0 R >> endobj 4897 0 obj << /Title (probe::netdev.change_mtu) /Parent 4877 0 R /Prev 4896 0 R /Next 4898 0 R /A 1895 0 R >> endobj 4898 0 obj << /Title (probe::netdev.change_rx_flag) /Parent 4877 0 R /Prev 4897 0 R /Next 4899 0 R /A 1898 0 R >> endobj 4899 0 obj << /Title (probe::netdev.close) /Parent 4877 0 R /Prev 4898 0 R /Next 4900 0 R /A 1901 0 R >> endobj 4900 0 obj << /Title (probe::netdev.get_stats) /Parent 4877 0 R /Prev 4899 0 R /Next 4901 0 R /A 1904 0 R >> endobj 4901 0 obj << /Title (probe::netdev.hard_transmit) /Parent 4877 0 R /Prev 4900 0 R /Next 4902 0 R /A 1907 0 R >> endobj 4902 0 obj << /Title (probe::netdev.ioctl) /Parent 4877 0 R /Prev 4901 0 R /Next 4903 0 R /A 1910 0 R >> endobj 4903 0 obj << /Title (probe::netdev.open) /Parent 4877 0 R /Prev 4902 0 R /Next 4904 0 R /A 1913 0 R >> endobj 4904 0 obj << /Title (probe::netdev.receive) /Parent 4877 0 R /Prev 4903 0 R /Next 4905 0 R /A 1916 0 R >> endobj 4905 0 obj << /Title (probe::netdev.register) /Parent 4877 0 R /Prev 4904 0 R /Next 4906 0 R /A 1919 0 R >> endobj 4906 0 obj << /Title (probe::netdev.rx) /Parent 4877 0 R /Prev 4905 0 R /Next 4907 0 R /A 1922 0 R >> endobj 4907 0 obj << /Title (probe::netdev.set_promiscuity) /Parent 4877 0 R /Prev 4906 0 R /Next 4908 0 R /A 1925 0 R >> endobj 4908 0 obj << /Title (probe::netdev.transmit) /Parent 4877 0 R /Prev 4907 0 R /Next 4909 0 R /A 1928 0 R >> endobj 4909 0 obj << /Title (probe::netdev.unregister) /Parent 4877 0 R /Prev 4908 0 R /Next 4910 0 R /A 1931 0 R >> endobj 4910 0 obj << /Title (probe::netfilter.arp.forward) /Parent 4877 0 R /Prev 4909 0 R /Next 4911 0 R /A 1934 0 R >> endobj 4911 0 obj << /Title (probe::netfilter.arp.in) /Parent 4877 0 R /Prev 4910 0 R /Next 4912 0 R /A 1937 0 R >> endobj 4912 0 obj << /Title (probe::netfilter.arp.out) /Parent 4877 0 R /Prev 4911 0 R /Next 4913 0 R /A 1940 0 R >> endobj 4913 0 obj << /Title (probe::netfilter.bridge.forward) /Parent 4877 0 R /Prev 4912 0 R /Next 4914 0 R /A 1943 0 R >> endobj 4914 0 obj << /Title (probe::netfilter.bridge.local_in) /Parent 4877 0 R /Prev 4913 0 R /Next 4915 0 R /A 1946 0 R >> endobj 4915 0 obj << /Title (probe::netfilter.bridge.local_out) /Parent 4877 0 R /Prev 4914 0 R /Next 4916 0 R /A 1949 0 R >> endobj 4916 0 obj << /Title (probe::netfilter.bridge.post_routing) /Parent 4877 0 R /Prev 4915 0 R /Next 4917 0 R /A 1952 0 R >> endobj 4917 0 obj << /Title (probe::netfilter.bridge.pre_routing) /Parent 4877 0 R /Prev 4916 0 R /Next 4918 0 R /A 1955 0 R >> endobj 4918 0 obj << /Title (probe::netfilter.ip.forward) /Parent 4877 0 R /Prev 4917 0 R /Next 4919 0 R /A 1958 0 R >> endobj 4919 0 obj << /Title (probe::netfilter.ip.local_in) /Parent 4877 0 R /Prev 4918 0 R /Next 4920 0 R /A 1961 0 R >> endobj 4920 0 obj << /Title (probe::netfilter.ip.local_out) /Parent 4877 0 R /Prev 4919 0 R /Next 4921 0 R /A 1964 0 R >> endobj 4921 0 obj << /Title (probe::netfilter.ip.post_routing) /Parent 4877 0 R /Prev 4920 0 R /Next 4922 0 R /A 1967 0 R >> endobj 4922 0 obj << /Title (probe::netfilter.ip.pre_routing) /Parent 4877 0 R /Prev 4921 0 R /Next 4923 0 R /A 1970 0 R >> endobj 4923 0 obj << /Title (probe::sunrpc.clnt.bind_new_program) /Parent 4877 0 R /Prev 4922 0 R /Next 4924 0 R /A 1973 0 R >> endobj 4924 0 obj << /Title (probe::sunrpc.clnt.call_async) /Parent 4877 0 R /Prev 4923 0 R /Next 4925 0 R /A 1976 0 R >> endobj 4925 0 obj << /Title (probe::sunrpc.clnt.call_sync) /Parent 4877 0 R /Prev 4924 0 R /Next 4926 0 R /A 1979 0 R >> endobj 4926 0 obj << /Title (probe::sunrpc.clnt.clone_client) /Parent 4877 0 R /Prev 4925 0 R /Next 4927 0 R /A 1982 0 R >> endobj 4927 0 obj << /Title (probe::sunrpc.clnt.create_client) /Parent 4877 0 R /Prev 4926 0 R /Next 4928 0 R /A 1985 0 R >> endobj 4928 0 obj << /Title (probe::sunrpc.clnt.restart_call) /Parent 4877 0 R /Prev 4927 0 R /Next 4929 0 R /A 1988 0 R >> endobj 4929 0 obj << /Title (probe::sunrpc.clnt.shutdown_client) /Parent 4877 0 R /Prev 4928 0 R /Next 4930 0 R /A 1991 0 R >> endobj 4930 0 obj << /Title (probe::sunrpc.sched.delay) /Parent 4877 0 R /Prev 4929 0 R /Next 4931 0 R /A 1994 0 R >> endobj 4931 0 obj << /Title (probe::sunrpc.sched.execute) /Parent 4877 0 R /Prev 4930 0 R /Next 4932 0 R /A 1997 0 R >> endobj 4932 0 obj << /Title (probe::sunrpc.sched.new_task) /Parent 4877 0 R /Prev 4931 0 R /Next 4933 0 R /A 2166 0 R >> endobj 4933 0 obj << /Title (probe::sunrpc.sched.release_task) /Parent 4877 0 R /Prev 4932 0 R /Next 4934 0 R /A 2169 0 R >> endobj 4934 0 obj << /Title (probe::sunrpc.svc.create) /Parent 4877 0 R /Prev 4933 0 R /Next 4935 0 R /A 2172 0 R >> endobj 4935 0 obj << /Title (probe::sunrpc.svc.destroy) /Parent 4877 0 R /Prev 4934 0 R /Next 4936 0 R /A 2175 0 R >> endobj 4936 0 obj << /Title (probe::sunrpc.svc.drop) /Parent 4877 0 R /Prev 4935 0 R /Next 4937 0 R /A 2178 0 R >> endobj 4937 0 obj << /Title (probe::sunrpc.svc.process) /Parent 4877 0 R /Prev 4936 0 R /Next 4938 0 R /A 2181 0 R >> endobj 4938 0 obj << /Title (probe::sunrpc.svc.recv) /Parent 4877 0 R /Prev 4937 0 R /Next 4939 0 R /A 2184 0 R >> endobj 4939 0 obj << /Title (probe::sunrpc.svc.register) /Parent 4877 0 R /Prev 4938 0 R /Next 4940 0 R /A 2187 0 R >> endobj 4940 0 obj << /Title (probe::sunrpc.svc.send) /Parent 4877 0 R /Prev 4939 0 R /Next 4941 0 R /A 2190 0 R >> endobj 4941 0 obj << /Title (probe::tcp.disconnect) /Parent 4877 0 R /Prev 4940 0 R /Next 4942 0 R /A 2193 0 R >> endobj 4942 0 obj << /Title (probe::tcp.disconnect.return) /Parent 4877 0 R /Prev 4941 0 R /Next 4943 0 R /A 2196 0 R >> endobj 4943 0 obj << /Title (probe::tcp.receive) /Parent 4877 0 R /Prev 4942 0 R /Next 4944 0 R /A 2199 0 R >> endobj 4944 0 obj << /Title (probe::tcp.recvmsg) /Parent 4877 0 R /Prev 4943 0 R /Next 4945 0 R /A 2202 0 R >> endobj 4945 0 obj << /Title (probe::tcp.recvmsg.return) /Parent 4877 0 R /Prev 4944 0 R /Next 4946 0 R /A 2205 0 R >> endobj 4946 0 obj << /Title (probe::tcp.sendmsg) /Parent 4877 0 R /Prev 4945 0 R /Next 4947 0 R /A 2208 0 R >> endobj 4947 0 obj << /Title (probe::tcp.sendmsg.return) /Parent 4877 0 R /Prev 4946 0 R /Next 4948 0 R /A 2211 0 R >> endobj 4948 0 obj << /Title (probe::tcp.setsockopt) /Parent 4877 0 R /Prev 4947 0 R /Next 4949 0 R /A 2214 0 R >> endobj 4949 0 obj << /Title (probe::tcp.setsockopt.return) /Parent 4877 0 R /Prev 4948 0 R /Next 4950 0 R /A 2217 0 R >> endobj 4950 0 obj << /Title (probe::udp.disconnect) /Parent 4877 0 R /Prev 4949 0 R /Next 4951 0 R /A 2220 0 R >> endobj 4951 0 obj << /Title (probe::udp.disconnect.return) /Parent 4877 0 R /Prev 4950 0 R /Next 4952 0 R /A 2223 0 R >> endobj 4952 0 obj << /Title (probe::udp.recvmsg) /Parent 4877 0 R /Prev 4951 0 R /Next 4953 0 R /A 2226 0 R >> endobj 4953 0 obj << /Title (probe::udp.recvmsg.return) /Parent 4877 0 R /Prev 4952 0 R /Next 4954 0 R /A 2229 0 R >> endobj 4954 0 obj << /Title (probe::udp.sendmsg) /Parent 4877 0 R /Prev 4953 0 R /Next 4888 0 R /A 2232 0 R >> endobj 4888 0 obj << /Title (probe::udp.sendmsg.return) /Parent 4877 0 R /Prev 4954 0 R /A 2235 0 R >> endobj 4886 0 obj << /Title /Parent 4606 0 R /Prev 4877 0 R /Next 4955 0 R /First 4956 0 R /Last 4957 0 R /Count -30 /A 2238 0 R >> endobj 4956 0 obj << /Title (function::inet_get_ip_source) /Parent 4886 0 R /Next 4958 0 R /A 2241 0 R >> endobj 4958 0 obj << /Title (function::inet_get_local_port) /Parent 4886 0 R /Prev 4956 0 R /Next 4959 0 R /A 2244 0 R >> endobj 4959 0 obj << /Title (function::sock_fam_num2str) /Parent 4886 0 R /Prev 4958 0 R /Next 4960 0 R /A 2247 0 R >> endobj 4960 0 obj << /Title (function::sock_fam_str2num) /Parent 4886 0 R /Prev 4959 0 R /Next 4961 0 R /A 2250 0 R >> endobj 4961 0 obj << /Title (function::sock_prot_num2str) /Parent 4886 0 R /Prev 4960 0 R /Next 4962 0 R /A 2253 0 R >> endobj 4962 0 obj << /Title (function::sock_prot_str2num) /Parent 4886 0 R /Prev 4961 0 R /Next 4963 0 R /A 2256 0 R >> endobj 4963 0 obj << /Title (function::sock_state_num2str) /Parent 4886 0 R /Prev 4962 0 R /Next 4964 0 R /A 2259 0 R >> endobj 4964 0 obj << /Title (function::sock_state_str2num) /Parent 4886 0 R /Prev 4963 0 R /Next 4965 0 R /A 2262 0 R >> endobj 4965 0 obj << /Title (probe::socket.aio_read) /Parent 4886 0 R /Prev 4964 0 R /Next 4966 0 R /A 2265 0 R >> endobj 4966 0 obj << /Title (probe::socket.aio_read.return) /Parent 4886 0 R /Prev 4965 0 R /Next 4967 0 R /A 2268 0 R >> endobj 4967 0 obj << /Title (probe::socket.aio_write) /Parent 4886 0 R /Prev 4966 0 R /Next 4968 0 R /A 2271 0 R >> endobj 4968 0 obj << /Title (probe::socket.aio_write.return) /Parent 4886 0 R /Prev 4967 0 R /Next 4969 0 R /A 2274 0 R >> endobj 4969 0 obj << /Title (probe::socket.close) /Parent 4886 0 R /Prev 4968 0 R /Next 4970 0 R /A 2277 0 R >> endobj 4970 0 obj << /Title (probe::socket.close.return) /Parent 4886 0 R /Prev 4969 0 R /Next 4971 0 R /A 2280 0 R >> endobj 4971 0 obj << /Title (probe::socket.create) /Parent 4886 0 R /Prev 4970 0 R /Next 4972 0 R /A 2283 0 R >> endobj 4972 0 obj << /Title (probe::socket.create.return) /Parent 4886 0 R /Prev 4971 0 R /Next 4973 0 R /A 2286 0 R >> endobj 4973 0 obj << /Title (probe::socket.read_iter) /Parent 4886 0 R /Prev 4972 0 R /Next 4974 0 R /A 2289 0 R >> endobj 4974 0 obj << /Title (probe::socket.read_iter.return) /Parent 4886 0 R /Prev 4973 0 R /Next 4975 0 R /A 2292 0 R >> endobj 4975 0 obj << /Title (probe::socket.readv) /Parent 4886 0 R /Prev 4974 0 R /Next 4976 0 R /A 2295 0 R >> endobj 4976 0 obj << /Title (probe::socket.readv.return) /Parent 4886 0 R /Prev 4975 0 R /Next 4977 0 R /A 2298 0 R >> endobj 4977 0 obj << /Title (probe::socket.receive) /Parent 4886 0 R /Prev 4976 0 R /Next 4978 0 R /A 2301 0 R >> endobj 4978 0 obj << /Title (probe::socket.recvmsg) /Parent 4886 0 R /Prev 4977 0 R /Next 4979 0 R /A 2304 0 R >> endobj 4979 0 obj << /Title (probe::socket.recvmsg.return) /Parent 4886 0 R /Prev 4978 0 R /Next 4980 0 R /A 2307 0 R >> endobj 4980 0 obj << /Title (probe::socket.send) /Parent 4886 0 R /Prev 4979 0 R /Next 4981 0 R /A 2310 0 R >> endobj 4981 0 obj << /Title (probe::socket.sendmsg) /Parent 4886 0 R /Prev 4980 0 R /Next 4982 0 R /A 2313 0 R >> endobj 4982 0 obj << /Title (probe::socket.sendmsg.return) /Parent 4886 0 R /Prev 4981 0 R /Next 4983 0 R /A 2316 0 R >> endobj 4983 0 obj << /Title (probe::socket.write_iter) /Parent 4886 0 R /Prev 4982 0 R /Next 4984 0 R /A 2319 0 R >> endobj 4984 0 obj << /Title (probe::socket.write_iter.return) /Parent 4886 0 R /Prev 4983 0 R /Next 4985 0 R /A 2322 0 R >> endobj 4985 0 obj << /Title (probe::socket.writev) /Parent 4886 0 R /Prev 4984 0 R /Next 4957 0 R /A 2325 0 R >> endobj 4957 0 obj << /Title (probe::socket.writev.return) /Parent 4886 0 R /Prev 4985 0 R /A 2494 0 R >> endobj 4955 0 obj << /Title /Parent 4606 0 R /Prev 4886 0 R /Next 4986 0 R /First 4987 0 R /Last 4988 0 R /Count -37 /A 2497 0 R >> endobj 4987 0 obj << /Title (function::ipmib_filter_key) /Parent 4955 0 R /Next 4989 0 R /A 2500 0 R >> endobj 4989 0 obj << /Title (function::ipmib_get_proto) /Parent 4955 0 R /Prev 4987 0 R /Next 4990 0 R /A 2503 0 R >> endobj 4990 0 obj << /Title (function::ipmib_local_addr) /Parent 4955 0 R /Prev 4989 0 R /Next 4991 0 R /A 2506 0 R >> endobj 4991 0 obj << /Title (function::ipmib_remote_addr) /Parent 4955 0 R /Prev 4990 0 R /Next 4992 0 R /A 2509 0 R >> endobj 4992 0 obj << /Title (function::ipmib_tcp_local_port) /Parent 4955 0 R /Prev 4991 0 R /Next 4993 0 R /A 2512 0 R >> endobj 4993 0 obj << /Title (function::ipmib_tcp_remote_port) /Parent 4955 0 R /Prev 4992 0 R /Next 4994 0 R /A 2515 0 R >> endobj 4994 0 obj << /Title (function::linuxmib_filter_key) /Parent 4955 0 R /Prev 4993 0 R /Next 4995 0 R /A 2518 0 R >> endobj 4995 0 obj << /Title (function::tcpmib_filter_key) /Parent 4955 0 R /Prev 4994 0 R /Next 4996 0 R /A 2521 0 R >> endobj 4996 0 obj << /Title (function::tcpmib_get_state) /Parent 4955 0 R /Prev 4995 0 R /Next 4997 0 R /A 2524 0 R >> endobj 4997 0 obj << /Title (function::tcpmib_local_addr) /Parent 4955 0 R /Prev 4996 0 R /Next 4998 0 R /A 2527 0 R >> endobj 4998 0 obj << /Title (function::tcpmib_local_port) /Parent 4955 0 R /Prev 4997 0 R /Next 4999 0 R /A 2530 0 R >> endobj 4999 0 obj << /Title (function::tcpmib_remote_addr) /Parent 4955 0 R /Prev 4998 0 R /Next 5000 0 R /A 2533 0 R >> endobj 5000 0 obj << /Title (function::tcpmib_remote_port) /Parent 4955 0 R /Prev 4999 0 R /Next 5001 0 R /A 2536 0 R >> endobj 5001 0 obj << /Title (probe::ipmib.ForwDatagrams) /Parent 4955 0 R /Prev 5000 0 R /Next 5002 0 R /A 2539 0 R >> endobj 5002 0 obj << /Title (probe::ipmib.FragFails) /Parent 4955 0 R /Prev 5001 0 R /Next 5003 0 R /A 2542 0 R >> endobj 5003 0 obj << /Title (probe::ipmib.FragOKs) /Parent 4955 0 R /Prev 5002 0 R /Next 5004 0 R /A 2545 0 R >> endobj 5004 0 obj << /Title (probe::ipmib.InAddrErrors) /Parent 4955 0 R /Prev 5003 0 R /Next 5005 0 R /A 2548 0 R >> endobj 5005 0 obj << /Title (probe::ipmib.InDiscards) /Parent 4955 0 R /Prev 5004 0 R /Next 5006 0 R /A 2551 0 R >> endobj 5006 0 obj << /Title (probe::ipmib.InNoRoutes) /Parent 4955 0 R /Prev 5005 0 R /Next 5007 0 R /A 2554 0 R >> endobj 5007 0 obj << /Title (probe::ipmib.InReceives) /Parent 4955 0 R /Prev 5006 0 R /Next 5008 0 R /A 2557 0 R >> endobj 5008 0 obj << /Title (probe::ipmib.InUnknownProtos) /Parent 4955 0 R /Prev 5007 0 R /Next 5009 0 R /A 2560 0 R >> endobj 5009 0 obj << /Title (probe::ipmib.OutRequests) /Parent 4955 0 R /Prev 5008 0 R /Next 5010 0 R /A 2563 0 R >> endobj 5010 0 obj << /Title (probe::ipmib.ReasmReqds) /Parent 4955 0 R /Prev 5009 0 R /Next 5011 0 R /A 2566 0 R >> endobj 5011 0 obj << /Title (probe::ipmib.ReasmTimeout) /Parent 4955 0 R /Prev 5010 0 R /Next 5012 0 R /A 2569 0 R >> endobj 5012 0 obj << /Title (probe::linuxmib.DelayedACKs) /Parent 4955 0 R /Prev 5011 0 R /Next 5013 0 R /A 2572 0 R >> endobj 5013 0 obj << /Title (probe::linuxmib.ListenDrops) /Parent 4955 0 R /Prev 5012 0 R /Next 5014 0 R /A 2575 0 R >> endobj 5014 0 obj << /Title (probe::linuxmib.ListenOverflows) /Parent 4955 0 R /Prev 5013 0 R /Next 5015 0 R /A 2578 0 R >> endobj 5015 0 obj << /Title (probe::linuxmib.TCPMemoryPressures) /Parent 4955 0 R /Prev 5014 0 R /Next 5016 0 R /A 2581 0 R >> endobj 5016 0 obj << /Title (probe::tcpmib.ActiveOpens) /Parent 4955 0 R /Prev 5015 0 R /Next 5017 0 R /A 2584 0 R >> endobj 5017 0 obj << /Title (probe::tcpmib.AttemptFails) /Parent 4955 0 R /Prev 5016 0 R /Next 5018 0 R /A 2587 0 R >> endobj 5018 0 obj << /Title (probe::tcpmib.CurrEstab) /Parent 4955 0 R /Prev 5017 0 R /Next 5019 0 R /A 2590 0 R >> endobj 5019 0 obj << /Title (probe::tcpmib.EstabResets) /Parent 4955 0 R /Prev 5018 0 R /Next 5020 0 R /A 2593 0 R >> endobj 5020 0 obj << /Title (probe::tcpmib.InSegs) /Parent 4955 0 R /Prev 5019 0 R /Next 5021 0 R /A 2596 0 R >> endobj 5021 0 obj << /Title (probe::tcpmib.OutRsts) /Parent 4955 0 R /Prev 5020 0 R /Next 5022 0 R /A 2599 0 R >> endobj 5022 0 obj << /Title (probe::tcpmib.OutSegs) /Parent 4955 0 R /Prev 5021 0 R /Next 5023 0 R /A 2602 0 R >> endobj 5023 0 obj << /Title (probe::tcpmib.PassiveOpens) /Parent 4955 0 R /Prev 5022 0 R /Next 4988 0 R /A 2605 0 R >> endobj 4988 0 obj << /Title (probe::tcpmib.RetransSegs) /Parent 4955 0 R /Prev 5023 0 R /A 2608 0 R >> endobj 4986 0 obj << /Title /Parent 4606 0 R /Prev 4955 0 R /Next 5024 0 R /First 5025 0 R /Last 5026 0 R /Count -10 /A 2611 0 R >> endobj 5025 0 obj << /Title (function::get_loadavg_index) /Parent 4986 0 R /Next 5027 0 R /A 2614 0 R >> endobj 5027 0 obj << /Title (function::sprint_loadavg) /Parent 4986 0 R /Prev 5025 0 R /Next 5028 0 R /A 2617 0 R >> endobj 5028 0 obj << /Title (function::target_set_pid) /Parent 4986 0 R /Prev 5027 0 R /Next 5029 0 R /A 2620 0 R >> endobj 5029 0 obj << /Title (function::target_set_report) /Parent 4986 0 R /Prev 5028 0 R /Next 5030 0 R /A 2623 0 R >> endobj 5030 0 obj << /Title (probe::kprocess.create) /Parent 4986 0 R /Prev 5029 0 R /Next 5031 0 R /A 2626 0 R >> endobj 5031 0 obj << /Title (probe::kprocess.exec) /Parent 4986 0 R /Prev 5030 0 R /Next 5032 0 R /A 2629 0 R >> endobj 5032 0 obj << /Title (probe::kprocess.exec_complete) /Parent 4986 0 R /Prev 5031 0 R /Next 5033 0 R /A 2632 0 R >> endobj 5033 0 obj << /Title (probe::kprocess.exit) /Parent 4986 0 R /Prev 5032 0 R /Next 5034 0 R /A 2635 0 R >> endobj 5034 0 obj << /Title (probe::kprocess.release) /Parent 4986 0 R /Prev 5033 0 R /Next 5026 0 R /A 2638 0 R >> endobj 5026 0 obj << /Title (probe::kprocess.start) /Parent 4986 0 R /Prev 5034 0 R /A 2641 0 R >> endobj 5024 0 obj << /Title /Parent 4606 0 R /Prev 4986 0 R /Next 5035 0 R /First 5036 0 R /Last 5037 0 R /Count -33 /A 2644 0 R >> endobj 5036 0 obj << /Title (function::get_sa_flags) /Parent 5024 0 R /Next 5038 0 R /A 2647 0 R >> endobj 5038 0 obj << /Title (function::get_sa_handler) /Parent 5024 0 R /Prev 5036 0 R /Next 5039 0 R /A 2650 0 R >> endobj 5039 0 obj << /Title (function::is_sig_blocked) /Parent 5024 0 R /Prev 5038 0 R /Next 5040 0 R /A 2653 0 R >> endobj 5040 0 obj << /Title (function::sa_flags_str) /Parent 5024 0 R /Prev 5039 0 R /Next 5041 0 R /A 2822 0 R >> endobj 5041 0 obj << /Title (function::sa_handler_str) /Parent 5024 0 R /Prev 5040 0 R /Next 5042 0 R /A 2825 0 R >> endobj 5042 0 obj << /Title (function::signal_str) /Parent 5024 0 R /Prev 5041 0 R /Next 5043 0 R /A 2828 0 R >> endobj 5043 0 obj << /Title (function::sigset_mask_str) /Parent 5024 0 R /Prev 5042 0 R /Next 5044 0 R /A 2831 0 R >> endobj 5044 0 obj << /Title (probe::signal.check_ignored) /Parent 5024 0 R /Prev 5043 0 R /Next 5045 0 R /A 2834 0 R >> endobj 5045 0 obj << /Title (probe::signal.check_ignored.return) /Parent 5024 0 R /Prev 5044 0 R /Next 5046 0 R /A 2837 0 R >> endobj 5046 0 obj << /Title (probe::signal.checkperm) /Parent 5024 0 R /Prev 5045 0 R /Next 5047 0 R /A 2840 0 R >> endobj 5047 0 obj << /Title (probe::signal.checkperm.return) /Parent 5024 0 R /Prev 5046 0 R /Next 5048 0 R /A 2843 0 R >> endobj 5048 0 obj << /Title (probe::signal.do_action) /Parent 5024 0 R /Prev 5047 0 R /Next 5049 0 R /A 2846 0 R >> endobj 5049 0 obj << /Title (probe::signal.do_action.return) /Parent 5024 0 R /Prev 5048 0 R /Next 5050 0 R /A 2849 0 R >> endobj 5050 0 obj << /Title (probe::signal.flush) /Parent 5024 0 R /Prev 5049 0 R /Next 5051 0 R /A 2852 0 R >> endobj 5051 0 obj << /Title (probe::signal.force_segv) /Parent 5024 0 R /Prev 5050 0 R /Next 5052 0 R /A 2855 0 R >> endobj 5052 0 obj << /Title (probe::signal.force_segv.return) /Parent 5024 0 R /Prev 5051 0 R /Next 5053 0 R /A 2858 0 R >> endobj 5053 0 obj << /Title (probe::signal.handle) /Parent 5024 0 R /Prev 5052 0 R /Next 5054 0 R /A 2861 0 R >> endobj 5054 0 obj << /Title (probe::signal.handle.return) /Parent 5024 0 R /Prev 5053 0 R /Next 5055 0 R /A 2864 0 R >> endobj 5055 0 obj << /Title (probe::signal.pending) /Parent 5024 0 R /Prev 5054 0 R /Next 5056 0 R /A 2867 0 R >> endobj 5056 0 obj << /Title (probe::signal.pending.return) /Parent 5024 0 R /Prev 5055 0 R /Next 5057 0 R /A 2870 0 R >> endobj 5057 0 obj << /Title (probe::signal.procmask) /Parent 5024 0 R /Prev 5056 0 R /Next 5058 0 R /A 2873 0 R >> endobj 5058 0 obj << /Title (probe::signal.procmask.return) /Parent 5024 0 R /Prev 5057 0 R /Next 5059 0 R /A 2876 0 R >> endobj 5059 0 obj << /Title (probe::signal.send) /Parent 5024 0 R /Prev 5058 0 R /Next 5060 0 R /A 2879 0 R >> endobj 5060 0 obj << /Title (probe::signal.send.return) /Parent 5024 0 R /Prev 5059 0 R /Next 5061 0 R /A 2882 0 R >> endobj 5061 0 obj << /Title (probe::signal.send_sig_queue) /Parent 5024 0 R /Prev 5060 0 R /Next 5062 0 R /A 2885 0 R >> endobj 5062 0 obj << /Title (probe::signal.send_sig_queue.return) /Parent 5024 0 R /Prev 5061 0 R /Next 5063 0 R /A 2888 0 R >> endobj 5063 0 obj << /Title (probe::signal.sys_tgkill) /Parent 5024 0 R /Prev 5062 0 R /Next 5064 0 R /A 2891 0 R >> endobj 5064 0 obj << /Title (probe::signal.sys_tgkill.return) /Parent 5024 0 R /Prev 5063 0 R /Next 5065 0 R /A 2894 0 R >> endobj 5065 0 obj << /Title (probe::signal.sys_tkill) /Parent 5024 0 R /Prev 5064 0 R /Next 5066 0 R /A 2897 0 R >> endobj 5066 0 obj << /Title (probe::signal.syskill) /Parent 5024 0 R /Prev 5065 0 R /Next 5067 0 R /A 2900 0 R >> endobj 5067 0 obj << /Title (probe::signal.syskill.return) /Parent 5024 0 R /Prev 5066 0 R /Next 5068 0 R /A 2903 0 R >> endobj 5068 0 obj << /Title (probe::signal.systkill.return) /Parent 5024 0 R /Prev 5067 0 R /Next 5037 0 R /A 2906 0 R >> endobj 5037 0 obj << /Title (probe::signal.wakeup) /Parent 5024 0 R /Prev 5068 0 R /A 2909 0 R >> endobj 5035 0 obj << /Title /Parent 4606 0 R /Prev 5024 0 R /Next 5069 0 R /First 5070 0 R /Last 5071 0 R /Count -4 /A 2912 0 R >> endobj 5070 0 obj << /Title (function::errno_str) /Parent 5035 0 R /Next 5072 0 R /A 2915 0 R >> endobj 5072 0 obj << /Title (function::return_str) /Parent 5035 0 R /Prev 5070 0 R /Next 5073 0 R /A 2918 0 R >> endobj 5073 0 obj << /Title (function::returnstr) /Parent 5035 0 R /Prev 5072 0 R /Next 5071 0 R /A 2921 0 R >> endobj 5071 0 obj << /Title (function::returnval) /Parent 5035 0 R /Prev 5073 0 R /A 2924 0 R >> endobj 5069 0 obj << /Title /Parent 4606 0 R /Prev 5035 0 R /Next 5074 0 R /First 5075 0 R /Last 5075 0 R /Count -1 /A 2927 0 R >> endobj 5075 0 obj << /Title (function::rlimit_from_str) /Parent 5069 0 R /A 2930 0 R >> endobj 5074 0 obj << /Title /Parent 4606 0 R /Prev 5069 0 R /Next 5076 0 R /First 5077 0 R /Last 5078 0 R /Count -4 /A 2933 0 R >> endobj 5077 0 obj << /Title (function::MAJOR) /Parent 5074 0 R /Next 5079 0 R /A 2936 0 R >> endobj 5079 0 obj << /Title (function::MINOR) /Parent 5074 0 R /Prev 5077 0 R /Next 5080 0 R /A 2939 0 R >> endobj 5080 0 obj << /Title (function::MKDEV) /Parent 5074 0 R /Prev 5079 0 R /Next 5078 0 R /A 2942 0 R >> endobj 5078 0 obj << /Title (function::usrdev2kerndev) /Parent 5074 0 R /Prev 5080 0 R /A 2945 0 R >> endobj 5076 0 obj << /Title /Parent 4606 0 R /Prev 5074 0 R /Next 5081 0 R /First 5082 0 R /Last 5083 0 R /Count -10 /A 2948 0 R >> endobj 5082 0 obj << /Title (function::d_name) /Parent 5076 0 R /Next 5084 0 R /A 2951 0 R >> endobj 5084 0 obj << /Title (function::d_path) /Parent 5076 0 R /Prev 5082 0 R /Next 5085 0 R /A 2954 0 R >> endobj 5085 0 obj << /Title (function::fullpath_struct_file) /Parent 5076 0 R /Prev 5084 0 R /Next 5086 0 R /A 2957 0 R >> endobj 5086 0 obj << /Title (function::fullpath_struct_nameidata) /Parent 5076 0 R /Prev 5085 0 R /Next 5087 0 R /A 2960 0 R >> endobj 5087 0 obj << /Title (function::fullpath_struct_path) /Parent 5076 0 R /Prev 5086 0 R /Next 5088 0 R /A 2963 0 R >> endobj 5088 0 obj << /Title (function::inode_name) /Parent 5076 0 R /Prev 5087 0 R /Next 5089 0 R /A 2966 0 R >> endobj 5089 0 obj << /Title (function::inode_path) /Parent 5076 0 R /Prev 5088 0 R /Next 5090 0 R /A 2969 0 R >> endobj 5090 0 obj << /Title (function::real_mount) /Parent 5076 0 R /Prev 5089 0 R /Next 5091 0 R /A 2972 0 R >> endobj 5091 0 obj << /Title (function::reverse_path_walk) /Parent 5076 0 R /Prev 5090 0 R /Next 5083 0 R /A 2975 0 R >> endobj 5083 0 obj << /Title (function::task_dentry_path) /Parent 5076 0 R /Prev 5091 0 R /A 2978 0 R >> endobj 5081 0 obj << /Title /Parent 4606 0 R /Prev 5076 0 R /Next 5092 0 R /First 5093 0 R /Last 5094 0 R /Count -9 /A 2981 0 R >> endobj 5093 0 obj << /Title (function::abort) /Parent 5081 0 R /Next 5095 0 R /A 3150 0 R >> endobj 5095 0 obj << /Title (function::assert) /Parent 5081 0 R /Prev 5093 0 R /Next 5096 0 R /A 3153 0 R >> endobj 5096 0 obj << /Title (function::dump_stack) /Parent 5081 0 R /Prev 5095 0 R /Next 5097 0 R /A 3156 0 R >> endobj 5097 0 obj << /Title (function::error) /Parent 5081 0 R /Prev 5096 0 R /Next 5098 0 R /A 3159 0 R >> endobj 5098 0 obj << /Title (function::exit) /Parent 5081 0 R /Prev 5097 0 R /Next 5099 0 R /A 3162 0 R >> endobj 5099 0 obj << /Title (function::ftrace) /Parent 5081 0 R /Prev 5098 0 R /Next 5100 0 R /A 3165 0 R >> endobj 5100 0 obj << /Title (function::log) /Parent 5081 0 R /Prev 5099 0 R /Next 5101 0 R /A 3168 0 R >> endobj 5101 0 obj << /Title (function::printk) /Parent 5081 0 R /Prev 5100 0 R /Next 5094 0 R /A 3171 0 R >> endobj 5094 0 obj << /Title (function::warn) /Parent 5081 0 R /Prev 5101 0 R /A 3174 0 R >> endobj 5092 0 obj << /Title /Parent 4606 0 R /Prev 5081 0 R /Next 5102 0 R /First 5103 0 R /Last 5104 0 R /Count -11 /A 3177 0 R >> endobj 5103 0 obj << /Title (function::qs_done) /Parent 5092 0 R /Next 5105 0 R /A 3180 0 R >> endobj 5105 0 obj << /Title (function::qs_run) /Parent 5092 0 R /Prev 5103 0 R /Next 5106 0 R /A 3183 0 R >> endobj 5106 0 obj << /Title (function::qs_wait) /Parent 5092 0 R /Prev 5105 0 R /Next 5107 0 R /A 3186 0 R >> endobj 5107 0 obj << /Title (function::qsq_blocked) /Parent 5092 0 R /Prev 5106 0 R /Next 5108 0 R /A 3189 0 R >> endobj 5108 0 obj << /Title (function::qsq_print) /Parent 5092 0 R /Prev 5107 0 R /Next 5109 0 R /A 3192 0 R >> endobj 5109 0 obj << /Title (function::qsq_service_time) /Parent 5092 0 R /Prev 5108 0 R /Next 5110 0 R /A 3195 0 R >> endobj 5110 0 obj << /Title (function::qsq_start) /Parent 5092 0 R /Prev 5109 0 R /Next 5111 0 R /A 3198 0 R >> endobj 5111 0 obj << /Title (function::qsq_throughput) /Parent 5092 0 R /Prev 5110 0 R /Next 5112 0 R /A 3201 0 R >> endobj 5112 0 obj << /Title (function::qsq_utilization) /Parent 5092 0 R /Prev 5111 0 R /Next 5113 0 R /A 3204 0 R >> endobj 5113 0 obj << /Title (function::qsq_wait_queue_length) /Parent 5092 0 R /Prev 5112 0 R /Next 5104 0 R /A 3207 0 R >> endobj 5104 0 obj << /Title (function::qsq_wait_time) /Parent 5092 0 R /Prev 5113 0 R /A 3210 0 R >> endobj 5102 0 obj << /Title /Parent 4606 0 R /Prev 5092 0 R /Next 5114 0 R /First 5115 0 R /Last 5115 0 R /Count -1 /A 3213 0 R >> endobj 5115 0 obj << /Title (function::randint) /Parent 5102 0 R /A 3216 0 R >> endobj 5114 0 obj << /Title /Parent 4606 0 R /Prev 5102 0 R /Next 5116 0 R /First 5117 0 R /Last 5118 0 R /Count -64 /A 3219 0 R >> endobj 5117 0 obj << /Title (function::atomic_long_read) /Parent 5114 0 R /Next 5119 0 R /A 3222 0 R >> endobj 5119 0 obj << /Title (function::atomic_read) /Parent 5114 0 R /Prev 5117 0 R /Next 5120 0 R /A 3225 0 R >> endobj 5120 0 obj << /Title (function::kernel_buffer_quoted) /Parent 5114 0 R /Prev 5119 0 R /Next 5121 0 R /A 3228 0 R >> endobj 5121 0 obj << /Title (function::kernel_buffer_quoted_error) /Parent 5114 0 R /Prev 5120 0 R /Next 5122 0 R /A 3231 0 R >> endobj 5122 0 obj << /Title (function::kernel_char) /Parent 5114 0 R /Prev 5121 0 R /Next 5123 0 R /A 3234 0 R >> endobj 5123 0 obj << /Title (function::kernel_int) /Parent 5114 0 R /Prev 5122 0 R /Next 5124 0 R /A 3237 0 R >> endobj 5124 0 obj << /Title (function::kernel_long) /Parent 5114 0 R /Prev 5123 0 R /Next 5125 0 R /A 3240 0 R >> endobj 5125 0 obj << /Title (function::kernel_pointer) /Parent 5114 0 R /Prev 5124 0 R /Next 5126 0 R /A 3243 0 R >> endobj 5126 0 obj << /Title (function::kernel_short) /Parent 5114 0 R /Prev 5125 0 R /Next 5127 0 R /A 3246 0 R >> endobj 5127 0 obj << /Title (function::kernel_string) /Parent 5114 0 R /Prev 5126 0 R /Next 5128 0 R /A 3249 0 R >> endobj 5128 0 obj << /Title (function::kernel_string_n) /Parent 5114 0 R /Prev 5127 0 R /Next 5129 0 R /A 3252 0 R >> endobj 5129 0 obj << /Title (function::kernel_string_quoted) /Parent 5114 0 R /Prev 5128 0 R /Next 5130 0 R /A 3255 0 R >> endobj 5130 0 obj << /Title (function::kernel_string_quoted_utf16) /Parent 5114 0 R /Prev 5129 0 R /Next 5131 0 R /A 3258 0 R >> endobj 5131 0 obj << /Title (function::kernel_string_quoted_utf32) /Parent 5114 0 R /Prev 5130 0 R /Next 5132 0 R /A 3261 0 R >> endobj 5132 0 obj << /Title (function::kernel_string_utf16) /Parent 5114 0 R /Prev 5131 0 R /Next 5133 0 R /A 3264 0 R >> endobj 5133 0 obj << /Title (function::kernel_string_utf32) /Parent 5114 0 R /Prev 5132 0 R /Next 5134 0 R /A 3267 0 R >> endobj 5134 0 obj << /Title (function::user_buffer_quoted) /Parent 5114 0 R /Prev 5133 0 R /Next 5135 0 R /A 3270 0 R >> endobj 5135 0 obj << /Title (function::user_buffer_quoted_error) /Parent 5114 0 R /Prev 5134 0 R /Next 5136 0 R /A 3273 0 R >> endobj 5136 0 obj << /Title (function::user_char) /Parent 5114 0 R /Prev 5135 0 R /Next 5137 0 R /A 3276 0 R >> endobj 5137 0 obj << /Title (function::user_char_error) /Parent 5114 0 R /Prev 5136 0 R /Next 5138 0 R /A 3279 0 R >> endobj 5138 0 obj << /Title (function::user_char_warn) /Parent 5114 0 R /Prev 5137 0 R /Next 5139 0 R /A 3282 0 R >> endobj 5139 0 obj << /Title (function::user_int) /Parent 5114 0 R /Prev 5138 0 R /Next 5140 0 R /A 3285 0 R >> endobj 5140 0 obj << /Title (function::user_int16) /Parent 5114 0 R /Prev 5139 0 R /Next 5141 0 R /A 3288 0 R >> endobj 5141 0 obj << /Title (function::user_int16_error) /Parent 5114 0 R /Prev 5140 0 R /Next 5142 0 R /A 3291 0 R >> endobj 5142 0 obj << /Title (function::user_int32) /Parent 5114 0 R /Prev 5141 0 R /Next 5143 0 R /A 3294 0 R >> endobj 5143 0 obj << /Title (function::user_int32_error) /Parent 5114 0 R /Prev 5142 0 R /Next 5144 0 R /A 3297 0 R >> endobj 5144 0 obj << /Title (function::user_int64) /Parent 5114 0 R /Prev 5143 0 R /Next 5145 0 R /A 3300 0 R >> endobj 5145 0 obj << /Title (function::user_int64_error) /Parent 5114 0 R /Prev 5144 0 R /Next 5146 0 R /A 3303 0 R >> endobj 5146 0 obj << /Title (function::user_int8) /Parent 5114 0 R /Prev 5145 0 R /Next 5147 0 R /A 3306 0 R >> endobj 5147 0 obj << /Title (function::user_int8_error) /Parent 5114 0 R /Prev 5146 0 R /Next 5148 0 R /A 3309 0 R >> endobj 5148 0 obj << /Title (function::user_int_error) /Parent 5114 0 R /Prev 5147 0 R /Next 5149 0 R /A 3478 0 R >> endobj 5149 0 obj << /Title (function::user_int_warn) /Parent 5114 0 R /Prev 5148 0 R /Next 5150 0 R /A 3481 0 R >> endobj 5150 0 obj << /Title (function::user_long) /Parent 5114 0 R /Prev 5149 0 R /Next 5151 0 R /A 3484 0 R >> endobj 5151 0 obj << /Title (function::user_long_error) /Parent 5114 0 R /Prev 5150 0 R /Next 5152 0 R /A 3487 0 R >> endobj 5152 0 obj << /Title (function::user_long_warn) /Parent 5114 0 R /Prev 5151 0 R /Next 5153 0 R /A 3490 0 R >> endobj 5153 0 obj << /Title (function::user_short) /Parent 5114 0 R /Prev 5152 0 R /Next 5154 0 R /A 3493 0 R >> endobj 5154 0 obj << /Title (function::user_short_error) /Parent 5114 0 R /Prev 5153 0 R /Next 5155 0 R /A 3496 0 R >> endobj 5155 0 obj << /Title (function::user_short_warn) /Parent 5114 0 R /Prev 5154 0 R /Next 5156 0 R /A 3499 0 R >> endobj 5156 0 obj << /Title (function::user_string) /Parent 5114 0 R /Prev 5155 0 R /Next 5157 0 R /A 3502 0 R >> endobj 5157 0 obj << /Title (function::user_string_n) /Parent 5114 0 R /Prev 5156 0 R /Next 5158 0 R /A 3505 0 R >> endobj 5158 0 obj << /Title (function::user_string_n_nofault) /Parent 5114 0 R /Prev 5157 0 R /Next 5159 0 R /A 3508 0 R >> endobj 5159 0 obj << /Title (function::user_string_n_quoted) /Parent 5114 0 R /Prev 5158 0 R /Next 5160 0 R /A 3511 0 R >> endobj 5160 0 obj << /Title (function::user_string_n_warn) /Parent 5114 0 R /Prev 5159 0 R /Next 5161 0 R /A 3514 0 R >> endobj 5161 0 obj << /Title (function::user_string_nofault) /Parent 5114 0 R /Prev 5160 0 R /Next 5162 0 R /A 3517 0 R >> endobj 5162 0 obj << /Title (function::user_string_quoted) /Parent 5114 0 R /Prev 5161 0 R /Next 5163 0 R /A 3520 0 R >> endobj 5163 0 obj << /Title (function::user_string_quoted_utf16) /Parent 5114 0 R /Prev 5162 0 R /Next 5164 0 R /A 3523 0 R >> endobj 5164 0 obj << /Title (function::user_string_quoted_utf32) /Parent 5114 0 R /Prev 5163 0 R /Next 5165 0 R /A 3526 0 R >> endobj 5165 0 obj << /Title (function::user_string_utf16) /Parent 5114 0 R /Prev 5164 0 R /Next 5166 0 R /A 3529 0 R >> endobj 5166 0 obj << /Title (function::user_string_utf32) /Parent 5114 0 R /Prev 5165 0 R /Next 5167 0 R /A 3532 0 R >> endobj 5167 0 obj << /Title (function::user_string_warn) /Parent 5114 0 R /Prev 5166 0 R /Next 5168 0 R /A 3535 0 R >> endobj 5168 0 obj << /Title (function::user_uint16) /Parent 5114 0 R /Prev 5167 0 R /Next 5169 0 R /A 3538 0 R >> endobj 5169 0 obj << /Title (function::user_uint16_error) /Parent 5114 0 R /Prev 5168 0 R /Next 5170 0 R /A 3541 0 R >> endobj 5170 0 obj << /Title (function::user_uint32) /Parent 5114 0 R /Prev 5169 0 R /Next 5171 0 R /A 3544 0 R >> endobj 5171 0 obj << /Title (function::user_uint32_error) /Parent 5114 0 R /Prev 5170 0 R /Next 5172 0 R /A 3547 0 R >> endobj 5172 0 obj << /Title (function::user_uint64) /Parent 5114 0 R /Prev 5171 0 R /Next 5173 0 R /A 3550 0 R >> endobj 5173 0 obj << /Title (function::user_uint64_error) /Parent 5114 0 R /Prev 5172 0 R /Next 5174 0 R /A 3553 0 R >> endobj 5174 0 obj << /Title (function::user_uint8) /Parent 5114 0 R /Prev 5173 0 R /Next 5175 0 R /A 3556 0 R >> endobj 5175 0 obj << /Title (function::user_uint8_error) /Parent 5114 0 R /Prev 5174 0 R /Next 5176 0 R /A 3559 0 R >> endobj 5176 0 obj << /Title (function::user_ulong) /Parent 5114 0 R /Prev 5175 0 R /Next 5177 0 R /A 3562 0 R >> endobj 5177 0 obj << /Title (function::user_ulong_error) /Parent 5114 0 R /Prev 5176 0 R /Next 5178 0 R /A 3565 0 R >> endobj 5178 0 obj << /Title (function::user_ulong_warn) /Parent 5114 0 R /Prev 5177 0 R /Next 5179 0 R /A 3568 0 R >> endobj 5179 0 obj << /Title (function::user_ushort) /Parent 5114 0 R /Prev 5178 0 R /Next 5180 0 R /A 3571 0 R >> endobj 5180 0 obj << /Title (function::user_ushort_error) /Parent 5114 0 R /Prev 5179 0 R /Next 5118 0 R /A 3574 0 R >> endobj 5118 0 obj << /Title (function::user_ushort_warn) /Parent 5114 0 R /Prev 5180 0 R /A 3577 0 R >> endobj 5116 0 obj << /Title /Parent 4606 0 R /Prev 5114 0 R /Next 5181 0 R /First 5182 0 R /Last 5183 0 R /Count -15 /A 3580 0 R >> endobj 5182 0 obj << /Title (function::set_kernel_char) /Parent 5116 0 R /Next 5184 0 R /A 3583 0 R >> endobj 5184 0 obj << /Title (function::set_kernel_int) /Parent 5116 0 R /Prev 5182 0 R /Next 5185 0 R /A 3586 0 R >> endobj 5185 0 obj << /Title (function::set_kernel_long) /Parent 5116 0 R /Prev 5184 0 R /Next 5186 0 R /A 3589 0 R >> endobj 5186 0 obj << /Title (function::set_kernel_pointer) /Parent 5116 0 R /Prev 5185 0 R /Next 5187 0 R /A 3592 0 R >> endobj 5187 0 obj << /Title (function::set_kernel_short) /Parent 5116 0 R /Prev 5186 0 R /Next 5188 0 R /A 3595 0 R >> endobj 5188 0 obj << /Title (function::set_kernel_string) /Parent 5116 0 R /Prev 5187 0 R /Next 5189 0 R /A 3598 0 R >> endobj 5189 0 obj << /Title (function::set_kernel_string_n) /Parent 5116 0 R /Prev 5188 0 R /Next 5190 0 R /A 3601 0 R >> endobj 5190 0 obj << /Title (function::set_user_char) /Parent 5116 0 R /Prev 5189 0 R /Next 5191 0 R /A 3604 0 R >> endobj 5191 0 obj << /Title (function::set_user_int) /Parent 5116 0 R /Prev 5190 0 R /Next 5192 0 R /A 3607 0 R >> endobj 5192 0 obj << /Title (function::set_user_long) /Parent 5116 0 R /Prev 5191 0 R /Next 5193 0 R /A 3610 0 R >> endobj 5193 0 obj << /Title (function::set_user_pointer) /Parent 5116 0 R /Prev 5192 0 R /Next 5194 0 R /A 3613 0 R >> endobj 5194 0 obj << /Title (function::set_user_short) /Parent 5116 0 R /Prev 5193 0 R /Next 5195 0 R /A 3616 0 R >> endobj 5195 0 obj << /Title (function::set_user_string) /Parent 5116 0 R /Prev 5194 0 R /Next 5196 0 R /A 3619 0 R >> endobj 5196 0 obj << /Title (function::set_user_string_arg) /Parent 5116 0 R /Prev 5195 0 R /Next 5183 0 R /A 3622 0 R >> endobj 5183 0 obj << /Title (function::set_user_string_n) /Parent 5116 0 R /Prev 5196 0 R /A 3625 0 R >> endobj 5181 0 obj << /Title /Parent 4606 0 R /Prev 5116 0 R /Next 5197 0 R /First 5198 0 R /Last 5199 0 R /Count -4 /A 3628 0 R >> endobj 5198 0 obj << /Title (function::mdelay) /Parent 5181 0 R /Next 5200 0 R /A 3631 0 R >> endobj 5200 0 obj << /Title (function::panic) /Parent 5181 0 R /Prev 5198 0 R /Next 5201 0 R /A 3634 0 R >> endobj 5201 0 obj << /Title (function::raise) /Parent 5181 0 R /Prev 5200 0 R /Next 5199 0 R /A 3637 0 R >> endobj 5199 0 obj << /Title (function::udelay) /Parent 5181 0 R /Prev 5201 0 R /A 3806 0 R >> endobj 5197 0 obj << /Title /Parent 4606 0 R /Prev 5181 0 R /Next 5202 0 R /First 5203 0 R /Last 5204 0 R /Count -15 /A 3809 0 R >> endobj 5203 0 obj << /Title (function::isdigit) /Parent 5197 0 R /Next 5205 0 R /A 3812 0 R >> endobj 5205 0 obj << /Title (function::isinstr) /Parent 5197 0 R /Prev 5203 0 R /Next 5206 0 R /A 3815 0 R >> endobj 5206 0 obj << /Title (function::matched) /Parent 5197 0 R /Prev 5205 0 R /Next 5207 0 R /A 3818 0 R >> endobj 5207 0 obj << /Title (function::matched_str) /Parent 5197 0 R /Prev 5206 0 R /Next 5208 0 R /A 3821 0 R >> endobj 5208 0 obj << /Title (function::ngroups) /Parent 5197 0 R /Prev 5207 0 R /Next 5209 0 R /A 3824 0 R >> endobj 5209 0 obj << /Title (function::str_replace) /Parent 5197 0 R /Prev 5208 0 R /Next 5210 0 R /A 3827 0 R >> endobj 5210 0 obj << /Title (function::string_quoted) /Parent 5197 0 R /Prev 5209 0 R /Next 5211 0 R /A 3830 0 R >> endobj 5211 0 obj << /Title (function::stringat) /Parent 5197 0 R /Prev 5210 0 R /Next 5212 0 R /A 3833 0 R >> endobj 5212 0 obj << /Title (function::strlen) /Parent 5197 0 R /Prev 5211 0 R /Next 5213 0 R /A 3836 0 R >> endobj 5213 0 obj << /Title (function::strpos) /Parent 5197 0 R /Prev 5212 0 R /Next 5214 0 R /A 3839 0 R >> endobj 5214 0 obj << /Title (function::strtol) /Parent 5197 0 R /Prev 5213 0 R /Next 5215 0 R /A 3842 0 R >> endobj 5215 0 obj << /Title (function::substr) /Parent 5197 0 R /Prev 5214 0 R /Next 5216 0 R /A 3845 0 R >> endobj 5216 0 obj << /Title (function::text_str) /Parent 5197 0 R /Prev 5215 0 R /Next 5217 0 R /A 3848 0 R >> endobj 5217 0 obj << /Title (function::text_strn) /Parent 5197 0 R /Prev 5216 0 R /Next 5204 0 R /A 3851 0 R >> endobj 5204 0 obj << /Title (function::tokenize) /Parent 5197 0 R /Prev 5217 0 R /A 3854 0 R >> endobj 5202 0 obj << /Title /Parent 4606 0 R /Prev 5197 0 R /Next 5218 0 R /First 5219 0 R /Last 5220 0 R /Count -13 /A 3857 0 R >> endobj 5219 0 obj << /Title (function::ansi_clear_screen) /Parent 5202 0 R /Next 5221 0 R /A 3860 0 R >> endobj 5221 0 obj << /Title (function::ansi_cursor_hide) /Parent 5202 0 R /Prev 5219 0 R /Next 5222 0 R /A 3863 0 R >> endobj 5222 0 obj << /Title (function::ansi_cursor_move) /Parent 5202 0 R /Prev 5221 0 R /Next 5223 0 R /A 3866 0 R >> endobj 5223 0 obj << /Title (function::ansi_cursor_restore) /Parent 5202 0 R /Prev 5222 0 R /Next 5224 0 R /A 3869 0 R >> endobj 5224 0 obj << /Title (function::ansi_cursor_save) /Parent 5202 0 R /Prev 5223 0 R /Next 5225 0 R /A 3872 0 R >> endobj 5225 0 obj << /Title (function::ansi_cursor_show) /Parent 5202 0 R /Prev 5224 0 R /Next 5226 0 R /A 3875 0 R >> endobj 5226 0 obj << /Title (function::ansi_new_line) /Parent 5202 0 R /Prev 5225 0 R /Next 5227 0 R /A 3878 0 R >> endobj 5227 0 obj << /Title (function::ansi_reset_color) /Parent 5202 0 R /Prev 5226 0 R /Next 5228 0 R /A 3881 0 R >> endobj 5228 0 obj << /Title (function::ansi_set_color) /Parent 5202 0 R /Prev 5227 0 R /Next 5229 0 R /A 3884 0 R >> endobj 5229 0 obj << /Title (function::indent) /Parent 5202 0 R /Prev 5228 0 R /Next 5230 0 R /A 3887 0 R >> endobj 5230 0 obj << /Title (function::indent_depth) /Parent 5202 0 R /Prev 5229 0 R /Next 5231 0 R /A 3890 0 R >> endobj 5231 0 obj << /Title (function::thread_indent) /Parent 5202 0 R /Prev 5230 0 R /Next 5220 0 R /A 3893 0 R >> endobj 5220 0 obj << /Title (function::thread_indent_depth) /Parent 5202 0 R /Prev 5231 0 R /A 3896 0 R >> endobj 5218 0 obj << /Title /Parent 4606 0 R /Prev 5202 0 R /Next 5232 0 R /First 5233 0 R /Last 5234 0 R /Count -27 /A 3899 0 R >> endobj 5233 0 obj << /Title (probe::stap.cache_add_mod) /Parent 5218 0 R /Next 5235 0 R /A 3902 0 R >> endobj 5235 0 obj << /Title (probe::stap.cache_add_nss) /Parent 5218 0 R /Prev 5233 0 R /Next 5236 0 R /A 3905 0 R >> endobj 5236 0 obj << /Title (probe::stap.cache_add_src) /Parent 5218 0 R /Prev 5235 0 R /Next 5237 0 R /A 3908 0 R >> endobj 5237 0 obj << /Title (probe::stap.cache_clean) /Parent 5218 0 R /Prev 5236 0 R /Next 5238 0 R /A 3911 0 R >> endobj 5238 0 obj << /Title (probe::stap.cache_get) /Parent 5218 0 R /Prev 5237 0 R /Next 5239 0 R /A 3914 0 R >> endobj 5239 0 obj << /Title (probe::stap.pass0) /Parent 5218 0 R /Prev 5238 0 R /Next 5240 0 R /A 3917 0 R >> endobj 5240 0 obj << /Title (probe::stap.pass0.end) /Parent 5218 0 R /Prev 5239 0 R /Next 5241 0 R /A 3920 0 R >> endobj 5241 0 obj << /Title (probe::stap.pass1.end) /Parent 5218 0 R /Prev 5240 0 R /Next 5242 0 R /A 3923 0 R >> endobj 5242 0 obj << /Title (probe::stap.pass1a) /Parent 5218 0 R /Prev 5241 0 R /Next 5243 0 R /A 3926 0 R >> endobj 5243 0 obj << /Title (probe::stap.pass1b) /Parent 5218 0 R /Prev 5242 0 R /Next 5244 0 R /A 3929 0 R >> endobj 5244 0 obj << /Title (probe::stap.pass2) /Parent 5218 0 R /Prev 5243 0 R /Next 5245 0 R /A 3932 0 R >> endobj 5245 0 obj << /Title (probe::stap.pass2.end) /Parent 5218 0 R /Prev 5244 0 R /Next 5246 0 R /A 3935 0 R >> endobj 5246 0 obj << /Title (probe::stap.pass3) /Parent 5218 0 R /Prev 5245 0 R /Next 5247 0 R /A 3938 0 R >> endobj 5247 0 obj << /Title (probe::stap.pass3.end) /Parent 5218 0 R /Prev 5246 0 R /Next 5248 0 R /A 3941 0 R >> endobj 5248 0 obj << /Title (probe::stap.pass4) /Parent 5218 0 R /Prev 5247 0 R /Next 5249 0 R /A 3944 0 R >> endobj 5249 0 obj << /Title (probe::stap.pass4.end) /Parent 5218 0 R /Prev 5248 0 R /Next 5250 0 R /A 3947 0 R >> endobj 5250 0 obj << /Title (probe::stap.pass5) /Parent 5218 0 R /Prev 5249 0 R /Next 5251 0 R /A 3950 0 R >> endobj 5251 0 obj << /Title (probe::stap.pass5.end) /Parent 5218 0 R /Prev 5250 0 R /Next 5252 0 R /A 3953 0 R >> endobj 5252 0 obj << /Title (probe::stap.pass6) /Parent 5218 0 R /Prev 5251 0 R /Next 5253 0 R /A 3956 0 R >> endobj 5253 0 obj << /Title (probe::stap.pass6.end) /Parent 5218 0 R /Prev 5252 0 R /Next 5254 0 R /A 3959 0 R >> endobj 5254 0 obj << /Title (probe::stap.system) /Parent 5218 0 R /Prev 5253 0 R /Next 5255 0 R /A 3962 0 R >> endobj 5255 0 obj << /Title (probe::stap.system.return) /Parent 5218 0 R /Prev 5254 0 R /Next 5256 0 R /A 3965 0 R >> endobj 5256 0 obj << /Title (probe::stap.system.spawn) /Parent 5218 0 R /Prev 5255 0 R /Next 5257 0 R /A 4134 0 R >> endobj 5257 0 obj << /Title (probe::stapio.receive_control_message) /Parent 5218 0 R /Prev 5256 0 R /Next 5258 0 R /A 4137 0 R >> endobj 5258 0 obj << /Title (probe::staprun.insert_module) /Parent 5218 0 R /Prev 5257 0 R /Next 5259 0 R /A 4140 0 R >> endobj 5259 0 obj << /Title (probe::staprun.remove_module) /Parent 5218 0 R /Prev 5258 0 R /Next 5234 0 R /A 4143 0 R >> endobj 5234 0 obj << /Title (probe::staprun.send_control_message) /Parent 5218 0 R /Prev 5259 0 R /A 4146 0 R >> endobj 5232 0 obj << /Title /Parent 4606 0 R /Prev 5218 0 R /Next 5260 0 R /First 5261 0 R /Last 5262 0 R /Count -60 /A 4149 0 R >> endobj 5261 0 obj << /Title (function::nfsderror) /Parent 5232 0 R /Next 5263 0 R /A 4152 0 R >> endobj 5263 0 obj << /Title (probe::nfs.aop.readpage) /Parent 5232 0 R /Prev 5261 0 R /Next 5264 0 R /A 4155 0 R >> endobj 5264 0 obj << /Title (probe::nfs.aop.readpages) /Parent 5232 0 R /Prev 5263 0 R /Next 5265 0 R /A 4158 0 R >> endobj 5265 0 obj << /Title (probe::nfs.aop.release_page) /Parent 5232 0 R /Prev 5264 0 R /Next 5266 0 R /A 4161 0 R >> endobj 5266 0 obj << /Title (probe::nfs.aop.set_page_dirty) /Parent 5232 0 R /Prev 5265 0 R /Next 5267 0 R /A 4164 0 R >> endobj 5267 0 obj << /Title (probe::nfs.aop.write_begin) /Parent 5232 0 R /Prev 5266 0 R /Next 5268 0 R /A 4167 0 R >> endobj 5268 0 obj << /Title (probe::nfs.aop.write_end) /Parent 5232 0 R /Prev 5267 0 R /Next 5269 0 R /A 4170 0 R >> endobj 5269 0 obj << /Title (probe::nfs.aop.writepage) /Parent 5232 0 R /Prev 5268 0 R /Next 5270 0 R /A 4173 0 R >> endobj 5270 0 obj << /Title (probe::nfs.aop.writepages) /Parent 5232 0 R /Prev 5269 0 R /Next 5271 0 R /A 4176 0 R >> endobj 5271 0 obj << /Title (probe::nfs.fop.aio_read) /Parent 5232 0 R /Prev 5270 0 R /Next 5272 0 R /A 4179 0 R >> endobj 5272 0 obj << /Title (probe::nfs.fop.aio_write) /Parent 5232 0 R /Prev 5271 0 R /Next 5273 0 R /A 4182 0 R >> endobj 5273 0 obj << /Title (probe::nfs.fop.check_flags) /Parent 5232 0 R /Prev 5272 0 R /Next 5274 0 R /A 4185 0 R >> endobj 5274 0 obj << /Title (probe::nfs.fop.flush) /Parent 5232 0 R /Prev 5273 0 R /Next 5275 0 R /A 4188 0 R >> endobj 5275 0 obj << /Title (probe::nfs.fop.fsync) /Parent 5232 0 R /Prev 5274 0 R /Next 5276 0 R /A 4191 0 R >> endobj 5276 0 obj << /Title (probe::nfs.fop.llseek) /Parent 5232 0 R /Prev 5275 0 R /Next 5277 0 R /A 4194 0 R >> endobj 5277 0 obj << /Title (probe::nfs.fop.lock) /Parent 5232 0 R /Prev 5276 0 R /Next 5278 0 R /A 4197 0 R >> endobj 5278 0 obj << /Title (probe::nfs.fop.mmap) /Parent 5232 0 R /Prev 5277 0 R /Next 5279 0 R /A 4200 0 R >> endobj 5279 0 obj << /Title (probe::nfs.fop.open) /Parent 5232 0 R /Prev 5278 0 R /Next 5280 0 R /A 4203 0 R >> endobj 5280 0 obj << /Title (probe::nfs.fop.read) /Parent 5232 0 R /Prev 5279 0 R /Next 5281 0 R /A 4206 0 R >> endobj 5281 0 obj << /Title (probe::nfs.fop.read_iter) /Parent 5232 0 R /Prev 5280 0 R /Next 5282 0 R /A 4209 0 R >> endobj 5282 0 obj << /Title (probe::nfs.fop.release) /Parent 5232 0 R /Prev 5281 0 R /Next 5283 0 R /A 4212 0 R >> endobj 5283 0 obj << /Title (probe::nfs.fop.sendfile) /Parent 5232 0 R /Prev 5282 0 R /Next 5284 0 R /A 4215 0 R >> endobj 5284 0 obj << /Title (probe::nfs.fop.write) /Parent 5232 0 R /Prev 5283 0 R /Next 5285 0 R /A 4218 0 R >> endobj 5285 0 obj << /Title (probe::nfs.fop.write_iter) /Parent 5232 0 R /Prev 5284 0 R /Next 5286 0 R /A 4221 0 R >> endobj 5286 0 obj << /Title (probe::nfs.proc.commit) /Parent 5232 0 R /Prev 5285 0 R /Next 5287 0 R /A 4224 0 R >> endobj 5287 0 obj << /Title (probe::nfs.proc.commit_done) /Parent 5232 0 R /Prev 5286 0 R /Next 5288 0 R /A 4227 0 R >> endobj 5288 0 obj << /Title (probe::nfs.proc.commit_setup) /Parent 5232 0 R /Prev 5287 0 R /Next 5289 0 R /A 4230 0 R >> endobj 5289 0 obj << /Title (probe::nfs.proc.create) /Parent 5232 0 R /Prev 5288 0 R /Next 5290 0 R /A 4233 0 R >> endobj 5290 0 obj << /Title (probe::nfs.proc.handle_exception) /Parent 5232 0 R /Prev 5289 0 R /Next 5291 0 R /A 4236 0 R >> endobj 5291 0 obj << /Title (probe::nfs.proc.lookup) /Parent 5232 0 R /Prev 5290 0 R /Next 5292 0 R /A 4239 0 R >> endobj 5292 0 obj << /Title (probe::nfs.proc.open) /Parent 5232 0 R /Prev 5291 0 R /Next 5293 0 R /A 4242 0 R >> endobj 5293 0 obj << /Title (probe::nfs.proc.read) /Parent 5232 0 R /Prev 5292 0 R /Next 5294 0 R /A 4245 0 R >> endobj 5294 0 obj << /Title (probe::nfs.proc.read_done) /Parent 5232 0 R /Prev 5293 0 R /Next 5295 0 R /A 4248 0 R >> endobj 5295 0 obj << /Title (probe::nfs.proc.read_setup) /Parent 5232 0 R /Prev 5294 0 R /Next 5296 0 R /A 4251 0 R >> endobj 5296 0 obj << /Title (probe::nfs.proc.release) /Parent 5232 0 R /Prev 5295 0 R /Next 5297 0 R /A 4254 0 R >> endobj 5297 0 obj << /Title (probe::nfs.proc.remove) /Parent 5232 0 R /Prev 5296 0 R /Next 5298 0 R /A 4257 0 R >> endobj 5298 0 obj << /Title (probe::nfs.proc.rename) /Parent 5232 0 R /Prev 5297 0 R /Next 5299 0 R /A 4260 0 R >> endobj 5299 0 obj << /Title (probe::nfs.proc.rename_done) /Parent 5232 0 R /Prev 5298 0 R /Next 5300 0 R /A 4263 0 R >> endobj 5300 0 obj << /Title (probe::nfs.proc.rename_setup) /Parent 5232 0 R /Prev 5299 0 R /Next 5301 0 R /A 4266 0 R >> endobj 5301 0 obj << /Title (probe::nfs.proc.write) /Parent 5232 0 R /Prev 5300 0 R /Next 5302 0 R /A 4269 0 R >> endobj 5302 0 obj << /Title (probe::nfs.proc.write_done) /Parent 5232 0 R /Prev 5301 0 R /Next 5303 0 R /A 4272 0 R >> endobj 5303 0 obj << /Title (probe::nfs.proc.write_setup) /Parent 5232 0 R /Prev 5302 0 R /Next 5304 0 R /A 4275 0 R >> endobj 5304 0 obj << /Title (probe::nfsd.close) /Parent 5232 0 R /Prev 5303 0 R /Next 5305 0 R /A 4278 0 R >> endobj 5305 0 obj << /Title (probe::nfsd.commit) /Parent 5232 0 R /Prev 5304 0 R /Next 5306 0 R /A 4281 0 R >> endobj 5306 0 obj << /Title (probe::nfsd.create) /Parent 5232 0 R /Prev 5305 0 R /Next 5307 0 R /A 4284 0 R >> endobj 5307 0 obj << /Title (probe::nfsd.createv3) /Parent 5232 0 R /Prev 5306 0 R /Next 5308 0 R /A 4287 0 R >> endobj 5308 0 obj << /Title (probe::nfsd.dispatch) /Parent 5232 0 R /Prev 5307 0 R /Next 5309 0 R /A 4290 0 R >> endobj 5309 0 obj << /Title (probe::nfsd.lookup) /Parent 5232 0 R /Prev 5308 0 R /Next 5310 0 R /A 4293 0 R >> endobj 5310 0 obj << /Title (probe::nfsd.open) /Parent 5232 0 R /Prev 5309 0 R /Next 5311 0 R /A 4450 0 R >> endobj 5311 0 obj << /Title (probe::nfsd.proc.commit) /Parent 5232 0 R /Prev 5310 0 R /Next 5312 0 R /A 4453 0 R >> endobj 5312 0 obj << /Title (probe::nfsd.proc.create) /Parent 5232 0 R /Prev 5311 0 R /Next 5313 0 R /A 4456 0 R >> endobj 5313 0 obj << /Title (probe::nfsd.proc.lookup) /Parent 5232 0 R /Prev 5312 0 R /Next 5314 0 R /A 4459 0 R >> endobj 5314 0 obj << /Title (probe::nfsd.proc.read) /Parent 5232 0 R /Prev 5313 0 R /Next 5315 0 R /A 4462 0 R >> endobj 5315 0 obj << /Title (probe::nfsd.proc.remove) /Parent 5232 0 R /Prev 5314 0 R /Next 5316 0 R /A 4465 0 R >> endobj 5316 0 obj << /Title (probe::nfsd.proc.rename) /Parent 5232 0 R /Prev 5315 0 R /Next 5317 0 R /A 4468 0 R >> endobj 5317 0 obj << /Title (probe::nfsd.proc.write) /Parent 5232 0 R /Prev 5316 0 R /Next 5318 0 R /A 4471 0 R >> endobj 5318 0 obj << /Title (probe::nfsd.read) /Parent 5232 0 R /Prev 5317 0 R /Next 5319 0 R /A 4474 0 R >> endobj 5319 0 obj << /Title (probe::nfsd.rename) /Parent 5232 0 R /Prev 5318 0 R /Next 5320 0 R /A 4477 0 R >> endobj 5320 0 obj << /Title (probe::nfsd.unlink) /Parent 5232 0 R /Prev 5319 0 R /Next 5262 0 R /A 4480 0 R >> endobj 5262 0 obj << /Title (probe::nfsd.write) /Parent 5232 0 R /Prev 5320 0 R /A 4483 0 R >> endobj 5260 0 obj << /Title /Parent 4606 0 R /Prev 5232 0 R /Next 5321 0 R /First 5322 0 R /Last 5323 0 R /Count -4 /A 4486 0 R >> endobj 5322 0 obj << /Title (function::commit) /Parent 5260 0 R /Next 5324 0 R /A 4489 0 R >> endobj 5324 0 obj << /Title (function::discard) /Parent 5260 0 R /Prev 5322 0 R /Next 5325 0 R /A 4492 0 R >> endobj 5325 0 obj << /Title (function::speculate) /Parent 5260 0 R /Prev 5324 0 R /Next 5323 0 R /A 4495 0 R >> endobj 5323 0 obj << /Title (function::speculation) /Parent 5260 0 R /Prev 5325 0 R /A 4498 0 R >> endobj 5321 0 obj << /Title /Parent 4606 0 R /Prev 5260 0 R /Next 5326 0 R /First 5327 0 R /Last 5328 0 R /Count -13 /A 4501 0 R >> endobj 5327 0 obj << /Title (function::json_add_array) /Parent 5321 0 R /Next 5329 0 R /A 4504 0 R >> endobj 5329 0 obj << /Title (function::json_add_array_numeric_metric) /Parent 5321 0 R /Prev 5327 0 R /Next 5330 0 R /A 4507 0 R >> endobj 5330 0 obj << /Title (function::json_add_array_string_metric) /Parent 5321 0 R /Prev 5329 0 R /Next 5331 0 R /A 4510 0 R >> endobj 5331 0 obj << /Title (function::json_add_numeric_metric) /Parent 5321 0 R /Prev 5330 0 R /Next 5332 0 R /A 4513 0 R >> endobj 5332 0 obj << /Title (function::json_add_string_metric) /Parent 5321 0 R /Prev 5331 0 R /Next 5333 0 R /A 4516 0 R >> endobj 5333 0 obj << /Title (function::json_set_prefix) /Parent 5321 0 R /Prev 5332 0 R /Next 5334 0 R /A 4519 0 R >> endobj 5334 0 obj << /Title (macro::json_output_array_numeric_value) /Parent 5321 0 R /Prev 5333 0 R /Next 5335 0 R /A 4522 0 R >> endobj 5335 0 obj << /Title (macro::json_output_array_string_value) /Parent 5321 0 R /Prev 5334 0 R /Next 5336 0 R /A 4525 0 R >> endobj 5336 0 obj << /Title (macro::json_output_data_end) /Parent 5321 0 R /Prev 5335 0 R /Next 5337 0 R /A 4528 0 R >> endobj 5337 0 obj << /Title (macro::json_output_data_start) /Parent 5321 0 R /Prev 5336 0 R /Next 5338 0 R /A 4531 0 R >> endobj 5338 0 obj << /Title (macro::json_output_numeric_value) /Parent 5321 0 R /Prev 5337 0 R /Next 5339 0 R /A 4534 0 R >> endobj 5339 0 obj << /Title (macro::json_output_string_value) /Parent 5321 0 R /Prev 5338 0 R /Next 5328 0 R /A 4537 0 R >> endobj 5328 0 obj << /Title (probe::json_data) /Parent 5321 0 R /Prev 5339 0 R /A 4540 0 R >> endobj 5326 0 obj << /Title /Parent 4606 0 R /Prev 5321 0 R /Next 5340 0 R /First 5341 0 R /Last 5341 0 R /Count -1 /A 4543 0 R >> endobj 5341 0 obj << /Title (function::switch_file) /Parent 5326 0 R /A 4546 0 R >> endobj 5340 0 obj << /Title /Parent 4606 0 R /Prev 5326 0 R /Next 5342 0 R /First 5343 0 R /Last 5344 0 R /Count -13 /A 4549 0 R >> endobj 5343 0 obj << /Title (function::fp32_to_fp64) /Parent 5340 0 R /Next 5345 0 R /A 4552 0 R >> endobj 5345 0 obj << /Title (function::fp_add) /Parent 5340 0 R /Prev 5343 0 R /Next 5346 0 R /A 4555 0 R >> endobj 5346 0 obj << /Title (function::fp_eq) /Parent 5340 0 R /Prev 5345 0 R /Next 5347 0 R /A 4558 0 R >> endobj 5347 0 obj << /Title (function::fp_le) /Parent 5340 0 R /Prev 5346 0 R /Next 5348 0 R /A 4561 0 R >> endobj 5348 0 obj << /Title (function::fp_lt) /Parent 5340 0 R /Prev 5347 0 R /Next 5349 0 R /A 4564 0 R >> endobj 5349 0 obj << /Title (function::fp_mul) /Parent 5340 0 R /Prev 5348 0 R /Next 5350 0 R /A 4567 0 R >> endobj 5350 0 obj << /Title (function::fp_rem) /Parent 5340 0 R /Prev 5349 0 R /Next 5351 0 R /A 4570 0 R >> endobj 5351 0 obj << /Title (function::fp_sqrt) /Parent 5340 0 R /Prev 5350 0 R /Next 5352 0 R /A 4573 0 R >> endobj 5352 0 obj << /Title (function::fp_sub) /Parent 5340 0 R /Prev 5351 0 R /Next 5353 0 R /A 4576 0 R >> endobj 5353 0 obj << /Title (function::fp_to_long) /Parent 5340 0 R /Prev 5352 0 R /Next 5354 0 R /A 4579 0 R >> endobj 5354 0 obj << /Title (function::fp_to_string) /Parent 5340 0 R /Prev 5353 0 R /Next 5355 0 R /A 4582 0 R >> endobj 5355 0 obj << /Title (function::long_to_fp) /Parent 5340 0 R /Prev 5354 0 R /Next 5344 0 R /A 4585 0 R >> endobj 5344 0 obj << /Title (function::string_to_fp) /Parent 5340 0 R /Prev 5355 0 R /A 4588 0 R >> endobj 5342 0 obj << /Title /Parent 4606 0 R /Prev 5340 0 R /First 5356 0 R /Last 5357 0 R /Count -2 /A 4591 0 R >> endobj 5356 0 obj << /Title (probe::syscall_any) /Parent 5342 0 R /Next 5357 0 R /A 4594 0 R >> endobj 5357 0 obj << /Title (probe::syscall_any.return) /Parent 5342 0 R /Prev 5356 0 R /A 4597 0 R >> endobj 5358 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Italic /Encoding /WinAnsiEncoding >> endobj 5359 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Bold /Encoding /WinAnsiEncoding >> endobj 5360 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier /Encoding /WinAnsiEncoding >> endobj 5361 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-Oblique /Encoding /WinAnsiEncoding >> endobj 5362 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj 5363 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Times-Roman /Encoding /WinAnsiEncoding >> endobj 5364 0 obj << /Limits [(API-HZ) (API-HZ)] /Names [(API-HZ) 932 0 R] >> endobj 5365 0 obj << /Limits [(API-MAJOR) (API-MAJOR)] /Names [(API-MAJOR) 2936 0 R] >> endobj 5366 0 obj << /Limits [(API-MINOR) (API-MINOR)] /Names [(API-MINOR) 2939 0 R] >> endobj 5367 0 obj << /Limits [(API-MKDEV) (API-MKDEV)] /Names [(API-MKDEV) 2942 0 R] >> endobj 5368 0 obj << /Limits [(API-abort) (API-abort)] /Names [(API-abort) 3150 0 R] >> endobj 5369 0 obj << /Limits [(API-addr) (API-addr)] /Names [(API-addr) 174 0 R] >> endobj 5370 0 obj << /Limits [(API-addr-to-node) (API-addr-to-node)] /Names [(API-addr-to-node) 1191 0 R] >> endobj 5371 0 obj << /Limits [(API-ansi-clear-screen) (API-ansi-clear-screen)] /Names [(API-ansi-clear-screen) 3860 0 R] >> endobj 5372 0 obj << /Limits [(API-ansi-cursor-hide) (API-ansi-cursor-hide)] /Names [(API-ansi-cursor-hide) 3863 0 R] >> endobj 5373 0 obj << /Limits [(API-ansi-cursor-move) (API-ansi-cursor-move)] /Names [(API-ansi-cursor-move) 3866 0 R] >> endobj 5374 0 obj << /Limits [(API-ansi-cursor-restore) (API-ansi-cursor-restore)] /Names [(API-ansi-cursor-restore) 3869 0 R] >> endobj 5375 0 obj << /Limits [(API-ansi-cursor-save) (API-ansi-cursor-save)] /Names [(API-ansi-cursor-save) 3872 0 R] >> endobj 5376 0 obj << /Limits [(API-ansi-cursor-show) (API-ansi-cursor-show)] /Names [(API-ansi-cursor-show) 3875 0 R] >> endobj 5377 0 obj << /Limits [(API-ansi-new-line) (API-ansi-new-line)] /Names [(API-ansi-new-line) 3878 0 R] >> endobj 5378 0 obj << /Limits [(API-ansi-reset-color) (API-ansi-reset-color)] /Names [(API-ansi-reset-color) 3881 0 R] >> endobj 5379 0 obj << /Limits [(API-ansi-set-color) (API-ansi-set-color)] /Names [(API-ansi-set-color) 3884 0 R] >> endobj 5380 0 obj << /Limits [(API-asmlinkage) (API-asmlinkage)] /Names [(API-asmlinkage) 177 0 R] >> endobj 5381 0 obj << /Limits [(API-assert) (API-assert)] /Names [(API-assert) 3153 0 R] >> endobj 5382 0 obj << /Limits [(API-atomic-long-read) (API-atomic-long-read)] /Names [(API-atomic-long-read) 3222 0 R] >> endobj 5383 0 obj << /Limits [(API-atomic-read) (API-atomic-read)] /Names [(API-atomic-read) 3225 0 R] >> endobj 5384 0 obj << /Limits [(API-backtrace) (API-backtrace)] /Names [(API-backtrace) 180 0 R] >> endobj 5385 0 obj << /Limits [(API-bytes-to-string) (API-bytes-to-string)] /Names [(API-bytes-to-string) 1194 0 R] >> endobj 5386 0 obj << /Limits [(API-caller) (API-caller)] /Names [(API-caller) 183 0 R] >> endobj 5387 0 obj << /Limits [(API-caller-addr) (API-caller-addr)] /Names [(API-caller-addr) 186 0 R] >> endobj 5388 0 obj << /Limits [(API-callers) (API-callers)] /Names [(API-callers) 189 0 R] >> endobj 5389 0 obj << /Limits [(API-cmdline-arg) (API-cmdline-arg)] /Names [(API-cmdline-arg) 192 0 R] >> endobj 5390 0 obj << /Limits [(API-cmdline-args) (API-cmdline-args)] /Names [(API-cmdline-args) 195 0 R] >> endobj 5391 0 obj << /Limits [(API-cmdline-str) (API-cmdline-str)] /Names [(API-cmdline-str) 198 0 R] >> endobj 5392 0 obj << /Limits [(API-commit) (API-commit)] /Names [(API-commit) 4489 0 R] >> endobj 5393 0 obj << /Limits [(API-cpu) (API-cpu)] /Names [(API-cpu) 201 0 R] >> endobj 5394 0 obj << /Limits [(API-cpu-clock-ms) (API-cpu-clock-ms)] /Names [(API-cpu-clock-ms) 935 0 R] >> endobj 5395 0 obj << /Limits [(API-cpu-clock-ns) (API-cpu-clock-ns)] /Names [(API-cpu-clock-ns) 938 0 R] >> endobj 5396 0 obj << /Limits [(API-cpu-clock-s) (API-cpu-clock-s)] /Names [(API-cpu-clock-s) 941 0 R] >> endobj 5397 0 obj << /Limits [(API-cpu-clock-us) (API-cpu-clock-us)] /Names [(API-cpu-clock-us) 944 0 R] >> endobj 5398 0 obj << /Limits [(API-cpuid) (API-cpuid)] /Names [(API-cpuid) 204 0 R] >> endobj 5399 0 obj << /Limits [(API-cputime-to-msecs) (API-cputime-to-msecs)] /Names [(API-cputime-to-msecs) 1269 0 R] >> endobj 5400 0 obj << /Limits [(API-cputime-to-string) (API-cputime-to-string)] /Names [(API-cputime-to-string) 1272 0 R] >> endobj 5401 0 obj << /Limits [(API-cputime-to-usecs) (API-cputime-to-usecs)] /Names [(API-cputime-to-usecs) 1275 0 R] >> endobj 5402 0 obj << /Limits [(API-ctime) (API-ctime)] /Names [(API-ctime) 1170 0 R] >> endobj 5403 0 obj << /Limits [(API-current-exe-file) (API-current-exe-file)] /Names [(API-current-exe-file) 207 0 R] >> endobj 5404 0 obj << /Limits [(API-d-name) (API-d-name)] /Names [(API-d-name) 2951 0 R] >> endobj 5405 0 obj << /Limits [(API-d-path) (API-d-path)] /Names [(API-d-path) 2954 0 R] >> endobj 5406 0 obj << /Limits [(API-delete-stopwatch) (API-delete-stopwatch)] /Names [(API-delete-stopwatch) 947 0 R] >> endobj 5407 0 obj << /Limits [(API-discard) (API-discard)] /Names [(API-discard) 4492 0 R] >> endobj 5408 0 obj << /Limits [(API-dump-stack) (API-dump-stack)] /Names [(API-dump-stack) 3156 0 R] >> endobj 5409 0 obj << /Limits [(API-egid) (API-egid)] /Names [(API-egid) 210 0 R] >> endobj 5410 0 obj << /Limits [(API-env-var) (API-env-var)] /Names [(API-env-var) 213 0 R] >> endobj 5411 0 obj << /Limits [(API-errno-str) (API-errno-str)] /Names [(API-errno-str) 2915 0 R] >> endobj 5412 0 obj << /Limits [(API-error) (API-error)] /Names [(API-error) 3159 0 R] >> endobj 5413 0 obj << /Limits [(API-euid) (API-euid)] /Names [(API-euid) 216 0 R] >> endobj 5414 0 obj << /Limits [(API-execname) (API-execname)] /Names [(API-execname) 219 0 R] >> endobj 5415 0 obj << /Limits [(API-exit) (API-exit)] /Names [(API-exit) 3162 0 R] >> endobj 5416 0 obj << /Limits [(API-fastcall) (API-fastcall)] /Names [(API-fastcall) 222 0 R] >> endobj 5417 0 obj << /Limits [(API-format-ipaddr) (API-format-ipaddr)] /Names [(API-format-ipaddr) 1868 0 R] >> endobj 5418 0 obj << /Limits [(API-fp-add) (API-fp-add)] /Names [(API-fp-add) 4555 0 R] >> endobj 5419 0 obj << /Limits [(API-fp-eq) (API-fp-eq)] /Names [(API-fp-eq) 4558 0 R] >> endobj 5420 0 obj << /Limits [(API-fp-le) (API-fp-le)] /Names [(API-fp-le) 4561 0 R] >> endobj 5421 0 obj << /Limits [(API-fp-lt) (API-fp-lt)] /Names [(API-fp-lt) 4564 0 R] >> endobj 5422 0 obj << /Limits [(API-fp-mul) (API-fp-mul)] /Names [(API-fp-mul) 4567 0 R] >> endobj 5423 0 obj << /Limits [(API-fp-rem) (API-fp-rem)] /Names [(API-fp-rem) 4570 0 R] >> endobj 5424 0 obj << /Limits [(API-fp-sqrt) (API-fp-sqrt)] /Names [(API-fp-sqrt) 4573 0 R] >> endobj 5425 0 obj << /Limits [(API-fp-sub) (API-fp-sub)] /Names [(API-fp-sub) 4576 0 R] >> endobj 5426 0 obj << /Limits [(API-fp-to-long) (API-fp-to-long)] /Names [(API-fp-to-long) 4579 0 R] >> endobj 5427 0 obj << /Limits [(API-fp-to-string) (API-fp-to-string)] /Names [(API-fp-to-string) 4582 0 R] >> endobj 5428 0 obj << /Limits [(API-fp32-to-fp64) (API-fp32-to-fp64)] /Names [(API-fp32-to-fp64) 4552 0 R] >> endobj 5429 0 obj << /Limits [(API-ftrace) (API-ftrace)] /Names [(API-ftrace) 3165 0 R] >> endobj 5430 0 obj << /Limits [(API-fullpath-struct-file) (API-fullpath-struct-file)] /Names [(API-fullpath-struct-file) 2957 0 R] >> endobj 5431 0 obj << /Limits [(API-fullpath-struct-nameidata) (API-fullpath-struct-nameidata)] /Names [(API-fullpath-struct-nameidata) 2960 0 R] >> endobj 5432 0 obj << /Limits [(API-fullpath-struct-path) (API-fullpath-struct-path)] /Names [(API-fullpath-struct-path) 2963 0 R] >> endobj 5433 0 obj << /Limits [(API-get-cycles) (API-get-cycles)] /Names [(API-get-cycles) 950 0 R] >> endobj 5434 0 obj << /Limits [(API-get-loadavg-index) (API-get-loadavg-index)] /Names [(API-get-loadavg-index) 2614 0 R] >> endobj 5435 0 obj << /Limits [(API-get-sa-flags) (API-get-sa-flags)] /Names [(API-get-sa-flags) 2647 0 R] >> endobj 5436 0 obj << /Limits [(API-get-sa-handler) (API-get-sa-handler)] /Names [(API-get-sa-handler) 2650 0 R] >> endobj 5437 0 obj << /Limits [(API-gettimeofday-ms) (API-gettimeofday-ms)] /Names [(API-gettimeofday-ms) 953 0 R] >> endobj 5438 0 obj << /Limits [(API-gettimeofday-ns) (API-gettimeofday-ns)] /Names [(API-gettimeofday-ns) 956 0 R] >> endobj 5439 0 obj << /Limits [(API-gettimeofday-s) (API-gettimeofday-s)] /Names [(API-gettimeofday-s) 959 0 R] >> endobj 5440 0 obj << /Limits [(API-gettimeofday-us) (API-gettimeofday-us)] /Names [(API-gettimeofday-us) 962 0 R] >> endobj 5441 0 obj << /Limits [(API-gid) (API-gid)] /Names [(API-gid) 225 0 R] >> endobj 5442 0 obj << /Limits [(API-htonl) (API-htonl)] /Names [(API-htonl) 1871 0 R] >> endobj 5443 0 obj << /Limits [(API-htonll) (API-htonll)] /Names [(API-htonll) 1874 0 R] >> endobj 5444 0 obj << /Limits [(API-htons) (API-htons)] /Names [(API-htons) 1877 0 R] >> endobj 5445 0 obj << /Limits [(API-indent) (API-indent)] /Names [(API-indent) 3887 0 R] >> endobj 5446 0 obj << /Limits [(API-indent-depth) (API-indent-depth)] /Names [(API-indent-depth) 3890 0 R] >> endobj 5447 0 obj << /Limits [(API-inet-get-ip-source) (API-inet-get-ip-source)] /Names [(API-inet-get-ip-source) 2241 0 R] >> endobj 5448 0 obj << /Limits [(API-inet-get-local-port) (API-inet-get-local-port)] /Names [(API-inet-get-local-port) 2244 0 R] >> endobj 5449 0 obj << /Limits [(API-inode-name) (API-inode-name)] /Names [(API-inode-name) 2966 0 R] >> endobj 5450 0 obj << /Limits [(API-inode-path) (API-inode-path)] /Names [(API-inode-path) 2969 0 R] >> endobj 5451 0 obj << /Limits [(API-int-arg) (API-int-arg)] /Names [(API-int-arg) 228 0 R] >> endobj 5452 0 obj << /Limits [(API-ioblock-end) (API-ioblock-end)] /Names [(API-ioblock-end) 1522 0 R] >> endobj 5453 0 obj << /Limits [(API-ioblock-request) (API-ioblock-request)] /Names [(API-ioblock-request) 1525 0 R] >> endobj 5454 0 obj << /Limits [(API-ioblock-trace-bounce) (API-ioblock-trace-bounce)] /Names [(API-ioblock-trace-bounce) 1528 0 R] >> endobj 5455 0 obj << /Limits [(API-ioblock-trace-end) (API-ioblock-trace-end)] /Names [(API-ioblock-trace-end) 1531 0 R] >> endobj 5456 0 obj << /Limits [(API-ioblock-trace-request) (API-ioblock-trace-request)] /Names [(API-ioblock-trace-request) 1534 0 R] >> endobj 5457 0 obj << /Limits [(API-ioscheduler-elv-add-request) (API-ioscheduler-elv-add-request)] /Names [(API-ioscheduler-elv-add-request) 1537 0 R] >> endobj 5458 0 obj << /Limits [(API-ioscheduler-elv-add-request-kp) (API-ioscheduler-elv-add-request-kp)] /Names [(API-ioscheduler-elv-add-request-kp) 1540 0 R] >> endobj 5459 0 obj << /Limits [(API-ioscheduler-elv-add-request-tp) (API-ioscheduler-elv-add-request-tp)] /Names [(API-ioscheduler-elv-add-request-tp) 1543 0 R] >> endobj 5460 0 obj << /Limits [(API-ioscheduler-elv-completed-request) (API-ioscheduler-elv-completed-request)] /Names [(API-ioscheduler-elv-completed-request) 1546 0 R] >> endobj 5461 0 obj << /Limits [(API-ioscheduler-elv-next-request) (API-ioscheduler-elv-next-request)] /Names [(API-ioscheduler-elv-next-request) 1549 0 R] >> endobj 5462 0 obj << /Limits [(API-ioscheduler-elv-next-request-return) (API-ioscheduler-elv-next-request-return)] /Names [(API-ioscheduler-elv-next-request-return) 1552 0 R] >> endobj 5463 0 obj << /Limits [(API-ioscheduler-trace-elv-abort-request) (API-ioscheduler-trace-elv-abort-request)] /Names [(API-ioscheduler-trace-elv-abort-request) 1555 0 R] >> endobj 5464 0 obj << /Limits [(API-ioscheduler-trace-elv-completed-request) (API-ioscheduler-trace-elv-completed-request)] /Names [(API-ioscheduler-trace-elv-completed-request) 1558 0 R] >> endobj 5465 0 obj << /Limits [(API-ioscheduler-trace-elv-issue-request) (API-ioscheduler-trace-elv-issue-request)] /Names [(API-ioscheduler-trace-elv-issue-request) 1561 0 R] >> endobj 5466 0 obj << /Limits [(API-ioscheduler-trace-elv-requeue-request) (API-ioscheduler-trace-elv-requeue-request)] /Names [(API-ioscheduler-trace-elv-requeue-request) 1564 0 R] >> endobj 5467 0 obj << /Limits [(API-ioscheduler-trace-plug) (API-ioscheduler-trace-plug)] /Names [(API-ioscheduler-trace-plug) 1567 0 R] >> endobj 5468 0 obj << /Limits [(API-ioscheduler-trace-unplug-io) (API-ioscheduler-trace-unplug-io)] /Names [(API-ioscheduler-trace-unplug-io) 1570 0 R] >> endobj 5469 0 obj << /Limits [(API-ioscheduler-trace-unplug-timer) (API-ioscheduler-trace-unplug-timer)] /Names [(API-ioscheduler-trace-unplug-timer) 1573 0 R] >> endobj 5470 0 obj << /Limits [(API-ip-ntop) (API-ip-ntop)] /Names [(API-ip-ntop) 1880 0 R] >> endobj 5471 0 obj << /Limits [(API-ipmib-ForwDatagrams) (API-ipmib-ForwDatagrams)] /Names [(API-ipmib-ForwDatagrams) 2539 0 R] >> endobj 5472 0 obj << /Limits [(API-ipmib-FragFails) (API-ipmib-FragFails)] /Names [(API-ipmib-FragFails) 2542 0 R] >> endobj 5473 0 obj << /Limits [(API-ipmib-FragOKs) (API-ipmib-FragOKs)] /Names [(API-ipmib-FragOKs) 2545 0 R] >> endobj 5474 0 obj << /Limits [(API-ipmib-InAddrErrors) (API-ipmib-InAddrErrors)] /Names [(API-ipmib-InAddrErrors) 2548 0 R] >> endobj 5475 0 obj << /Limits [(API-ipmib-InDiscards) (API-ipmib-InDiscards)] /Names [(API-ipmib-InDiscards) 2551 0 R] >> endobj 5476 0 obj << /Limits [(API-ipmib-InNoRoutes) (API-ipmib-InNoRoutes)] /Names [(API-ipmib-InNoRoutes) 2554 0 R] >> endobj 5477 0 obj << /Limits [(API-ipmib-InReceives) (API-ipmib-InReceives)] /Names [(API-ipmib-InReceives) 2557 0 R] >> endobj 5478 0 obj << /Limits [(API-ipmib-InUnknownProtos) (API-ipmib-InUnknownProtos)] /Names [(API-ipmib-InUnknownProtos) 2560 0 R] >> endobj 5479 0 obj << /Limits [(API-ipmib-OutRequests) (API-ipmib-OutRequests)] /Names [(API-ipmib-OutRequests) 2563 0 R] >> endobj 5480 0 obj << /Limits [(API-ipmib-ReasmReqds) (API-ipmib-ReasmReqds)] /Names [(API-ipmib-ReasmReqds) 2566 0 R] >> endobj 5481 0 obj << /Limits [(API-ipmib-ReasmTimeout) (API-ipmib-ReasmTimeout)] /Names [(API-ipmib-ReasmTimeout) 2569 0 R] >> endobj 5482 0 obj << /Limits [(API-ipmib-filter-key) (API-ipmib-filter-key)] /Names [(API-ipmib-filter-key) 2500 0 R] >> endobj 5483 0 obj << /Limits [(API-ipmib-get-proto) (API-ipmib-get-proto)] /Names [(API-ipmib-get-proto) 2503 0 R] >> endobj 5484 0 obj << /Limits [(API-ipmib-local-addr) (API-ipmib-local-addr)] /Names [(API-ipmib-local-addr) 2506 0 R] >> endobj 5485 0 obj << /Limits [(API-ipmib-remote-addr) (API-ipmib-remote-addr)] /Names [(API-ipmib-remote-addr) 2509 0 R] >> endobj 5486 0 obj << /Limits [(API-ipmib-tcp-local-port) (API-ipmib-tcp-local-port)] /Names [(API-ipmib-tcp-local-port) 2512 0 R] >> endobj 5487 0 obj << /Limits [(API-ipmib-tcp-remote-port) (API-ipmib-tcp-remote-port)] /Names [(API-ipmib-tcp-remote-port) 2515 0 R] >> endobj 5488 0 obj << /Limits [(API-irq-handler-entry) (API-irq-handler-entry)] /Names [(API-irq-handler-entry) 1841 0 R] >> endobj 5489 0 obj << /Limits [(API-irq-handler-exit) (API-irq-handler-exit)] /Names [(API-irq-handler-exit) 1844 0 R] >> endobj 5490 0 obj << /Limits [(API-is-myproc) (API-is-myproc)] /Names [(API-is-myproc) 231 0 R] >> endobj 5491 0 obj << /Limits [(API-is-return) (API-is-return)] /Names [(API-is-return) 234 0 R] >> endobj 5492 0 obj << /Limits [(API-is-sig-blocked) (API-is-sig-blocked)] /Names [(API-is-sig-blocked) 2653 0 R] >> endobj 5493 0 obj << /Limits [(API-isdigit) (API-isdigit)] /Names [(API-isdigit) 3812 0 R] >> endobj 5494 0 obj << /Limits [(API-isinstr) (API-isinstr)] /Names [(API-isinstr) 3815 0 R] >> endobj 5495 0 obj << /Limits [(API-jiffies) (API-jiffies)] /Names [(API-jiffies) 965 0 R] >> endobj 5496 0 obj << /Limits [(API-json-add-array) (API-json-add-array)] /Names [(API-json-add-array) 4504 0 R] >> endobj 5497 0 obj << /Limits [(API-json-add-array-numeric-metric) (API-json-add-array-numeric-metric)] /Names [(API-json-add-array-numeric-metric) 4507 0 R] >> endobj 5498 0 obj << /Limits [(API-json-add-array-string-metric) (API-json-add-array-string-metric)] /Names [(API-json-add-array-string-metric) 4510 0 R] >> endobj 5499 0 obj << /Limits [(API-json-add-numeric-metric) (API-json-add-numeric-metric)] /Names [(API-json-add-numeric-metric) 4513 0 R] >> endobj 5500 0 obj << /Limits [(API-json-add-string-metric) (API-json-add-string-metric)] /Names [(API-json-add-string-metric) 4516 0 R] >> endobj 5501 0 obj << /Limits [(API-json-data) (API-json-data)] /Names [(API-json-data) 4540 0 R] >> endobj 5502 0 obj << /Limits [(API-json-output-array-numeric-value) (API-json-output-array-numeric-value)] /Names [(API-json-output-array-numeric-value) 4522 0 R] >> endobj 5503 0 obj << /Limits [(API-json-output-array-string-value) (API-json-output-array-string-value)] /Names [(API-json-output-array-string-value) 4525 0 R] >> endobj 5504 0 obj << /Limits [(API-json-output-data-end) (API-json-output-data-end)] /Names [(API-json-output-data-end) 4528 0 R] >> endobj 5505 0 obj << /Limits [(API-json-output-data-start) (API-json-output-data-start)] /Names [(API-json-output-data-start) 4531 0 R] >> endobj 5506 0 obj << /Limits [(API-json-output-numeric-value) (API-json-output-numeric-value)] /Names [(API-json-output-numeric-value) 4534 0 R] >> endobj 5507 0 obj << /Limits [(API-json-output-string-value) (API-json-output-string-value)] /Names [(API-json-output-string-value) 4537 0 R] >> endobj 5508 0 obj << /Limits [(API-json-set-prefix) (API-json-set-prefix)] /Names [(API-json-set-prefix) 4519 0 R] >> endobj 5509 0 obj << /Limits [(API-kernel-buffer-quoted) (API-kernel-buffer-quoted)] /Names [(API-kernel-buffer-quoted) 3228 0 R] >> endobj 5510 0 obj << /Limits [(API-kernel-buffer-quoted-error) (API-kernel-buffer-quoted-error)] /Names [(API-kernel-buffer-quoted-error) 3231 0 R] >> endobj 5511 0 obj << /Limits [(API-kernel-char) (API-kernel-char)] /Names [(API-kernel-char) 3234 0 R] >> endobj 5512 0 obj << /Limits [(API-kernel-int) (API-kernel-int)] /Names [(API-kernel-int) 3237 0 R] >> endobj 5513 0 obj << /Limits [(API-kernel-long) (API-kernel-long)] /Names [(API-kernel-long) 3240 0 R] >> endobj 5514 0 obj << /Limits [(API-kernel-pointer) (API-kernel-pointer)] /Names [(API-kernel-pointer) 3243 0 R] >> endobj 5515 0 obj << /Limits [(API-kernel-short) (API-kernel-short)] /Names [(API-kernel-short) 3246 0 R] >> endobj 5516 0 obj << /Limits [(API-kernel-string) (API-kernel-string)] /Names [(API-kernel-string) 3249 0 R] >> endobj 5517 0 obj << /Limits [(API-kernel-string-n) (API-kernel-string-n)] /Names [(API-kernel-string-n) 3252 0 R] >> endobj 5518 0 obj << /Limits [(API-kernel-string-quoted) (API-kernel-string-quoted)] /Names [(API-kernel-string-quoted) 3255 0 R] >> endobj 5519 0 obj << /Limits [(API-kernel-string-quoted-utf16) (API-kernel-string-quoted-utf16)] /Names [(API-kernel-string-quoted-utf16) 3258 0 R] >> endobj 5520 0 obj << /Limits [(API-kernel-string-quoted-utf32) (API-kernel-string-quoted-utf32)] /Names [(API-kernel-string-quoted-utf32) 3261 0 R] >> endobj 5521 0 obj << /Limits [(API-kernel-string-utf16) (API-kernel-string-utf16)] /Names [(API-kernel-string-utf16) 3264 0 R] >> endobj 5522 0 obj << /Limits [(API-kernel-string-utf32) (API-kernel-string-utf32)] /Names [(API-kernel-string-utf32) 3267 0 R] >> endobj 5523 0 obj << /Limits [(API-kprocess-create) (API-kprocess-create)] /Names [(API-kprocess-create) 2626 0 R] >> endobj 5524 0 obj << /Limits [(API-kprocess-exec) (API-kprocess-exec)] /Names [(API-kprocess-exec) 2629 0 R] >> endobj 5525 0 obj << /Limits [(API-kprocess-exec-complete) (API-kprocess-exec-complete)] /Names [(API-kprocess-exec-complete) 2632 0 R] >> endobj 5526 0 obj << /Limits [(API-kprocess-exit) (API-kprocess-exit)] /Names [(API-kprocess-exit) 2635 0 R] >> endobj 5527 0 obj << /Limits [(API-kprocess-release) (API-kprocess-release)] /Names [(API-kprocess-release) 2638 0 R] >> endobj 5528 0 obj << /Limits [(API-kprocess-start) (API-kprocess-start)] /Names [(API-kprocess-start) 2641 0 R] >> endobj 5529 0 obj << /Limits [(API-ktime-get-ns) (API-ktime-get-ns)] /Names [(API-ktime-get-ns) 968 0 R] >> endobj 5530 0 obj << /Limits [(API-linuxmib-DelayedACKs) (API-linuxmib-DelayedACKs)] /Names [(API-linuxmib-DelayedACKs) 2572 0 R] >> endobj 5531 0 obj << /Limits [(API-linuxmib-ListenDrops) (API-linuxmib-ListenDrops)] /Names [(API-linuxmib-ListenDrops) 2575 0 R] >> endobj 5532 0 obj << /Limits [(API-linuxmib-ListenOverflows) (API-linuxmib-ListenOverflows)] /Names [(API-linuxmib-ListenOverflows) 2578 0 R] >> endobj 5533 0 obj << /Limits [(API-linuxmib-TCPMemoryPressures) (API-linuxmib-TCPMemoryPressures)] /Names [(API-linuxmib-TCPMemoryPressures) 2581 0 R] >> endobj 5534 0 obj << /Limits [(API-linuxmib-filter-key) (API-linuxmib-filter-key)] /Names [(API-linuxmib-filter-key) 2518 0 R] >> endobj 5535 0 obj << /Limits [(API-local-clock-ms) (API-local-clock-ms)] /Names [(API-local-clock-ms) 971 0 R] >> endobj 5536 0 obj << /Limits [(API-local-clock-ns) (API-local-clock-ns)] /Names [(API-local-clock-ns) 974 0 R] >> endobj 5537 0 obj << /Limits [(API-local-clock-s) (API-local-clock-s)] /Names [(API-local-clock-s) 1143 0 R] >> endobj 5538 0 obj << /Limits [(API-local-clock-us) (API-local-clock-us)] /Names [(API-local-clock-us) 1146 0 R] >> endobj 5539 0 obj << /Limits [(API-log) (API-log)] /Names [(API-log) 3168 0 R] >> endobj 5540 0 obj << /Limits [(API-long-arg) (API-long-arg)] /Names [(API-long-arg) 237 0 R] >> endobj 5541 0 obj << /Limits [(API-long-to-fp) (API-long-to-fp)] /Names [(API-long-to-fp) 4585 0 R] >> endobj 5542 0 obj << /Limits [(API-longlong-arg) (API-longlong-arg)] /Names [(API-longlong-arg) 240 0 R] >> endobj 5543 0 obj << /Limits [(API-matched) (API-matched)] /Names [(API-matched) 3818 0 R] >> endobj 5544 0 obj << /Limits [(API-matched-str) (API-matched-str)] /Names [(API-matched-str) 3821 0 R] >> endobj 5545 0 obj << /Limits [(API-mdelay) (API-mdelay)] /Names [(API-mdelay) 3631 0 R] >> endobj 5546 0 obj << /Limits [(API-mem-page-size) (API-mem-page-size)] /Names [(API-mem-page-size) 1197 0 R] >> endobj 5547 0 obj << /Limits [(API-modname) (API-modname)] /Names [(API-modname) 243 0 R] >> endobj 5548 0 obj << /Limits [(API-module-name) (API-module-name)] /Names [(API-module-name) 246 0 R] >> endobj 5549 0 obj << /Limits [(API-module-size) (API-module-size)] /Names [(API-module-size) 249 0 R] >> endobj 5550 0 obj << /Limits [(API-msecs-to-string) (API-msecs-to-string)] /Names [(API-msecs-to-string) 1278 0 R] >> endobj 5551 0 obj << /Limits [(API-netdev-change-mac) (API-netdev-change-mac)] /Names [(API-netdev-change-mac) 1892 0 R] >> endobj 5552 0 obj << /Limits [(API-netdev-change-mtu) (API-netdev-change-mtu)] /Names [(API-netdev-change-mtu) 1895 0 R] >> endobj 5553 0 obj << /Limits [(API-netdev-change-rx-flag) (API-netdev-change-rx-flag)] /Names [(API-netdev-change-rx-flag) 1898 0 R] >> endobj 5554 0 obj << /Limits [(API-netdev-close) (API-netdev-close)] /Names [(API-netdev-close) 1901 0 R] >> endobj 5555 0 obj << /Limits [(API-netdev-get-stats) (API-netdev-get-stats)] /Names [(API-netdev-get-stats) 1904 0 R] >> endobj 5556 0 obj << /Limits [(API-netdev-hard-transmit) (API-netdev-hard-transmit)] /Names [(API-netdev-hard-transmit) 1907 0 R] >> endobj 5557 0 obj << /Limits [(API-netdev-ioctl) (API-netdev-ioctl)] /Names [(API-netdev-ioctl) 1910 0 R] >> endobj 5558 0 obj << /Limits [(API-netdev-open) (API-netdev-open)] /Names [(API-netdev-open) 1913 0 R] >> endobj 5559 0 obj << /Limits [(API-netdev-receive) (API-netdev-receive)] /Names [(API-netdev-receive) 1916 0 R] >> endobj 5560 0 obj << /Limits [(API-netdev-register) (API-netdev-register)] /Names [(API-netdev-register) 1919 0 R] >> endobj 5561 0 obj << /Limits [(API-netdev-rx) (API-netdev-rx)] /Names [(API-netdev-rx) 1922 0 R] >> endobj 5562 0 obj << /Limits [(API-netdev-set-promiscuity) (API-netdev-set-promiscuity)] /Names [(API-netdev-set-promiscuity) 1925 0 R] >> endobj 5563 0 obj << /Limits [(API-netdev-transmit) (API-netdev-transmit)] /Names [(API-netdev-transmit) 1928 0 R] >> endobj 5564 0 obj << /Limits [(API-netdev-unregister) (API-netdev-unregister)] /Names [(API-netdev-unregister) 1931 0 R] >> endobj 5565 0 obj << /Limits [(API-netfilter-arp-forward) (API-netfilter-arp-forward)] /Names [(API-netfilter-arp-forward) 1934 0 R] >> endobj 5566 0 obj << /Limits [(API-netfilter-arp-in) (API-netfilter-arp-in)] /Names [(API-netfilter-arp-in) 1937 0 R] >> endobj 5567 0 obj << /Limits [(API-netfilter-arp-out) (API-netfilter-arp-out)] /Names [(API-netfilter-arp-out) 1940 0 R] >> endobj 5568 0 obj << /Limits [(API-netfilter-bridge-forward) (API-netfilter-bridge-forward)] /Names [(API-netfilter-bridge-forward) 1943 0 R] >> endobj 5569 0 obj << /Limits [(API-netfilter-bridge-local-in) (API-netfilter-bridge-local-in)] /Names [(API-netfilter-bridge-local-in) 1946 0 R] >> endobj 5570 0 obj << /Limits [(API-netfilter-bridge-local-out) (API-netfilter-bridge-local-out)] /Names [(API-netfilter-bridge-local-out) 1949 0 R] >> endobj 5571 0 obj << /Limits [(API-netfilter-bridge-post-routing) (API-netfilter-bridge-post-routing)] /Names [(API-netfilter-bridge-post-routing) 1952 0 R] >> endobj 5572 0 obj << /Limits [(API-netfilter-bridge-pre-routing) (API-netfilter-bridge-pre-routing)] /Names [(API-netfilter-bridge-pre-routing) 1955 0 R] >> endobj 5573 0 obj << /Limits [(API-netfilter-ip-forward) (API-netfilter-ip-forward)] /Names [(API-netfilter-ip-forward) 1958 0 R] >> endobj 5574 0 obj << /Limits [(API-netfilter-ip-local-in) (API-netfilter-ip-local-in)] /Names [(API-netfilter-ip-local-in) 1961 0 R] >> endobj 5575 0 obj << /Limits [(API-netfilter-ip-local-out) (API-netfilter-ip-local-out)] /Names [(API-netfilter-ip-local-out) 1964 0 R] >> endobj 5576 0 obj << /Limits [(API-netfilter-ip-post-routing) (API-netfilter-ip-post-routing)] /Names [(API-netfilter-ip-post-routing) 1967 0 R] >> endobj 5577 0 obj << /Limits [(API-netfilter-ip-pre-routing) (API-netfilter-ip-pre-routing)] /Names [(API-netfilter-ip-pre-routing) 1970 0 R] >> endobj 5578 0 obj << /Limits [(API-nfs-aop-readpage) (API-nfs-aop-readpage)] /Names [(API-nfs-aop-readpage) 4155 0 R] >> endobj 5579 0 obj << /Limits [(API-nfs-aop-readpages) (API-nfs-aop-readpages)] /Names [(API-nfs-aop-readpages) 4158 0 R] >> endobj 5580 0 obj << /Limits [(API-nfs-aop-release-page) (API-nfs-aop-release-page)] /Names [(API-nfs-aop-release-page) 4161 0 R] >> endobj 5581 0 obj << /Limits [(API-nfs-aop-set-page-dirty) (API-nfs-aop-set-page-dirty)] /Names [(API-nfs-aop-set-page-dirty) 4164 0 R] >> endobj 5582 0 obj << /Limits [(API-nfs-aop-write-begin) (API-nfs-aop-write-begin)] /Names [(API-nfs-aop-write-begin) 4167 0 R] >> endobj 5583 0 obj << /Limits [(API-nfs-aop-write-end) (API-nfs-aop-write-end)] /Names [(API-nfs-aop-write-end) 4170 0 R] >> endobj 5584 0 obj << /Limits [(API-nfs-aop-writepage) (API-nfs-aop-writepage)] /Names [(API-nfs-aop-writepage) 4173 0 R] >> endobj 5585 0 obj << /Limits [(API-nfs-aop-writepages) (API-nfs-aop-writepages)] /Names [(API-nfs-aop-writepages) 4176 0 R] >> endobj 5586 0 obj << /Limits [(API-nfs-fop-aio-read) (API-nfs-fop-aio-read)] /Names [(API-nfs-fop-aio-read) 4179 0 R] >> endobj 5587 0 obj << /Limits [(API-nfs-fop-aio-write) (API-nfs-fop-aio-write)] /Names [(API-nfs-fop-aio-write) 4182 0 R] >> endobj 5588 0 obj << /Limits [(API-nfs-fop-check-flags) (API-nfs-fop-check-flags)] /Names [(API-nfs-fop-check-flags) 4185 0 R] >> endobj 5589 0 obj << /Limits [(API-nfs-fop-flush) (API-nfs-fop-flush)] /Names [(API-nfs-fop-flush) 4188 0 R] >> endobj 5590 0 obj << /Limits [(API-nfs-fop-fsync) (API-nfs-fop-fsync)] /Names [(API-nfs-fop-fsync) 4191 0 R] >> endobj 5591 0 obj << /Limits [(API-nfs-fop-llseek) (API-nfs-fop-llseek)] /Names [(API-nfs-fop-llseek) 4194 0 R] >> endobj 5592 0 obj << /Limits [(API-nfs-fop-lock) (API-nfs-fop-lock)] /Names [(API-nfs-fop-lock) 4197 0 R] >> endobj 5593 0 obj << /Limits [(API-nfs-fop-mmap) (API-nfs-fop-mmap)] /Names [(API-nfs-fop-mmap) 4200 0 R] >> endobj 5594 0 obj << /Limits [(API-nfs-fop-open) (API-nfs-fop-open)] /Names [(API-nfs-fop-open) 4203 0 R] >> endobj 5595 0 obj << /Limits [(API-nfs-fop-read) (API-nfs-fop-read)] /Names [(API-nfs-fop-read) 4206 0 R] >> endobj 5596 0 obj << /Limits [(API-nfs-fop-read-iter) (API-nfs-fop-read-iter)] /Names [(API-nfs-fop-read-iter) 4209 0 R] >> endobj 5597 0 obj << /Limits [(API-nfs-fop-release) (API-nfs-fop-release)] /Names [(API-nfs-fop-release) 4212 0 R] >> endobj 5598 0 obj << /Limits [(API-nfs-fop-sendfile) (API-nfs-fop-sendfile)] /Names [(API-nfs-fop-sendfile) 4215 0 R] >> endobj 5599 0 obj << /Limits [(API-nfs-fop-write) (API-nfs-fop-write)] /Names [(API-nfs-fop-write) 4218 0 R] >> endobj 5600 0 obj << /Limits [(API-nfs-fop-write-iter) (API-nfs-fop-write-iter)] /Names [(API-nfs-fop-write-iter) 4221 0 R] >> endobj 5601 0 obj << /Limits [(API-nfs-proc-commit) (API-nfs-proc-commit)] /Names [(API-nfs-proc-commit) 4224 0 R] >> endobj 5602 0 obj << /Limits [(API-nfs-proc-commit-done) (API-nfs-proc-commit-done)] /Names [(API-nfs-proc-commit-done) 4227 0 R] >> endobj 5603 0 obj << /Limits [(API-nfs-proc-commit-setup) (API-nfs-proc-commit-setup)] /Names [(API-nfs-proc-commit-setup) 4230 0 R] >> endobj 5604 0 obj << /Limits [(API-nfs-proc-create) (API-nfs-proc-create)] /Names [(API-nfs-proc-create) 4233 0 R] >> endobj 5605 0 obj << /Limits [(API-nfs-proc-handle-exception) (API-nfs-proc-handle-exception)] /Names [(API-nfs-proc-handle-exception) 4236 0 R] >> endobj 5606 0 obj << /Limits [(API-nfs-proc-lookup) (API-nfs-proc-lookup)] /Names [(API-nfs-proc-lookup) 4239 0 R] >> endobj 5607 0 obj << /Limits [(API-nfs-proc-open) (API-nfs-proc-open)] /Names [(API-nfs-proc-open) 4242 0 R] >> endobj 5608 0 obj << /Limits [(API-nfs-proc-read) (API-nfs-proc-read)] /Names [(API-nfs-proc-read) 4245 0 R] >> endobj 5609 0 obj << /Limits [(API-nfs-proc-read-done) (API-nfs-proc-read-done)] /Names [(API-nfs-proc-read-done) 4248 0 R] >> endobj 5610 0 obj << /Limits [(API-nfs-proc-read-setup) (API-nfs-proc-read-setup)] /Names [(API-nfs-proc-read-setup) 4251 0 R] >> endobj 5611 0 obj << /Limits [(API-nfs-proc-release) (API-nfs-proc-release)] /Names [(API-nfs-proc-release) 4254 0 R] >> endobj 5612 0 obj << /Limits [(API-nfs-proc-remove) (API-nfs-proc-remove)] /Names [(API-nfs-proc-remove) 4257 0 R] >> endobj 5613 0 obj << /Limits [(API-nfs-proc-rename) (API-nfs-proc-rename)] /Names [(API-nfs-proc-rename) 4260 0 R] >> endobj 5614 0 obj << /Limits [(API-nfs-proc-rename-done) (API-nfs-proc-rename-done)] /Names [(API-nfs-proc-rename-done) 4263 0 R] >> endobj 5615 0 obj << /Limits [(API-nfs-proc-rename-setup) (API-nfs-proc-rename-setup)] /Names [(API-nfs-proc-rename-setup) 4266 0 R] >> endobj 5616 0 obj << /Limits [(API-nfs-proc-write) (API-nfs-proc-write)] /Names [(API-nfs-proc-write) 4269 0 R] >> endobj 5617 0 obj << /Limits [(API-nfs-proc-write-done) (API-nfs-proc-write-done)] /Names [(API-nfs-proc-write-done) 4272 0 R] >> endobj 5618 0 obj << /Limits [(API-nfs-proc-write-setup) (API-nfs-proc-write-setup)] /Names [(API-nfs-proc-write-setup) 4275 0 R] >> endobj 5619 0 obj << /Limits [(API-nfsd-close) (API-nfsd-close)] /Names [(API-nfsd-close) 4278 0 R] >> endobj 5620 0 obj << /Limits [(API-nfsd-commit) (API-nfsd-commit)] /Names [(API-nfsd-commit) 4281 0 R] >> endobj 5621 0 obj << /Limits [(API-nfsd-create) (API-nfsd-create)] /Names [(API-nfsd-create) 4284 0 R] >> endobj 5622 0 obj << /Limits [(API-nfsd-createv3) (API-nfsd-createv3)] /Names [(API-nfsd-createv3) 4287 0 R] >> endobj 5623 0 obj << /Limits [(API-nfsd-dispatch) (API-nfsd-dispatch)] /Names [(API-nfsd-dispatch) 4290 0 R] >> endobj 5624 0 obj << /Limits [(API-nfsd-lookup) (API-nfsd-lookup)] /Names [(API-nfsd-lookup) 4293 0 R] >> endobj 5625 0 obj << /Limits [(API-nfsd-open) (API-nfsd-open)] /Names [(API-nfsd-open) 4450 0 R] >> endobj 5626 0 obj << /Limits [(API-nfsd-proc-commit) (API-nfsd-proc-commit)] /Names [(API-nfsd-proc-commit) 4453 0 R] >> endobj 5627 0 obj << /Limits [(API-nfsd-proc-create) (API-nfsd-proc-create)] /Names [(API-nfsd-proc-create) 4456 0 R] >> endobj 5628 0 obj << /Limits [(API-nfsd-proc-lookup) (API-nfsd-proc-lookup)] /Names [(API-nfsd-proc-lookup) 4459 0 R] >> endobj 5629 0 obj << /Limits [(API-nfsd-proc-read) (API-nfsd-proc-read)] /Names [(API-nfsd-proc-read) 4462 0 R] >> endobj 5630 0 obj << /Limits [(API-nfsd-proc-remove) (API-nfsd-proc-remove)] /Names [(API-nfsd-proc-remove) 4465 0 R] >> endobj 5631 0 obj << /Limits [(API-nfsd-proc-rename) (API-nfsd-proc-rename)] /Names [(API-nfsd-proc-rename) 4468 0 R] >> endobj 5632 0 obj << /Limits [(API-nfsd-proc-write) (API-nfsd-proc-write)] /Names [(API-nfsd-proc-write) 4471 0 R] >> endobj 5633 0 obj << /Limits [(API-nfsd-read) (API-nfsd-read)] /Names [(API-nfsd-read) 4474 0 R] >> endobj 5634 0 obj << /Limits [(API-nfsd-rename) (API-nfsd-rename)] /Names [(API-nfsd-rename) 4477 0 R] >> endobj 5635 0 obj << /Limits [(API-nfsd-unlink) (API-nfsd-unlink)] /Names [(API-nfsd-unlink) 4480 0 R] >> endobj 5636 0 obj << /Limits [(API-nfsd-write) (API-nfsd-write)] /Names [(API-nfsd-write) 4483 0 R] >> endobj 5637 0 obj << /Limits [(API-nfsderror) (API-nfsderror)] /Names [(API-nfsderror) 4152 0 R] >> endobj 5638 0 obj << /Limits [(API-ngroups) (API-ngroups)] /Names [(API-ngroups) 3824 0 R] >> endobj 5639 0 obj << /Limits [(API-ns-egid) (API-ns-egid)] /Names [(API-ns-egid) 252 0 R] >> endobj 5640 0 obj << /Limits [(API-ns-euid) (API-ns-euid)] /Names [(API-ns-euid) 255 0 R] >> endobj 5641 0 obj << /Limits [(API-ns-gid) (API-ns-gid)] /Names [(API-ns-gid) 258 0 R] >> endobj 5642 0 obj << /Limits [(API-ns-pgrp) (API-ns-pgrp)] /Names [(API-ns-pgrp) 261 0 R] >> endobj 5643 0 obj << /Limits [(API-ns-pid) (API-ns-pid)] /Names [(API-ns-pid) 264 0 R] >> endobj 5644 0 obj << /Limits [(API-ns-ppid) (API-ns-ppid)] /Names [(API-ns-ppid) 267 0 R] >> endobj 5645 0 obj << /Limits [(API-ns-sid) (API-ns-sid)] /Names [(API-ns-sid) 270 0 R] >> endobj 5646 0 obj << /Limits [(API-ns-tid) (API-ns-tid)] /Names [(API-ns-tid) 273 0 R] >> endobj 5647 0 obj << /Limits [(API-ns-uid) (API-ns-uid)] /Names [(API-ns-uid) 276 0 R] >> endobj 5648 0 obj << /Limits [(API-nsecs-to-string) (API-nsecs-to-string)] /Names [(API-nsecs-to-string) 1281 0 R] >> endobj 5649 0 obj << /Limits [(API-ntohl) (API-ntohl)] /Names [(API-ntohl) 1883 0 R] >> endobj 5650 0 obj << /Limits [(API-ntohll) (API-ntohll)] /Names [(API-ntohll) 1886 0 R] >> endobj 5651 0 obj << /Limits [(API-ntohs) (API-ntohs)] /Names [(API-ntohs) 1889 0 R] >> endobj 5652 0 obj << /Limits [(API-pages-to-string) (API-pages-to-string)] /Names [(API-pages-to-string) 1200 0 R] >> endobj 5653 0 obj << /Limits [(API-panic) (API-panic)] /Names [(API-panic) 3634 0 R] >> endobj 5654 0 obj << /Limits [(API-pexecname) (API-pexecname)] /Names [(API-pexecname) 279 0 R] >> endobj 5655 0 obj << /Limits [(API-pgrp) (API-pgrp)] /Names [(API-pgrp) 282 0 R] >> endobj 5656 0 obj << /Limits [(API-pid) (API-pid)] /Names [(API-pid) 285 0 R] >> endobj 5657 0 obj << /Limits [(API-pid2execname) (API-pid2execname)] /Names [(API-pid2execname) 288 0 R] >> endobj 5658 0 obj << /Limits [(API-pid2task) (API-pid2task)] /Names [(API-pid2task) 291 0 R] >> endobj 5659 0 obj << /Limits [(API-pn) (API-pn)] /Names [(API-pn) 294 0 R] >> endobj 5660 0 obj << /Limits [(API-pnlabel) (API-pnlabel)] /Names [(API-pnlabel) 297 0 R] >> endobj 5661 0 obj << /Limits [(API-pointer-arg) (API-pointer-arg)] /Names [(API-pointer-arg) 300 0 R] >> endobj 5662 0 obj << /Limits [(API-pp) (API-pp)] /Names [(API-pp) 303 0 R] >> endobj 5663 0 obj << /Limits [(API-ppfunc) (API-ppfunc)] /Names [(API-ppfunc) 306 0 R] >> endobj 5664 0 obj << /Limits [(API-ppid) (API-ppid)] /Names [(API-ppid) 309 0 R] >> endobj 5665 0 obj << /Limits [(API-print-backtrace) (API-print-backtrace)] /Names [(API-print-backtrace) 312 0 R] >> endobj 5666 0 obj << /Limits [(API-print-backtrace-fileline) (API-print-backtrace-fileline)] /Names [(API-print-backtrace-fileline) 315 0 R] >> endobj 5667 0 obj << /Limits [(API-print-regs) (API-print-regs)] /Names [(API-print-regs) 318 0 R] >> endobj 5668 0 obj << /Limits [(API-print-stack) (API-print-stack)] /Names [(API-print-stack) 487 0 R] >> endobj 5669 0 obj << /Limits [(API-print-syms) (API-print-syms)] /Names [(API-print-syms) 490 0 R] >> endobj 5670 0 obj << /Limits [(API-print-ubacktrace) (API-print-ubacktrace)] /Names [(API-print-ubacktrace) 493 0 R] >> endobj 5671 0 obj << /Limits [(API-print-ubacktrace-brief) (API-print-ubacktrace-brief)] /Names [(API-print-ubacktrace-brief) 496 0 R] >> endobj 5672 0 obj << /Limits [(API-print-ubacktrace-fileline) (API-print-ubacktrace-fileline)] /Names [(API-print-ubacktrace-fileline) 499 0 R] >> endobj 5673 0 obj << /Limits [(API-print-ustack) (API-print-ustack)] /Names [(API-print-ustack) 502 0 R] >> endobj 5674 0 obj << /Limits [(API-print-usyms) (API-print-usyms)] /Names [(API-print-usyms) 505 0 R] >> endobj 5675 0 obj << /Limits [(API-printk) (API-printk)] /Names [(API-printk) 3171 0 R] >> endobj 5676 0 obj << /Limits [(API-probe-type) (API-probe-type)] /Names [(API-probe-type) 508 0 R] >> endobj 5677 0 obj << /Limits [(API-probefunc) (API-probefunc)] /Names [(API-probefunc) 511 0 R] >> endobj 5678 0 obj << /Limits [(API-probemod) (API-probemod)] /Names [(API-probemod) 514 0 R] >> endobj 5679 0 obj << /Limits [(API-proc-mem-data) (API-proc-mem-data)] /Names [(API-proc-mem-data) 1203 0 R] >> endobj 5680 0 obj << /Limits [(API-proc-mem-rss) (API-proc-mem-rss)] /Names [(API-proc-mem-rss) 1206 0 R] >> endobj 5681 0 obj << /Limits [(API-proc-mem-shr) (API-proc-mem-shr)] /Names [(API-proc-mem-shr) 1209 0 R] >> endobj 5682 0 obj << /Limits [(API-proc-mem-size) (API-proc-mem-size)] /Names [(API-proc-mem-size) 1212 0 R] >> endobj 5683 0 obj << /Limits [(API-proc-mem-string) (API-proc-mem-string)] /Names [(API-proc-mem-string) 1215 0 R] >> endobj 5684 0 obj << /Limits [(API-proc-mem-txt) (API-proc-mem-txt)] /Names [(API-proc-mem-txt) 1218 0 R] >> endobj 5685 0 obj << /Limits [(API-pstrace) (API-pstrace)] /Names [(API-pstrace) 517 0 R] >> endobj 5686 0 obj << /Limits [(API-qs-done) (API-qs-done)] /Names [(API-qs-done) 3180 0 R] >> endobj 5687 0 obj << /Limits [(API-qs-run) (API-qs-run)] /Names [(API-qs-run) 3183 0 R] >> endobj 5688 0 obj << /Limits [(API-qs-wait) (API-qs-wait)] /Names [(API-qs-wait) 3186 0 R] >> endobj 5689 0 obj << /Limits [(API-qsq-blocked) (API-qsq-blocked)] /Names [(API-qsq-blocked) 3189 0 R] >> endobj 5690 0 obj << /Limits [(API-qsq-print) (API-qsq-print)] /Names [(API-qsq-print) 3192 0 R] >> endobj 5691 0 obj << /Limits [(API-qsq-service-time) (API-qsq-service-time)] /Names [(API-qsq-service-time) 3195 0 R] >> endobj 5692 0 obj << /Limits [(API-qsq-start) (API-qsq-start)] /Names [(API-qsq-start) 3198 0 R] >> endobj 5693 0 obj << /Limits [(API-qsq-throughput) (API-qsq-throughput)] /Names [(API-qsq-throughput) 3201 0 R] >> endobj 5694 0 obj << /Limits [(API-qsq-utilization) (API-qsq-utilization)] /Names [(API-qsq-utilization) 3204 0 R] >> endobj 5695 0 obj << /Limits [(API-qsq-wait-queue-length) (API-qsq-wait-queue-length)] /Names [(API-qsq-wait-queue-length) 3207 0 R] >> endobj 5696 0 obj << /Limits [(API-qsq-wait-time) (API-qsq-wait-time)] /Names [(API-qsq-wait-time) 3210 0 R] >> endobj 5697 0 obj << /Limits [(API-raise) (API-raise)] /Names [(API-raise) 3637 0 R] >> endobj 5698 0 obj << /Limits [(API-randint) (API-randint)] /Names [(API-randint) 3216 0 R] >> endobj 5699 0 obj << /Limits [(API-read-stopwatch-ms) (API-read-stopwatch-ms)] /Names [(API-read-stopwatch-ms) 1149 0 R] >> endobj 5700 0 obj << /Limits [(API-read-stopwatch-ns) (API-read-stopwatch-ns)] /Names [(API-read-stopwatch-ns) 1152 0 R] >> endobj 5701 0 obj << /Limits [(API-read-stopwatch-s) (API-read-stopwatch-s)] /Names [(API-read-stopwatch-s) 1155 0 R] >> endobj 5702 0 obj << /Limits [(API-read-stopwatch-us) (API-read-stopwatch-us)] /Names [(API-read-stopwatch-us) 1158 0 R] >> endobj 5703 0 obj << /Limits [(API-real-mount) (API-real-mount)] /Names [(API-real-mount) 2972 0 R] >> endobj 5704 0 obj << /Limits [(API-register) (API-register)] /Names [(API-register) 520 0 R] >> endobj 5705 0 obj << /Limits [(API-registers-valid) (API-registers-valid)] /Names [(API-registers-valid) 523 0 R] >> endobj 5706 0 obj << /Limits [(API-regparm) (API-regparm)] /Names [(API-regparm) 526 0 R] >> endobj 5707 0 obj << /Limits [(API-remote-id) (API-remote-id)] /Names [(API-remote-id) 529 0 R] >> endobj 5708 0 obj << /Limits [(API-remote-uri) (API-remote-uri)] /Names [(API-remote-uri) 532 0 R] >> endobj 5709 0 obj << /Limits [(API-return-str) (API-return-str)] /Names [(API-return-str) 2918 0 R] >> endobj 5710 0 obj << /Limits [(API-returnstr) (API-returnstr)] /Names [(API-returnstr) 2921 0 R] >> endobj 5711 0 obj << /Limits [(API-returnval) (API-returnval)] /Names [(API-returnval) 2924 0 R] >> endobj 5712 0 obj << /Limits [(API-reverse-path-walk) (API-reverse-path-walk)] /Names [(API-reverse-path-walk) 2975 0 R] >> endobj 5713 0 obj << /Limits [(API-rlimit-from-str) (API-rlimit-from-str)] /Names [(API-rlimit-from-str) 2930 0 R] >> endobj 5714 0 obj << /Limits [(API-s32-arg) (API-s32-arg)] /Names [(API-s32-arg) 535 0 R] >> endobj 5715 0 obj << /Limits [(API-s64-arg) (API-s64-arg)] /Names [(API-s64-arg) 538 0 R] >> endobj 5716 0 obj << /Limits [(API-sa-flags-str) (API-sa-flags-str)] /Names [(API-sa-flags-str) 2822 0 R] >> endobj 5717 0 obj << /Limits [(API-sa-handler-str) (API-sa-handler-str)] /Names [(API-sa-handler-str) 2825 0 R] >> endobj 5718 0 obj << /Limits [(API-scheduler-balance) (API-scheduler-balance)] /Names [(API-scheduler-balance) 1471 0 R] >> endobj 5719 0 obj << /Limits [(API-scheduler-cpu-off) (API-scheduler-cpu-off)] /Names [(API-scheduler-cpu-off) 1474 0 R] >> endobj 5720 0 obj << /Limits [(API-scheduler-cpu-on) (API-scheduler-cpu-on)] /Names [(API-scheduler-cpu-on) 1477 0 R] >> endobj 5721 0 obj << /Limits [(API-scheduler-ctxswitch) (API-scheduler-ctxswitch)] /Names [(API-scheduler-ctxswitch) 1480 0 R] >> endobj 5722 0 obj << /Limits [(API-scheduler-kthread-stop) (API-scheduler-kthread-stop)] /Names [(API-scheduler-kthread-stop) 1483 0 R] >> endobj 5723 0 obj << /Limits [(API-scheduler-kthread-stop-return) (API-scheduler-kthread-stop-return)] /Names [(API-scheduler-kthread-stop-return) 1486 0 R] >> endobj 5724 0 obj << /Limits [(API-scheduler-migrate) (API-scheduler-migrate)] /Names [(API-scheduler-migrate) 1489 0 R] >> endobj 5725 0 obj << /Limits [(API-scheduler-process-exit) (API-scheduler-process-exit)] /Names [(API-scheduler-process-exit) 1492 0 R] >> endobj 5726 0 obj << /Limits [(API-scheduler-process-fork) (API-scheduler-process-fork)] /Names [(API-scheduler-process-fork) 1495 0 R] >> endobj 5727 0 obj << /Limits [(API-scheduler-process-free) (API-scheduler-process-free)] /Names [(API-scheduler-process-free) 1498 0 R] >> endobj 5728 0 obj << /Limits [(API-scheduler-process-wait) (API-scheduler-process-wait)] /Names [(API-scheduler-process-wait) 1501 0 R] >> endobj 5729 0 obj << /Limits [(API-scheduler-signal-send) (API-scheduler-signal-send)] /Names [(API-scheduler-signal-send) 1504 0 R] >> endobj 5730 0 obj << /Limits [(API-scheduler-tick) (API-scheduler-tick)] /Names [(API-scheduler-tick) 1507 0 R] >> endobj 5731 0 obj << /Limits [(API-scheduler-wait-task) (API-scheduler-wait-task)] /Names [(API-scheduler-wait-task) 1510 0 R] >> endobj 5732 0 obj << /Limits [(API-scheduler-wakeup) (API-scheduler-wakeup)] /Names [(API-scheduler-wakeup) 1513 0 R] >> endobj 5733 0 obj << /Limits [(API-scheduler-wakeup-new) (API-scheduler-wakeup-new)] /Names [(API-scheduler-wakeup-new) 1516 0 R] >> endobj 5734 0 obj << /Limits [(API-scsi-iocompleted) (API-scsi-iocompleted)] /Names [(API-scsi-iocompleted) 1579 0 R] >> endobj 5735 0 obj << /Limits [(API-scsi-iodispatching) (API-scsi-iodispatching)] /Names [(API-scsi-iodispatching) 1582 0 R] >> endobj 5736 0 obj << /Limits [(API-scsi-iodone) (API-scsi-iodone)] /Names [(API-scsi-iodone) 1585 0 R] >> endobj 5737 0 obj << /Limits [(API-scsi-ioentry) (API-scsi-ioentry)] /Names [(API-scsi-ioentry) 1588 0 R] >> endobj 5738 0 obj << /Limits [(API-scsi-ioexecute) (API-scsi-ioexecute)] /Names [(API-scsi-ioexecute) 1591 0 R] >> endobj 5739 0 obj << /Limits [(API-scsi-set-state) (API-scsi-set-state)] /Names [(API-scsi-set-state) 1594 0 R] >> endobj 5740 0 obj << /Limits [(API-set-int-arg) (API-set-int-arg)] /Names [(API-set-int-arg) 541 0 R] >> endobj 5741 0 obj << /Limits [(API-set-kernel-char) (API-set-kernel-char)] /Names [(API-set-kernel-char) 3583 0 R] >> endobj 5742 0 obj << /Limits [(API-set-kernel-int) (API-set-kernel-int)] /Names [(API-set-kernel-int) 3586 0 R] >> endobj 5743 0 obj << /Limits [(API-set-kernel-long) (API-set-kernel-long)] /Names [(API-set-kernel-long) 3589 0 R] >> endobj 5744 0 obj << /Limits [(API-set-kernel-pointer) (API-set-kernel-pointer)] /Names [(API-set-kernel-pointer) 3592 0 R] >> endobj 5745 0 obj << /Limits [(API-set-kernel-short) (API-set-kernel-short)] /Names [(API-set-kernel-short) 3595 0 R] >> endobj 5746 0 obj << /Limits [(API-set-kernel-string) (API-set-kernel-string)] /Names [(API-set-kernel-string) 3598 0 R] >> endobj 5747 0 obj << /Limits [(API-set-kernel-string-n) (API-set-kernel-string-n)] /Names [(API-set-kernel-string-n) 3601 0 R] >> endobj 5748 0 obj << /Limits [(API-set-long-arg) (API-set-long-arg)] /Names [(API-set-long-arg) 544 0 R] >> endobj 5749 0 obj << /Limits [(API-set-longlong-arg) (API-set-longlong-arg)] /Names [(API-set-longlong-arg) 547 0 R] >> endobj 5750 0 obj << /Limits [(API-set-pointer-arg) (API-set-pointer-arg)] /Names [(API-set-pointer-arg) 550 0 R] >> endobj 5751 0 obj << /Limits [(API-set-s32-arg) (API-set-s32-arg)] /Names [(API-set-s32-arg) 553 0 R] >> endobj 5752 0 obj << /Limits [(API-set-s64-arg) (API-set-s64-arg)] /Names [(API-set-s64-arg) 556 0 R] >> endobj 5753 0 obj << /Limits [(API-set-u32-arg) (API-set-u32-arg)] /Names [(API-set-u32-arg) 559 0 R] >> endobj 5754 0 obj << /Limits [(API-set-u64-arg) (API-set-u64-arg)] /Names [(API-set-u64-arg) 562 0 R] >> endobj 5755 0 obj << /Limits [(API-set-uint-arg) (API-set-uint-arg)] /Names [(API-set-uint-arg) 565 0 R] >> endobj 5756 0 obj << /Limits [(API-set-ulong-arg) (API-set-ulong-arg)] /Names [(API-set-ulong-arg) 568 0 R] >> endobj 5757 0 obj << /Limits [(API-set-ulonglong-arg) (API-set-ulonglong-arg)] /Names [(API-set-ulonglong-arg) 571 0 R] >> endobj 5758 0 obj << /Limits [(API-set-user-char) (API-set-user-char)] /Names [(API-set-user-char) 3604 0 R] >> endobj 5759 0 obj << /Limits [(API-set-user-int) (API-set-user-int)] /Names [(API-set-user-int) 3607 0 R] >> endobj 5760 0 obj << /Limits [(API-set-user-long) (API-set-user-long)] /Names [(API-set-user-long) 3610 0 R] >> endobj 5761 0 obj << /Limits [(API-set-user-pointer) (API-set-user-pointer)] /Names [(API-set-user-pointer) 3613 0 R] >> endobj 5762 0 obj << /Limits [(API-set-user-short) (API-set-user-short)] /Names [(API-set-user-short) 3616 0 R] >> endobj 5763 0 obj << /Limits [(API-set-user-string) (API-set-user-string)] /Names [(API-set-user-string) 3619 0 R] >> endobj 5764 0 obj << /Limits [(API-set-user-string-arg) (API-set-user-string-arg)] /Names [(API-set-user-string-arg) 3622 0 R] >> endobj 5765 0 obj << /Limits [(API-set-user-string-n) (API-set-user-string-n)] /Names [(API-set-user-string-n) 3625 0 R] >> endobj 5766 0 obj << /Limits [(API-sid) (API-sid)] /Names [(API-sid) 574 0 R] >> endobj 5767 0 obj << /Limits [(API-signal-check-ignored) (API-signal-check-ignored)] /Names [(API-signal-check-ignored) 2834 0 R] >> endobj 5768 0 obj << /Limits [(API-signal-check-ignored-return) (API-signal-check-ignored-return)] /Names [(API-signal-check-ignored-return) 2837 0 R] >> endobj 5769 0 obj << /Limits [(API-signal-checkperm) (API-signal-checkperm)] /Names [(API-signal-checkperm) 2840 0 R] >> endobj 5770 0 obj << /Limits [(API-signal-checkperm-return) (API-signal-checkperm-return)] /Names [(API-signal-checkperm-return) 2843 0 R] >> endobj 5771 0 obj << /Limits [(API-signal-do-action) (API-signal-do-action)] /Names [(API-signal-do-action) 2846 0 R] >> endobj 5772 0 obj << /Limits [(API-signal-do-action-return) (API-signal-do-action-return)] /Names [(API-signal-do-action-return) 2849 0 R] >> endobj 5773 0 obj << /Limits [(API-signal-flush) (API-signal-flush)] /Names [(API-signal-flush) 2852 0 R] >> endobj 5774 0 obj << /Limits [(API-signal-force-segv) (API-signal-force-segv)] /Names [(API-signal-force-segv) 2855 0 R] >> endobj 5775 0 obj << /Limits [(API-signal-force-segv-return) (API-signal-force-segv-return)] /Names [(API-signal-force-segv-return) 2858 0 R] >> endobj 5776 0 obj << /Limits [(API-signal-handle) (API-signal-handle)] /Names [(API-signal-handle) 2861 0 R] >> endobj 5777 0 obj << /Limits [(API-signal-handle-return) (API-signal-handle-return)] /Names [(API-signal-handle-return) 2864 0 R] >> endobj 5778 0 obj << /Limits [(API-signal-pending) (API-signal-pending)] /Names [(API-signal-pending) 2867 0 R] >> endobj 5779 0 obj << /Limits [(API-signal-pending-return) (API-signal-pending-return)] /Names [(API-signal-pending-return) 2870 0 R] >> endobj 5780 0 obj << /Limits [(API-signal-procmask) (API-signal-procmask)] /Names [(API-signal-procmask) 2873 0 R] >> endobj 5781 0 obj << /Limits [(API-signal-procmask-return) (API-signal-procmask-return)] /Names [(API-signal-procmask-return) 2876 0 R] >> endobj 5782 0 obj << /Limits [(API-signal-send) (API-signal-send)] /Names [(API-signal-send) 2879 0 R] >> endobj 5783 0 obj << /Limits [(API-signal-send-return) (API-signal-send-return)] /Names [(API-signal-send-return) 2882 0 R] >> endobj 5784 0 obj << /Limits [(API-signal-send-sig-queue) (API-signal-send-sig-queue)] /Names [(API-signal-send-sig-queue) 2885 0 R] >> endobj 5785 0 obj << /Limits [(API-signal-send-sig-queue-return) (API-signal-send-sig-queue-return)] /Names [(API-signal-send-sig-queue-return) 2888 0 R] >> endobj 5786 0 obj << /Limits [(API-signal-str) (API-signal-str)] /Names [(API-signal-str) 2828 0 R] >> endobj 5787 0 obj << /Limits [(API-signal-sys-tgkill) (API-signal-sys-tgkill)] /Names [(API-signal-sys-tgkill) 2891 0 R] >> endobj 5788 0 obj << /Limits [(API-signal-sys-tgkill-return) (API-signal-sys-tgkill-return)] /Names [(API-signal-sys-tgkill-return) 2894 0 R] >> endobj 5789 0 obj << /Limits [(API-signal-sys-tkill) (API-signal-sys-tkill)] /Names [(API-signal-sys-tkill) 2897 0 R] >> endobj 5790 0 obj << /Limits [(API-signal-syskill) (API-signal-syskill)] /Names [(API-signal-syskill) 2900 0 R] >> endobj 5791 0 obj << /Limits [(API-signal-syskill-return) (API-signal-syskill-return)] /Names [(API-signal-syskill-return) 2903 0 R] >> endobj 5792 0 obj << /Limits [(API-signal-systkill-return) (API-signal-systkill-return)] /Names [(API-signal-systkill-return) 2906 0 R] >> endobj 5793 0 obj << /Limits [(API-signal-wakeup) (API-signal-wakeup)] /Names [(API-signal-wakeup) 2909 0 R] >> endobj 5794 0 obj << /Limits [(API-sigset-mask-str) (API-sigset-mask-str)] /Names [(API-sigset-mask-str) 2831 0 R] >> endobj 5795 0 obj << /Limits [(API-sock-fam-num2str) (API-sock-fam-num2str)] /Names [(API-sock-fam-num2str) 2247 0 R] >> endobj 5796 0 obj << /Limits [(API-sock-fam-str2num) (API-sock-fam-str2num)] /Names [(API-sock-fam-str2num) 2250 0 R] >> endobj 5797 0 obj << /Limits [(API-sock-prot-num2str) (API-sock-prot-num2str)] /Names [(API-sock-prot-num2str) 2253 0 R] >> endobj 5798 0 obj << /Limits [(API-sock-prot-str2num) (API-sock-prot-str2num)] /Names [(API-sock-prot-str2num) 2256 0 R] >> endobj 5799 0 obj << /Limits [(API-sock-state-num2str) (API-sock-state-num2str)] /Names [(API-sock-state-num2str) 2259 0 R] >> endobj 5800 0 obj << /Limits [(API-sock-state-str2num) (API-sock-state-str2num)] /Names [(API-sock-state-str2num) 2262 0 R] >> endobj 5801 0 obj << /Limits [(API-socket-aio-read) (API-socket-aio-read)] /Names [(API-socket-aio-read) 2265 0 R] >> endobj 5802 0 obj << /Limits [(API-socket-aio-read-return) (API-socket-aio-read-return)] /Names [(API-socket-aio-read-return) 2268 0 R] >> endobj 5803 0 obj << /Limits [(API-socket-aio-write) (API-socket-aio-write)] /Names [(API-socket-aio-write) 2271 0 R] >> endobj 5804 0 obj << /Limits [(API-socket-aio-write-return) (API-socket-aio-write-return)] /Names [(API-socket-aio-write-return) 2274 0 R] >> endobj 5805 0 obj << /Limits [(API-socket-close) (API-socket-close)] /Names [(API-socket-close) 2277 0 R] >> endobj 5806 0 obj << /Limits [(API-socket-close-return) (API-socket-close-return)] /Names [(API-socket-close-return) 2280 0 R] >> endobj 5807 0 obj << /Limits [(API-socket-create) (API-socket-create)] /Names [(API-socket-create) 2283 0 R] >> endobj 5808 0 obj << /Limits [(API-socket-create-return) (API-socket-create-return)] /Names [(API-socket-create-return) 2286 0 R] >> endobj 5809 0 obj << /Limits [(API-socket-read-iter) (API-socket-read-iter)] /Names [(API-socket-read-iter) 2289 0 R] >> endobj 5810 0 obj << /Limits [(API-socket-read-iter-return) (API-socket-read-iter-return)] /Names [(API-socket-read-iter-return) 2292 0 R] >> endobj 5811 0 obj << /Limits [(API-socket-readv) (API-socket-readv)] /Names [(API-socket-readv) 2295 0 R] >> endobj 5812 0 obj << /Limits [(API-socket-readv-return) (API-socket-readv-return)] /Names [(API-socket-readv-return) 2298 0 R] >> endobj 5813 0 obj << /Limits [(API-socket-receive) (API-socket-receive)] /Names [(API-socket-receive) 2301 0 R] >> endobj 5814 0 obj << /Limits [(API-socket-recvmsg) (API-socket-recvmsg)] /Names [(API-socket-recvmsg) 2304 0 R] >> endobj 5815 0 obj << /Limits [(API-socket-recvmsg-return) (API-socket-recvmsg-return)] /Names [(API-socket-recvmsg-return) 2307 0 R] >> endobj 5816 0 obj << /Limits [(API-socket-send) (API-socket-send)] /Names [(API-socket-send) 2310 0 R] >> endobj 5817 0 obj << /Limits [(API-socket-sendmsg) (API-socket-sendmsg)] /Names [(API-socket-sendmsg) 2313 0 R] >> endobj 5818 0 obj << /Limits [(API-socket-sendmsg-return) (API-socket-sendmsg-return)] /Names [(API-socket-sendmsg-return) 2316 0 R] >> endobj 5819 0 obj << /Limits [(API-socket-write-iter) (API-socket-write-iter)] /Names [(API-socket-write-iter) 2319 0 R] >> endobj 5820 0 obj << /Limits [(API-socket-write-iter-return) (API-socket-write-iter-return)] /Names [(API-socket-write-iter-return) 2322 0 R] >> endobj 5821 0 obj << /Limits [(API-socket-writev) (API-socket-writev)] /Names [(API-socket-writev) 2325 0 R] >> endobj 5822 0 obj << /Limits [(API-socket-writev-return) (API-socket-writev-return)] /Names [(API-socket-writev-return) 2494 0 R] >> endobj 5823 0 obj << /Limits [(API-softirq-entry) (API-softirq-entry)] /Names [(API-softirq-entry) 1847 0 R] >> endobj 5824 0 obj << /Limits [(API-softirq-exit) (API-softirq-exit)] /Names [(API-softirq-exit) 1850 0 R] >> endobj 5825 0 obj << /Limits [(API-speculate) (API-speculate)] /Names [(API-speculate) 4495 0 R] >> endobj 5826 0 obj << /Limits [(API-speculation) (API-speculation)] /Names [(API-speculation) 4498 0 R] >> endobj 5827 0 obj << /Limits [(API-sprint-backtrace) (API-sprint-backtrace)] /Names [(API-sprint-backtrace) 577 0 R] >> endobj 5828 0 obj << /Limits [(API-sprint-loadavg) (API-sprint-loadavg)] /Names [(API-sprint-loadavg) 2617 0 R] >> endobj 5829 0 obj << /Limits [(API-sprint-stack) (API-sprint-stack)] /Names [(API-sprint-stack) 580 0 R] >> endobj 5830 0 obj << /Limits [(API-sprint-syms) (API-sprint-syms)] /Names [(API-sprint-syms) 583 0 R] >> endobj 5831 0 obj << /Limits [(API-sprint-ubacktrace) (API-sprint-ubacktrace)] /Names [(API-sprint-ubacktrace) 586 0 R] >> endobj 5832 0 obj << /Limits [(API-sprint-ustack) (API-sprint-ustack)] /Names [(API-sprint-ustack) 589 0 R] >> endobj 5833 0 obj << /Limits [(API-sprint-usyms) (API-sprint-usyms)] /Names [(API-sprint-usyms) 592 0 R] >> endobj 5834 0 obj << /Limits [(API-stack) (API-stack)] /Names [(API-stack) 595 0 R] >> endobj 5835 0 obj << /Limits [(API-stack-size) (API-stack-size)] /Names [(API-stack-size) 598 0 R] >> endobj 5836 0 obj << /Limits [(API-stack-unused) (API-stack-unused)] /Names [(API-stack-unused) 601 0 R] >> endobj 5837 0 obj << /Limits [(API-stack-used) (API-stack-used)] /Names [(API-stack-used) 604 0 R] >> endobj 5838 0 obj << /Limits [(API-stap-cache-add-mod) (API-stap-cache-add-mod)] /Names [(API-stap-cache-add-mod) 3902 0 R] >> endobj 5839 0 obj << /Limits [(API-stap-cache-add-nss) (API-stap-cache-add-nss)] /Names [(API-stap-cache-add-nss) 3905 0 R] >> endobj 5840 0 obj << /Limits [(API-stap-cache-add-src) (API-stap-cache-add-src)] /Names [(API-stap-cache-add-src) 3908 0 R] >> endobj 5841 0 obj << /Limits [(API-stap-cache-clean) (API-stap-cache-clean)] /Names [(API-stap-cache-clean) 3911 0 R] >> endobj 5842 0 obj << /Limits [(API-stap-cache-get) (API-stap-cache-get)] /Names [(API-stap-cache-get) 3914 0 R] >> endobj 5843 0 obj << /Limits [(API-stap-pass0) (API-stap-pass0)] /Names [(API-stap-pass0) 3917 0 R] >> endobj 5844 0 obj << /Limits [(API-stap-pass0-end) (API-stap-pass0-end)] /Names [(API-stap-pass0-end) 3920 0 R] >> endobj 5845 0 obj << /Limits [(API-stap-pass1-end) (API-stap-pass1-end)] /Names [(API-stap-pass1-end) 3923 0 R] >> endobj 5846 0 obj << /Limits [(API-stap-pass1a) (API-stap-pass1a)] /Names [(API-stap-pass1a) 3926 0 R] >> endobj 5847 0 obj << /Limits [(API-stap-pass1b) (API-stap-pass1b)] /Names [(API-stap-pass1b) 3929 0 R] >> endobj 5848 0 obj << /Limits [(API-stap-pass2) (API-stap-pass2)] /Names [(API-stap-pass2) 3932 0 R] >> endobj 5849 0 obj << /Limits [(API-stap-pass2-end) (API-stap-pass2-end)] /Names [(API-stap-pass2-end) 3935 0 R] >> endobj 5850 0 obj << /Limits [(API-stap-pass3) (API-stap-pass3)] /Names [(API-stap-pass3) 3938 0 R] >> endobj 5851 0 obj << /Limits [(API-stap-pass3-end) (API-stap-pass3-end)] /Names [(API-stap-pass3-end) 3941 0 R] >> endobj 5852 0 obj << /Limits [(API-stap-pass4) (API-stap-pass4)] /Names [(API-stap-pass4) 3944 0 R] >> endobj 5853 0 obj << /Limits [(API-stap-pass4-end) (API-stap-pass4-end)] /Names [(API-stap-pass4-end) 3947 0 R] >> endobj 5854 0 obj << /Limits [(API-stap-pass5) (API-stap-pass5)] /Names [(API-stap-pass5) 3950 0 R] >> endobj 5855 0 obj << /Limits [(API-stap-pass5-end) (API-stap-pass5-end)] /Names [(API-stap-pass5-end) 3953 0 R] >> endobj 5856 0 obj << /Limits [(API-stap-pass6) (API-stap-pass6)] /Names [(API-stap-pass6) 3956 0 R] >> endobj 5857 0 obj << /Limits [(API-stap-pass6-end) (API-stap-pass6-end)] /Names [(API-stap-pass6-end) 3959 0 R] >> endobj 5858 0 obj << /Limits [(API-stap-system) (API-stap-system)] /Names [(API-stap-system) 3962 0 R] >> endobj 5859 0 obj << /Limits [(API-stap-system-return) (API-stap-system-return)] /Names [(API-stap-system-return) 3965 0 R] >> endobj 5860 0 obj << /Limits [(API-stap-system-spawn) (API-stap-system-spawn)] /Names [(API-stap-system-spawn) 4134 0 R] >> endobj 5861 0 obj << /Limits [(API-stapio-receive-control-message) (API-stapio-receive-control-message)] /Names [(API-stapio-receive-control-message) 4137 0 R] >> endobj 5862 0 obj << /Limits [(API-staprun-insert-module) (API-staprun-insert-module)] /Names [(API-staprun-insert-module) 4140 0 R] >> endobj 5863 0 obj << /Limits [(API-staprun-remove-module) (API-staprun-remove-module)] /Names [(API-staprun-remove-module) 4143 0 R] >> endobj 5864 0 obj << /Limits [(API-staprun-send-control-message) (API-staprun-send-control-message)] /Names [(API-staprun-send-control-message) 4146 0 R] >> endobj 5865 0 obj << /Limits [(API-start-stopwatch) (API-start-stopwatch)] /Names [(API-start-stopwatch) 1161 0 R] >> endobj 5866 0 obj << /Limits [(API-stop-stopwatch) (API-stop-stopwatch)] /Names [(API-stop-stopwatch) 1164 0 R] >> endobj 5867 0 obj << /Limits [(API-stp-pid) (API-stp-pid)] /Names [(API-stp-pid) 607 0 R] >> endobj 5868 0 obj << /Limits [(API-str-replace) (API-str-replace)] /Names [(API-str-replace) 3827 0 R] >> endobj 5869 0 obj << /Limits [(API-string-quoted) (API-string-quoted)] /Names [(API-string-quoted) 3830 0 R] >> endobj 5870 0 obj << /Limits [(API-string-to-fp) (API-string-to-fp)] /Names [(API-string-to-fp) 4588 0 R] >> endobj 5871 0 obj << /Limits [(API-stringat) (API-stringat)] /Names [(API-stringat) 3833 0 R] >> endobj 5872 0 obj << /Limits [(API-strlen) (API-strlen)] /Names [(API-strlen) 3836 0 R] >> endobj 5873 0 obj << /Limits [(API-strpos) (API-strpos)] /Names [(API-strpos) 3839 0 R] >> endobj 5874 0 obj << /Limits [(API-strtol) (API-strtol)] /Names [(API-strtol) 3842 0 R] >> endobj 5875 0 obj << /Limits [(API-substr) (API-substr)] /Names [(API-substr) 3845 0 R] >> endobj 5876 0 obj << /Limits [(API-sunrpc-clnt-bind-new-program) (API-sunrpc-clnt-bind-new-program)] /Names [(API-sunrpc-clnt-bind-new-program) 1973 0 R] >> endobj 5877 0 obj << /Limits [(API-sunrpc-clnt-call-async) (API-sunrpc-clnt-call-async)] /Names [(API-sunrpc-clnt-call-async) 1976 0 R] >> endobj 5878 0 obj << /Limits [(API-sunrpc-clnt-call-sync) (API-sunrpc-clnt-call-sync)] /Names [(API-sunrpc-clnt-call-sync) 1979 0 R] >> endobj 5879 0 obj << /Limits [(API-sunrpc-clnt-clone-client) (API-sunrpc-clnt-clone-client)] /Names [(API-sunrpc-clnt-clone-client) 1982 0 R] >> endobj 5880 0 obj << /Limits [(API-sunrpc-clnt-create-client) (API-sunrpc-clnt-create-client)] /Names [(API-sunrpc-clnt-create-client) 1985 0 R] >> endobj 5881 0 obj << /Limits [(API-sunrpc-clnt-restart-call) (API-sunrpc-clnt-restart-call)] /Names [(API-sunrpc-clnt-restart-call) 1988 0 R] >> endobj 5882 0 obj << /Limits [(API-sunrpc-clnt-shutdown-client) (API-sunrpc-clnt-shutdown-client)] /Names [(API-sunrpc-clnt-shutdown-client) 1991 0 R] >> endobj 5883 0 obj << /Limits [(API-sunrpc-sched-delay) (API-sunrpc-sched-delay)] /Names [(API-sunrpc-sched-delay) 1994 0 R] >> endobj 5884 0 obj << /Limits [(API-sunrpc-sched-execute) (API-sunrpc-sched-execute)] /Names [(API-sunrpc-sched-execute) 1997 0 R] >> endobj 5885 0 obj << /Limits [(API-sunrpc-sched-new-task) (API-sunrpc-sched-new-task)] /Names [(API-sunrpc-sched-new-task) 2166 0 R] >> endobj 5886 0 obj << /Limits [(API-sunrpc-sched-release-task) (API-sunrpc-sched-release-task)] /Names [(API-sunrpc-sched-release-task) 2169 0 R] >> endobj 5887 0 obj << /Limits [(API-sunrpc-svc-create) (API-sunrpc-svc-create)] /Names [(API-sunrpc-svc-create) 2172 0 R] >> endobj 5888 0 obj << /Limits [(API-sunrpc-svc-destroy) (API-sunrpc-svc-destroy)] /Names [(API-sunrpc-svc-destroy) 2175 0 R] >> endobj 5889 0 obj << /Limits [(API-sunrpc-svc-drop) (API-sunrpc-svc-drop)] /Names [(API-sunrpc-svc-drop) 2178 0 R] >> endobj 5890 0 obj << /Limits [(API-sunrpc-svc-process) (API-sunrpc-svc-process)] /Names [(API-sunrpc-svc-process) 2181 0 R] >> endobj 5891 0 obj << /Limits [(API-sunrpc-svc-recv) (API-sunrpc-svc-recv)] /Names [(API-sunrpc-svc-recv) 2184 0 R] >> endobj 5892 0 obj << /Limits [(API-sunrpc-svc-register) (API-sunrpc-svc-register)] /Names [(API-sunrpc-svc-register) 2187 0 R] >> endobj 5893 0 obj << /Limits [(API-sunrpc-svc-send) (API-sunrpc-svc-send)] /Names [(API-sunrpc-svc-send) 2190 0 R] >> endobj 5894 0 obj << /Limits [(API-switch-file) (API-switch-file)] /Names [(API-switch-file) 4546 0 R] >> endobj 5895 0 obj << /Limits [(API-symdata) (API-symdata)] /Names [(API-symdata) 610 0 R] >> endobj 5896 0 obj << /Limits [(API-symfile) (API-symfile)] /Names [(API-symfile) 613 0 R] >> endobj 5897 0 obj << /Limits [(API-symfileline) (API-symfileline)] /Names [(API-symfileline) 616 0 R] >> endobj 5898 0 obj << /Limits [(API-symline) (API-symline)] /Names [(API-symline) 619 0 R] >> endobj 5899 0 obj << /Limits [(API-symname) (API-symname)] /Names [(API-symname) 622 0 R] >> endobj 5900 0 obj << /Limits [(API-syscall-any) (API-syscall-any)] /Names [(API-syscall-any) 4594 0 R] >> endobj 5901 0 obj << /Limits [(API-syscall-any-return) (API-syscall-any-return)] /Names [(API-syscall-any-return) 4597 0 R] >> endobj 5902 0 obj << /Limits [(API-system) (API-system)] /Names [(API-system) 1185 0 R] >> endobj 5903 0 obj << /Limits [(API-target) (API-target)] /Names [(API-target) 625 0 R] >> endobj 5904 0 obj << /Limits [(API-target-set-pid) (API-target-set-pid)] /Names [(API-target-set-pid) 2620 0 R] >> endobj 5905 0 obj << /Limits [(API-target-set-report) (API-target-set-report)] /Names [(API-target-set-report) 2623 0 R] >> endobj 5906 0 obj << /Limits [(API-task-ancestry) (API-task-ancestry)] /Names [(API-task-ancestry) 628 0 R] >> endobj 5907 0 obj << /Limits [(API-task-backtrace) (API-task-backtrace)] /Names [(API-task-backtrace) 631 0 R] >> endobj 5908 0 obj << /Limits [(API-task-cpu) (API-task-cpu)] /Names [(API-task-cpu) 634 0 R] >> endobj 5909 0 obj << /Limits [(API-task-current) (API-task-current)] /Names [(API-task-current) 637 0 R] >> endobj 5910 0 obj << /Limits [(API-task-cwd-path) (API-task-cwd-path)] /Names [(API-task-cwd-path) 640 0 R] >> endobj 5911 0 obj << /Limits [(API-task-dentry-path) (API-task-dentry-path)] /Names [(API-task-dentry-path) 2978 0 R] >> endobj 5912 0 obj << /Limits [(API-task-egid) (API-task-egid)] /Names [(API-task-egid) 643 0 R] >> endobj 5913 0 obj << /Limits [(API-task-euid) (API-task-euid)] /Names [(API-task-euid) 646 0 R] >> endobj 5914 0 obj << /Limits [(API-task-exe-file) (API-task-exe-file)] /Names [(API-task-exe-file) 815 0 R] >> endobj 5915 0 obj << /Limits [(API-task-execname) (API-task-execname)] /Names [(API-task-execname) 818 0 R] >> endobj 5916 0 obj << /Limits [(API-task-fd-lookup) (API-task-fd-lookup)] /Names [(API-task-fd-lookup) 821 0 R] >> endobj 5917 0 obj << /Limits [(API-task-gid) (API-task-gid)] /Names [(API-task-gid) 824 0 R] >> endobj 5918 0 obj << /Limits [(API-task-max-file-handles) (API-task-max-file-handles)] /Names [(API-task-max-file-handles) 827 0 R] >> endobj 5919 0 obj << /Limits [(API-task-nice) (API-task-nice)] /Names [(API-task-nice) 830 0 R] >> endobj 5920 0 obj << /Limits [(API-task-ns-egid) (API-task-ns-egid)] /Names [(API-task-ns-egid) 833 0 R] >> endobj 5921 0 obj << /Limits [(API-task-ns-euid) (API-task-ns-euid)] /Names [(API-task-ns-euid) 836 0 R] >> endobj 5922 0 obj << /Limits [(API-task-ns-gid) (API-task-ns-gid)] /Names [(API-task-ns-gid) 839 0 R] >> endobj 5923 0 obj << /Limits [(API-task-ns-pid) (API-task-ns-pid)] /Names [(API-task-ns-pid) 842 0 R] >> endobj 5924 0 obj << /Limits [(API-task-ns-tid) (API-task-ns-tid)] /Names [(API-task-ns-tid) 845 0 R] >> endobj 5925 0 obj << /Limits [(API-task-ns-uid) (API-task-ns-uid)] /Names [(API-task-ns-uid) 848 0 R] >> endobj 5926 0 obj << /Limits [(API-task-open-file-handles) (API-task-open-file-handles)] /Names [(API-task-open-file-handles) 851 0 R] >> endobj 5927 0 obj << /Limits [(API-task-parent) (API-task-parent)] /Names [(API-task-parent) 854 0 R] >> endobj 5928 0 obj << /Limits [(API-task-pid) (API-task-pid)] /Names [(API-task-pid) 857 0 R] >> endobj 5929 0 obj << /Limits [(API-task-prio) (API-task-prio)] /Names [(API-task-prio) 860 0 R] >> endobj 5930 0 obj << /Limits [(API-task-start-time) (API-task-start-time)] /Names [(API-task-start-time) 1284 0 R] >> endobj 5931 0 obj << /Limits [(API-task-state) (API-task-state)] /Names [(API-task-state) 863 0 R] >> endobj 5932 0 obj << /Limits [(API-task-stime) (API-task-stime)] /Names [(API-task-stime) 1287 0 R] >> endobj 5933 0 obj << /Limits [(API-task-tid) (API-task-tid)] /Names [(API-task-tid) 866 0 R] >> endobj 5934 0 obj << /Limits [(API-task-time-string) (API-task-time-string)] /Names [(API-task-time-string) 1290 0 R] >> endobj 5935 0 obj << /Limits [(API-task-time-string-tid) (API-task-time-string-tid)] /Names [(API-task-time-string-tid) 1293 0 R] >> endobj 5936 0 obj << /Limits [(API-task-uid) (API-task-uid)] /Names [(API-task-uid) 869 0 R] >> endobj 5937 0 obj << /Limits [(API-task-utime) (API-task-utime)] /Names [(API-task-utime) 1296 0 R] >> endobj 5938 0 obj << /Limits [(API-tcp-disconnect) (API-tcp-disconnect)] /Names [(API-tcp-disconnect) 2193 0 R] >> endobj 5939 0 obj << /Limits [(API-tcp-disconnect-return) (API-tcp-disconnect-return)] /Names [(API-tcp-disconnect-return) 2196 0 R] >> endobj 5940 0 obj << /Limits [(API-tcp-receive) (API-tcp-receive)] /Names [(API-tcp-receive) 2199 0 R] >> endobj 5941 0 obj << /Limits [(API-tcp-recvmsg) (API-tcp-recvmsg)] /Names [(API-tcp-recvmsg) 2202 0 R] >> endobj 5942 0 obj << /Limits [(API-tcp-recvmsg-return) (API-tcp-recvmsg-return)] /Names [(API-tcp-recvmsg-return) 2205 0 R] >> endobj 5943 0 obj << /Limits [(API-tcp-sendmsg) (API-tcp-sendmsg)] /Names [(API-tcp-sendmsg) 2208 0 R] >> endobj 5944 0 obj << /Limits [(API-tcp-sendmsg-return) (API-tcp-sendmsg-return)] /Names [(API-tcp-sendmsg-return) 2211 0 R] >> endobj 5945 0 obj << /Limits [(API-tcp-setsockopt) (API-tcp-setsockopt)] /Names [(API-tcp-setsockopt) 2214 0 R] >> endobj 5946 0 obj << /Limits [(API-tcp-setsockopt-return) (API-tcp-setsockopt-return)] /Names [(API-tcp-setsockopt-return) 2217 0 R] >> endobj 5947 0 obj << /Limits [(API-tcpmib-ActiveOpens) (API-tcpmib-ActiveOpens)] /Names [(API-tcpmib-ActiveOpens) 2584 0 R] >> endobj 5948 0 obj << /Limits [(API-tcpmib-AttemptFails) (API-tcpmib-AttemptFails)] /Names [(API-tcpmib-AttemptFails) 2587 0 R] >> endobj 5949 0 obj << /Limits [(API-tcpmib-CurrEstab) (API-tcpmib-CurrEstab)] /Names [(API-tcpmib-CurrEstab) 2590 0 R] >> endobj 5950 0 obj << /Limits [(API-tcpmib-EstabResets) (API-tcpmib-EstabResets)] /Names [(API-tcpmib-EstabResets) 2593 0 R] >> endobj 5951 0 obj << /Limits [(API-tcpmib-InSegs) (API-tcpmib-InSegs)] /Names [(API-tcpmib-InSegs) 2596 0 R] >> endobj 5952 0 obj << /Limits [(API-tcpmib-OutRsts) (API-tcpmib-OutRsts)] /Names [(API-tcpmib-OutRsts) 2599 0 R] >> endobj 5953 0 obj << /Limits [(API-tcpmib-OutSegs) (API-tcpmib-OutSegs)] /Names [(API-tcpmib-OutSegs) 2602 0 R] >> endobj 5954 0 obj << /Limits [(API-tcpmib-PassiveOpens) (API-tcpmib-PassiveOpens)] /Names [(API-tcpmib-PassiveOpens) 2605 0 R] >> endobj 5955 0 obj << /Limits [(API-tcpmib-RetransSegs) (API-tcpmib-RetransSegs)] /Names [(API-tcpmib-RetransSegs) 2608 0 R] >> endobj 5956 0 obj << /Limits [(API-tcpmib-filter-key) (API-tcpmib-filter-key)] /Names [(API-tcpmib-filter-key) 2521 0 R] >> endobj 5957 0 obj << /Limits [(API-tcpmib-get-state) (API-tcpmib-get-state)] /Names [(API-tcpmib-get-state) 2524 0 R] >> endobj 5958 0 obj << /Limits [(API-tcpmib-local-addr) (API-tcpmib-local-addr)] /Names [(API-tcpmib-local-addr) 2527 0 R] >> endobj 5959 0 obj << /Limits [(API-tcpmib-local-port) (API-tcpmib-local-port)] /Names [(API-tcpmib-local-port) 2530 0 R] >> endobj 5960 0 obj << /Limits [(API-tcpmib-remote-addr) (API-tcpmib-remote-addr)] /Names [(API-tcpmib-remote-addr) 2533 0 R] >> endobj 5961 0 obj << /Limits [(API-tcpmib-remote-port) (API-tcpmib-remote-port)] /Names [(API-tcpmib-remote-port) 2536 0 R] >> endobj 5962 0 obj << /Limits [(API-text-str) (API-text-str)] /Names [(API-text-str) 3848 0 R] >> endobj 5963 0 obj << /Limits [(API-text-strn) (API-text-strn)] /Names [(API-text-strn) 3851 0 R] >> endobj 5964 0 obj << /Limits [(API-thread-indent) (API-thread-indent)] /Names [(API-thread-indent) 3893 0 R] >> endobj 5965 0 obj << /Limits [(API-thread-indent-depth) (API-thread-indent-depth)] /Names [(API-thread-indent-depth) 3896 0 R] >> endobj 5966 0 obj << /Limits [(API-tid) (API-tid)] /Names [(API-tid) 872 0 R] >> endobj 5967 0 obj << /Limits [(API-tokenize) (API-tokenize)] /Names [(API-tokenize) 3854 0 R] >> endobj 5968 0 obj << /Limits [(API-tty-init) (API-tty-init)] /Names [(API-tty-init) 1600 0 R] >> endobj 5969 0 obj << /Limits [(API-tty-ioctl) (API-tty-ioctl)] /Names [(API-tty-ioctl) 1603 0 R] >> endobj 5970 0 obj << /Limits [(API-tty-open) (API-tty-open)] /Names [(API-tty-open) 1606 0 R] >> endobj 5971 0 obj << /Limits [(API-tty-poll) (API-tty-poll)] /Names [(API-tty-poll) 1609 0 R] >> endobj 5972 0 obj << /Limits [(API-tty-read) (API-tty-read)] /Names [(API-tty-read) 1612 0 R] >> endobj 5973 0 obj << /Limits [(API-tty-receive) (API-tty-receive)] /Names [(API-tty-receive) 1615 0 R] >> endobj 5974 0 obj << /Limits [(API-tty-register) (API-tty-register)] /Names [(API-tty-register) 1618 0 R] >> endobj 5975 0 obj << /Limits [(API-tty-release) (API-tty-release)] /Names [(API-tty-release) 1621 0 R] >> endobj 5976 0 obj << /Limits [(API-tty-resize) (API-tty-resize)] /Names [(API-tty-resize) 1624 0 R] >> endobj 5977 0 obj << /Limits [(API-tty-unregister) (API-tty-unregister)] /Names [(API-tty-unregister) 1627 0 R] >> endobj 5978 0 obj << /Limits [(API-tty-write) (API-tty-write)] /Names [(API-tty-write) 1630 0 R] >> endobj 5979 0 obj << /Limits [(API-tz-ctime) (API-tz-ctime)] /Names [(API-tz-ctime) 1173 0 R] >> endobj 5980 0 obj << /Limits [(API-tz-gmtoff) (API-tz-gmtoff)] /Names [(API-tz-gmtoff) 1176 0 R] >> endobj 5981 0 obj << /Limits [(API-tz-name) (API-tz-name)] /Names [(API-tz-name) 1179 0 R] >> endobj 5982 0 obj << /Limits [(API-u-register) (API-u-register)] /Names [(API-u-register) 881 0 R] >> endobj 5983 0 obj << /Limits [(API-u32-arg) (API-u32-arg)] /Names [(API-u32-arg) 875 0 R] >> endobj 5984 0 obj << /Limits [(API-u64-arg) (API-u64-arg)] /Names [(API-u64-arg) 878 0 R] >> endobj 5985 0 obj << /Limits [(API-uaddr) (API-uaddr)] /Names [(API-uaddr) 884 0 R] >> endobj 5986 0 obj << /Limits [(API-ubacktrace) (API-ubacktrace)] /Names [(API-ubacktrace) 887 0 R] >> endobj 5987 0 obj << /Limits [(API-ucallers) (API-ucallers)] /Names [(API-ucallers) 890 0 R] >> endobj 5988 0 obj << /Limits [(API-udelay) (API-udelay)] /Names [(API-udelay) 3806 0 R] >> endobj 5989 0 obj << /Limits [(API-udp-disconnect) (API-udp-disconnect)] /Names [(API-udp-disconnect) 2220 0 R] >> endobj 5990 0 obj << /Limits [(API-udp-disconnect-return) (API-udp-disconnect-return)] /Names [(API-udp-disconnect-return) 2223 0 R] >> endobj 5991 0 obj << /Limits [(API-udp-recvmsg) (API-udp-recvmsg)] /Names [(API-udp-recvmsg) 2226 0 R] >> endobj 5992 0 obj << /Limits [(API-udp-recvmsg-return) (API-udp-recvmsg-return)] /Names [(API-udp-recvmsg-return) 2229 0 R] >> endobj 5993 0 obj << /Limits [(API-udp-sendmsg) (API-udp-sendmsg)] /Names [(API-udp-sendmsg) 2232 0 R] >> endobj 5994 0 obj << /Limits [(API-udp-sendmsg-return) (API-udp-sendmsg-return)] /Names [(API-udp-sendmsg-return) 2235 0 R] >> endobj 5995 0 obj << /Limits [(API-uid) (API-uid)] /Names [(API-uid) 893 0 R] >> endobj 5996 0 obj << /Limits [(API-uint-arg) (API-uint-arg)] /Names [(API-uint-arg) 896 0 R] >> endobj 5997 0 obj << /Limits [(API-ulong-arg) (API-ulong-arg)] /Names [(API-ulong-arg) 899 0 R] >> endobj 5998 0 obj << /Limits [(API-ulonglong-arg) (API-ulonglong-arg)] /Names [(API-ulonglong-arg) 902 0 R] >> endobj 5999 0 obj << /Limits [(API-umodname) (API-umodname)] /Names [(API-umodname) 905 0 R] >> endobj 6000 0 obj << /Limits [(API-usecs-to-string) (API-usecs-to-string)] /Names [(API-usecs-to-string) 1299 0 R] >> endobj 6001 0 obj << /Limits [(API-user-buffer-quoted) (API-user-buffer-quoted)] /Names [(API-user-buffer-quoted) 3270 0 R] >> endobj 6002 0 obj << /Limits [(API-user-buffer-quoted-error) (API-user-buffer-quoted-error)] /Names [(API-user-buffer-quoted-error) 3273 0 R] >> endobj 6003 0 obj << /Limits [(API-user-char) (API-user-char)] /Names [(API-user-char) 3276 0 R] >> endobj 6004 0 obj << /Limits [(API-user-char-error) (API-user-char-error)] /Names [(API-user-char-error) 3279 0 R] >> endobj 6005 0 obj << /Limits [(API-user-char-warn) (API-user-char-warn)] /Names [(API-user-char-warn) 3282 0 R] >> endobj 6006 0 obj << /Limits [(API-user-int) (API-user-int)] /Names [(API-user-int) 3285 0 R] >> endobj 6007 0 obj << /Limits [(API-user-int-error) (API-user-int-error)] /Names [(API-user-int-error) 3478 0 R] >> endobj 6008 0 obj << /Limits [(API-user-int-warn) (API-user-int-warn)] /Names [(API-user-int-warn) 3481 0 R] >> endobj 6009 0 obj << /Limits [(API-user-int16) (API-user-int16)] /Names [(API-user-int16) 3288 0 R] >> endobj 6010 0 obj << /Limits [(API-user-int16-error) (API-user-int16-error)] /Names [(API-user-int16-error) 3291 0 R] >> endobj 6011 0 obj << /Limits [(API-user-int32) (API-user-int32)] /Names [(API-user-int32) 3294 0 R] >> endobj 6012 0 obj << /Limits [(API-user-int32-error) (API-user-int32-error)] /Names [(API-user-int32-error) 3297 0 R] >> endobj 6013 0 obj << /Limits [(API-user-int64) (API-user-int64)] /Names [(API-user-int64) 3300 0 R] >> endobj 6014 0 obj << /Limits [(API-user-int64-error) (API-user-int64-error)] /Names [(API-user-int64-error) 3303 0 R] >> endobj 6015 0 obj << /Limits [(API-user-int8) (API-user-int8)] /Names [(API-user-int8) 3306 0 R] >> endobj 6016 0 obj << /Limits [(API-user-int8-error) (API-user-int8-error)] /Names [(API-user-int8-error) 3309 0 R] >> endobj 6017 0 obj << /Limits [(API-user-long) (API-user-long)] /Names [(API-user-long) 3484 0 R] >> endobj 6018 0 obj << /Limits [(API-user-long-error) (API-user-long-error)] /Names [(API-user-long-error) 3487 0 R] >> endobj 6019 0 obj << /Limits [(API-user-long-warn) (API-user-long-warn)] /Names [(API-user-long-warn) 3490 0 R] >> endobj 6020 0 obj << /Limits [(API-user-mode) (API-user-mode)] /Names [(API-user-mode) 908 0 R] >> endobj 6021 0 obj << /Limits [(API-user-short) (API-user-short)] /Names [(API-user-short) 3493 0 R] >> endobj 6022 0 obj << /Limits [(API-user-short-error) (API-user-short-error)] /Names [(API-user-short-error) 3496 0 R] >> endobj 6023 0 obj << /Limits [(API-user-short-warn) (API-user-short-warn)] /Names [(API-user-short-warn) 3499 0 R] >> endobj 6024 0 obj << /Limits [(API-user-string) (API-user-string)] /Names [(API-user-string) 3502 0 R] >> endobj 6025 0 obj << /Limits [(API-user-string-n) (API-user-string-n)] /Names [(API-user-string-n) 3505 0 R] >> endobj 6026 0 obj << /Limits [(API-user-string-n-nofault) (API-user-string-n-nofault)] /Names [(API-user-string-n-nofault) 3508 0 R] >> endobj 6027 0 obj << /Limits [(API-user-string-n-quoted) (API-user-string-n-quoted)] /Names [(API-user-string-n-quoted) 3511 0 R] >> endobj 6028 0 obj << /Limits [(API-user-string-n-warn) (API-user-string-n-warn)] /Names [(API-user-string-n-warn) 3514 0 R] >> endobj 6029 0 obj << /Limits [(API-user-string-nofault) (API-user-string-nofault)] /Names [(API-user-string-nofault) 3517 0 R] >> endobj 6030 0 obj << /Limits [(API-user-string-quoted) (API-user-string-quoted)] /Names [(API-user-string-quoted) 3520 0 R] >> endobj 6031 0 obj << /Limits [(API-user-string-quoted-utf16) (API-user-string-quoted-utf16)] /Names [(API-user-string-quoted-utf16) 3523 0 R] >> endobj 6032 0 obj << /Limits [(API-user-string-quoted-utf32) (API-user-string-quoted-utf32)] /Names [(API-user-string-quoted-utf32) 3526 0 R] >> endobj 6033 0 obj << /Limits [(API-user-string-utf16) (API-user-string-utf16)] /Names [(API-user-string-utf16) 3529 0 R] >> endobj 6034 0 obj << /Limits [(API-user-string-utf32) (API-user-string-utf32)] /Names [(API-user-string-utf32) 3532 0 R] >> endobj 6035 0 obj << /Limits [(API-user-string-warn) (API-user-string-warn)] /Names [(API-user-string-warn) 3535 0 R] >> endobj 6036 0 obj << /Limits [(API-user-uint16) (API-user-uint16)] /Names [(API-user-uint16) 3538 0 R] >> endobj 6037 0 obj << /Limits [(API-user-uint16-error) (API-user-uint16-error)] /Names [(API-user-uint16-error) 3541 0 R] >> endobj 6038 0 obj << /Limits [(API-user-uint32) (API-user-uint32)] /Names [(API-user-uint32) 3544 0 R] >> endobj 6039 0 obj << /Limits [(API-user-uint32-error) (API-user-uint32-error)] /Names [(API-user-uint32-error) 3547 0 R] >> endobj 6040 0 obj << /Limits [(API-user-uint64) (API-user-uint64)] /Names [(API-user-uint64) 3550 0 R] >> endobj 6041 0 obj << /Limits [(API-user-uint64-error) (API-user-uint64-error)] /Names [(API-user-uint64-error) 3553 0 R] >> endobj 6042 0 obj << /Limits [(API-user-uint8) (API-user-uint8)] /Names [(API-user-uint8) 3556 0 R] >> endobj 6043 0 obj << /Limits [(API-user-uint8-error) (API-user-uint8-error)] /Names [(API-user-uint8-error) 3559 0 R] >> endobj 6044 0 obj << /Limits [(API-user-ulong) (API-user-ulong)] /Names [(API-user-ulong) 3562 0 R] >> endobj 6045 0 obj << /Limits [(API-user-ulong-error) (API-user-ulong-error)] /Names [(API-user-ulong-error) 3565 0 R] >> endobj 6046 0 obj << /Limits [(API-user-ulong-warn) (API-user-ulong-warn)] /Names [(API-user-ulong-warn) 3568 0 R] >> endobj 6047 0 obj << /Limits [(API-user-ushort) (API-user-ushort)] /Names [(API-user-ushort) 3571 0 R] >> endobj 6048 0 obj << /Limits [(API-user-ushort-error) (API-user-ushort-error)] /Names [(API-user-ushort-error) 3574 0 R] >> endobj 6049 0 obj << /Limits [(API-user-ushort-warn) (API-user-ushort-warn)] /Names [(API-user-ushort-warn) 3577 0 R] >> endobj 6050 0 obj << /Limits [(API-usrdev2kerndev) (API-usrdev2kerndev)] /Names [(API-usrdev2kerndev) 2945 0 R] >> endobj 6051 0 obj << /Limits [(API-ustack) (API-ustack)] /Names [(API-ustack) 911 0 R] >> endobj 6052 0 obj << /Limits [(API-usymdata) (API-usymdata)] /Names [(API-usymdata) 914 0 R] >> endobj 6053 0 obj << /Limits [(API-usymfile) (API-usymfile)] /Names [(API-usymfile) 917 0 R] >> endobj 6054 0 obj << /Limits [(API-usymfileline) (API-usymfileline)] /Names [(API-usymfileline) 920 0 R] >> endobj 6055 0 obj << /Limits [(API-usymline) (API-usymline)] /Names [(API-usymline) 923 0 R] >> endobj 6056 0 obj << /Limits [(API-usymname) (API-usymname)] /Names [(API-usymname) 926 0 R] >> endobj 6057 0 obj << /Limits [(API-vm-brk) (API-vm-brk)] /Names [(API-vm-brk) 1224 0 R] >> endobj 6058 0 obj << /Limits [(API-vm-fault-contains) (API-vm-fault-contains)] /Names [(API-vm-fault-contains) 1221 0 R] >> endobj 6059 0 obj << /Limits [(API-vm-kfree) (API-vm-kfree)] /Names [(API-vm-kfree) 1227 0 R] >> endobj 6060 0 obj << /Limits [(API-vm-kmalloc) (API-vm-kmalloc)] /Names [(API-vm-kmalloc) 1230 0 R] >> endobj 6061 0 obj << /Limits [(API-vm-kmalloc-node) (API-vm-kmalloc-node)] /Names [(API-vm-kmalloc-node) 1233 0 R] >> endobj 6062 0 obj << /Limits [(API-vm-kmem-cache-alloc) (API-vm-kmem-cache-alloc)] /Names [(API-vm-kmem-cache-alloc) 1236 0 R] >> endobj 6063 0 obj << /Limits [(API-vm-kmem-cache-alloc-node) (API-vm-kmem-cache-alloc-node)] /Names [(API-vm-kmem-cache-alloc-node) 1239 0 R] >> endobj 6064 0 obj << /Limits [(API-vm-kmem-cache-free) (API-vm-kmem-cache-free)] /Names [(API-vm-kmem-cache-free) 1242 0 R] >> endobj 6065 0 obj << /Limits [(API-vm-mmap) (API-vm-mmap)] /Names [(API-vm-mmap) 1245 0 R] >> endobj 6066 0 obj << /Limits [(API-vm-munmap) (API-vm-munmap)] /Names [(API-vm-munmap) 1248 0 R] >> endobj 6067 0 obj << /Limits [(API-vm-oom-kill) (API-vm-oom-kill)] /Names [(API-vm-oom-kill) 1251 0 R] >> endobj 6068 0 obj << /Limits [(API-vm-pagefault) (API-vm-pagefault)] /Names [(API-vm-pagefault) 1254 0 R] >> endobj 6069 0 obj << /Limits [(API-vm-pagefault-return) (API-vm-pagefault-return)] /Names [(API-vm-pagefault-return) 1257 0 R] >> endobj 6070 0 obj << /Limits [(API-vm-write-shared) (API-vm-write-shared)] /Names [(API-vm-write-shared) 1260 0 R] >> endobj 6071 0 obj << /Limits [(API-vm-write-shared-copy) (API-vm-write-shared-copy)] /Names [(API-vm-write-shared-copy) 1263 0 R] >> endobj 6072 0 obj << /Limits [(API-warn) (API-warn)] /Names [(API-warn) 3174 0 R] >> endobj 6073 0 obj << /Limits [(API-workqueue-create) (API-workqueue-create)] /Names [(API-workqueue-create) 1853 0 R] >> endobj 6074 0 obj << /Limits [(API-workqueue-destroy) (API-workqueue-destroy)] /Names [(API-workqueue-destroy) 1856 0 R] >> endobj 6075 0 obj << /Limits [(API-workqueue-execute) (API-workqueue-execute)] /Names [(API-workqueue-execute) 1859 0 R] >> endobj 6076 0 obj << /Limits [(API-workqueue-insert) (API-workqueue-insert)] /Names [(API-workqueue-insert) 1862 0 R] >> endobj 6077 0 obj << /Limits [(TapsetRef) (TapsetRef)] /Names [(TapsetRef) 4604 0 R] >> endobj 6078 0 obj << /Limits [(ansi.stp) (ansi.stp)] /Names [(ansi.stp) 3857 0 R] >> endobj 6079 0 obj << /Limits [(context_stp) (context_stp)] /Names [(context_stp) 171 0 R] >> endobj 6080 0 obj << /Limits [(conversions-guru.stp) (conversions-guru.stp)] /Names [(conversions-guru.stp) 3580 0 R] >> endobj 6081 0 obj << /Limits [(conversions.stp) (conversions.stp)] /Names [(conversions.stp) 3219 0 R] >> endobj 6082 0 obj << /Limits [(ctime.stp) (ctime.stp)] /Names [(ctime.stp) 1167 0 R] >> endobj 6083 0 obj << /Limits [(dentry.stp) (dentry.stp)] /Names [(dentry.stp) 2948 0 R] >> endobj 6084 0 obj << /Limits [(dev.stp) (dev.stp)] /Names [(dev.stp) 2933 0 R] >> endobj 6085 0 obj << /Limits [(errno.stp) (errno.stp)] /Names [(errno.stp) 2912 0 R] >> endobj 6086 0 obj << /Limits [(floatingpoint.stp) (floatingpoint.stp)] /Names [(floatingpoint.stp) 4549 0 R] >> endobj 6087 0 obj << /Limits [(guru-delay.stp) (guru-delay.stp)] /Names [(guru-delay.stp) 3628 0 R] >> endobj 6088 0 obj << /Limits [(introduction) (introduction)] /Names [(introduction) 168 0 R] >> endobj 6089 0 obj << /Limits [(iosched.stp) (iosched.stp)] /Names [(iosched.stp) 1519 0 R] >> endobj 6090 0 obj << /Limits [(irq.stp) (irq.stp)] /Names [(irq.stp) 1838 0 R] >> endobj 6091 0 obj << /Limits [(json.stp) (json.stp)] /Names [(json.stp) 4501 0 R] >> endobj 6092 0 obj << /Limits [(kprocess.stp) (kprocess.stp)] /Names [(kprocess.stp) 2611 0 R] >> endobj 6093 0 obj << /Limits [(logging.stp) (logging.stp)] /Names [(logging.stp) 2981 0 R] >> endobj 6094 0 obj << /Limits [(memory_stp) (memory_stp)] /Names [(memory_stp) 1188 0 R] >> endobj 6095 0 obj << /Limits [(networking.stp) (networking.stp)] /Names [(networking.stp) 1865 0 R] >> endobj 6096 0 obj << /Limits [(nfsd.stp) (nfsd.stp)] /Names [(nfsd.stp) 4149 0 R] >> endobj 6097 0 obj << /Limits [(queue_stats.stp) (queue_stats.stp)] /Names [(queue_stats.stp) 3177 0 R] >> endobj 6098 0 obj << /Limits [(random.stp) (random.stp)] /Names [(random.stp) 3213 0 R] >> endobj 6099 0 obj << /Limits [(rlimit.stp) (rlimit.stp)] /Names [(rlimit.stp) 2927 0 R] >> endobj 6100 0 obj << /Limits [(sched.stp) (sched.stp)] /Names [(sched.stp) 1302 0 R] >> endobj 6101 0 obj << /Limits [(scsi.stp) (scsi.stp)] /Names [(scsi.stp) 1576 0 R] >> endobj 6102 0 obj << /Limits [(signal.stp) (signal.stp)] /Names [(signal.stp) 2644 0 R] >> endobj 6103 0 obj << /Limits [(snmp.stp) (snmp.stp)] /Names [(snmp.stp) 2497 0 R] >> endobj 6104 0 obj << /Limits [(socket.stp) (socket.stp)] /Names [(socket.stp) 2238 0 R] >> endobj 6105 0 obj << /Limits [(speculation.stp) (speculation.stp)] /Names [(speculation.stp) 4486 0 R] >> endobj 6106 0 obj << /Limits [(stap_staticmarkers.stp) (stap_staticmarkers.stp)] /Names [(stap_staticmarkers.stp) 3899 0 R] >> endobj 6107 0 obj << /Limits [(string.stp) (string.stp)] /Names [(string.stp) 3809 0 R] >> endobj 6108 0 obj << /Limits [(switchfile.stp) (switchfile.stp)] /Names [(switchfile.stp) 4543 0 R] >> endobj 6109 0 obj << /Limits [(syscall_any.stp) (syscall_any.stp)] /Names [(syscall_any.stp) 4591 0 R] >> endobj 6110 0 obj << /Limits [(system.stp) (system.stp)] /Names [(system.stp) 1182 0 R] >> endobj 6111 0 obj << /Limits [(task_time_stp) (task_time_stp)] /Names [(task_time_stp) 1266 0 R] >> endobj 6112 0 obj << /Limits [(timestamp_stp) (timestamp_stp)] /Names [(timestamp_stp) 929 0 R] >> endobj 6113 0 obj << /Limits [(tty.stp) (tty.stp)] /Names [(tty.stp) 1597 0 R] >> endobj 6114 0 obj << /Limits [(API-HZ) (tty.stp)] /Kids [5364 0 R 5365 0 R 5366 0 R 5367 0 R 5368 0 R 5369 0 R 5370 0 R 5371 0 R 5372 0 R 5373 0 R 5374 0 R 5375 0 R 5376 0 R 5377 0 R 5378 0 R 5379 0 R 5380 0 R 5381 0 R 5382 0 R 5383 0 R 5384 0 R 5385 0 R 5386 0 R 5387 0 R 5388 0 R 5389 0 R 5390 0 R 5391 0 R 5392 0 R 5393 0 R 5394 0 R 5395 0 R 5396 0 R 5397 0 R 5398 0 R 5399 0 R 5400 0 R 5401 0 R 5402 0 R 5403 0 R 5404 0 R 5405 0 R 5406 0 R 5407 0 R 5408 0 R 5409 0 R 5410 0 R 5411 0 R 5412 0 R 5413 0 R 5414 0 R 5415 0 R 5416 0 R 5417 0 R 5418 0 R 5419 0 R 5420 0 R 5421 0 R 5422 0 R 5423 0 R 5424 0 R 5425 0 R 5426 0 R 5427 0 R 5428 0 R 5429 0 R 5430 0 R 5431 0 R 5432 0 R 5433 0 R 5434 0 R 5435 0 R 5436 0 R 5437 0 R 5438 0 R 5439 0 R 5440 0 R 5441 0 R 5442 0 R 5443 0 R 5444 0 R 5445 0 R 5446 0 R 5447 0 R 5448 0 R 5449 0 R 5450 0 R 5451 0 R 5452 0 R 5453 0 R 5454 0 R 5455 0 R 5456 0 R 5457 0 R 5458 0 R 5459 0 R 5460 0 R 5461 0 R 5462 0 R 5463 0 R 5464 0 R 5465 0 R 5466 0 R 5467 0 R 5468 0 R 5469 0 R 5470 0 R 5471 0 R 5472 0 R 5473 0 R 5474 0 R 5475 0 R 5476 0 R 5477 0 R 5478 0 R 5479 0 R 5480 0 R 5481 0 R 5482 0 R 5483 0 R 5484 0 R 5485 0 R 5486 0 R 5487 0 R 5488 0 R 5489 0 R 5490 0 R 5491 0 R 5492 0 R 5493 0 R 5494 0 R 5495 0 R 5496 0 R 5497 0 R 5498 0 R 5499 0 R 5500 0 R 5501 0 R 5502 0 R 5503 0 R 5504 0 R 5505 0 R 5506 0 R 5507 0 R 5508 0 R 5509 0 R 5510 0 R 5511 0 R 5512 0 R 5513 0 R 5514 0 R 5515 0 R 5516 0 R 5517 0 R 5518 0 R 5519 0 R 5520 0 R 5521 0 R 5522 0 R 5523 0 R 5524 0 R 5525 0 R 5526 0 R 5527 0 R 5528 0 R 5529 0 R 5530 0 R 5531 0 R 5532 0 R 5533 0 R 5534 0 R 5535 0 R 5536 0 R 5537 0 R 5538 0 R 5539 0 R 5540 0 R 5541 0 R 5542 0 R 5543 0 R 5544 0 R 5545 0 R 5546 0 R 5547 0 R 5548 0 R 5549 0 R 5550 0 R 5551 0 R 5552 0 R 5553 0 R 5554 0 R 5555 0 R 5556 0 R 5557 0 R 5558 0 R 5559 0 R 5560 0 R 5561 0 R 5562 0 R 5563 0 R 5564 0 R 5565 0 R 5566 0 R 5567 0 R 5568 0 R 5569 0 R 5570 0 R 5571 0 R 5572 0 R 5573 0 R 5574 0 R 5575 0 R 5576 0 R 5577 0 R 5578 0 R 5579 0 R 5580 0 R 5581 0 R 5582 0 R 5583 0 R 5584 0 R 5585 0 R 5586 0 R 5587 0 R 5588 0 R 5589 0 R 5590 0 R 5591 0 R 5592 0 R 5593 0 R 5594 0 R 5595 0 R 5596 0 R 5597 0 R 5598 0 R 5599 0 R 5600 0 R 5601 0 R 5602 0 R 5603 0 R 5604 0 R 5605 0 R 5606 0 R 5607 0 R 5608 0 R 5609 0 R 5610 0 R 5611 0 R 5612 0 R 5613 0 R 5614 0 R 5615 0 R 5616 0 R 5617 0 R 5618 0 R 5619 0 R 5620 0 R 5621 0 R 5622 0 R 5623 0 R 5624 0 R 5625 0 R 5626 0 R 5627 0 R 5628 0 R 5629 0 R 5630 0 R 5631 0 R 5632 0 R 5633 0 R 5634 0 R 5635 0 R 5636 0 R 5637 0 R 5638 0 R 5639 0 R 5640 0 R 5641 0 R 5642 0 R 5643 0 R 5644 0 R 5645 0 R 5646 0 R 5647 0 R 5648 0 R 5649 0 R 5650 0 R 5651 0 R 5652 0 R 5653 0 R 5654 0 R 5655 0 R 5656 0 R 5657 0 R 5658 0 R 5659 0 R 5660 0 R 5661 0 R 5662 0 R 5663 0 R 5664 0 R 5665 0 R 5666 0 R 5667 0 R 5668 0 R 5669 0 R 5670 0 R 5671 0 R 5672 0 R 5673 0 R 5674 0 R 5675 0 R 5676 0 R 5677 0 R 5678 0 R 5679 0 R 5680 0 R 5681 0 R 5682 0 R 5683 0 R 5684 0 R 5685 0 R 5686 0 R 5687 0 R 5688 0 R 5689 0 R 5690 0 R 5691 0 R 5692 0 R 5693 0 R 5694 0 R 5695 0 R 5696 0 R 5697 0 R 5698 0 R 5699 0 R 5700 0 R 5701 0 R 5702 0 R 5703 0 R 5704 0 R 5705 0 R 5706 0 R 5707 0 R 5708 0 R 5709 0 R 5710 0 R 5711 0 R 5712 0 R 5713 0 R 5714 0 R 5715 0 R 5716 0 R 5717 0 R 5718 0 R 5719 0 R 5720 0 R 5721 0 R 5722 0 R 5723 0 R 5724 0 R 5725 0 R 5726 0 R 5727 0 R 5728 0 R 5729 0 R 5730 0 R 5731 0 R 5732 0 R 5733 0 R 5734 0 R 5735 0 R 5736 0 R 5737 0 R 5738 0 R 5739 0 R 5740 0 R 5741 0 R 5742 0 R 5743 0 R 5744 0 R 5745 0 R 5746 0 R 5747 0 R 5748 0 R 5749 0 R 5750 0 R 5751 0 R 5752 0 R 5753 0 R 5754 0 R 5755 0 R 5756 0 R 5757 0 R 5758 0 R 5759 0 R 5760 0 R 5761 0 R 5762 0 R 5763 0 R 5764 0 R 5765 0 R 5766 0 R 5767 0 R 5768 0 R 5769 0 R 5770 0 R 5771 0 R 5772 0 R 5773 0 R 5774 0 R 5775 0 R 5776 0 R 5777 0 R 5778 0 R 5779 0 R 5780 0 R 5781 0 R 5782 0 R 5783 0 R 5784 0 R 5785 0 R 5786 0 R 5787 0 R 5788 0 R 5789 0 R 5790 0 R 5791 0 R 5792 0 R 5793 0 R 5794 0 R 5795 0 R 5796 0 R 5797 0 R 5798 0 R 5799 0 R 5800 0 R 5801 0 R 5802 0 R 5803 0 R 5804 0 R 5805 0 R 5806 0 R 5807 0 R 5808 0 R 5809 0 R 5810 0 R 5811 0 R 5812 0 R 5813 0 R 5814 0 R 5815 0 R 5816 0 R 5817 0 R 5818 0 R 5819 0 R 5820 0 R 5821 0 R 5822 0 R 5823 0 R 5824 0 R 5825 0 R 5826 0 R 5827 0 R 5828 0 R 5829 0 R 5830 0 R 5831 0 R 5832 0 R 5833 0 R 5834 0 R 5835 0 R 5836 0 R 5837 0 R 5838 0 R 5839 0 R 5840 0 R 5841 0 R 5842 0 R 5843 0 R 5844 0 R 5845 0 R 5846 0 R 5847 0 R 5848 0 R 5849 0 R 5850 0 R 5851 0 R 5852 0 R 5853 0 R 5854 0 R 5855 0 R 5856 0 R 5857 0 R 5858 0 R 5859 0 R 5860 0 R 5861 0 R 5862 0 R 5863 0 R 5864 0 R 5865 0 R 5866 0 R 5867 0 R 5868 0 R 5869 0 R 5870 0 R 5871 0 R 5872 0 R 5873 0 R 5874 0 R 5875 0 R 5876 0 R 5877 0 R 5878 0 R 5879 0 R 5880 0 R 5881 0 R 5882 0 R 5883 0 R 5884 0 R 5885 0 R 5886 0 R 5887 0 R 5888 0 R 5889 0 R 5890 0 R 5891 0 R 5892 0 R 5893 0 R 5894 0 R 5895 0 R 5896 0 R 5897 0 R 5898 0 R 5899 0 R 5900 0 R 5901 0 R 5902 0 R 5903 0 R 5904 0 R 5905 0 R 5906 0 R 5907 0 R 5908 0 R 5909 0 R 5910 0 R 5911 0 R 5912 0 R 5913 0 R 5914 0 R 5915 0 R 5916 0 R 5917 0 R 5918 0 R 5919 0 R 5920 0 R 5921 0 R 5922 0 R 5923 0 R 5924 0 R 5925 0 R 5926 0 R 5927 0 R 5928 0 R 5929 0 R 5930 0 R 5931 0 R 5932 0 R 5933 0 R 5934 0 R 5935 0 R 5936 0 R 5937 0 R 5938 0 R 5939 0 R 5940 0 R 5941 0 R 5942 0 R 5943 0 R 5944 0 R 5945 0 R 5946 0 R 5947 0 R 5948 0 R 5949 0 R 5950 0 R 5951 0 R 5952 0 R 5953 0 R 5954 0 R 5955 0 R 5956 0 R 5957 0 R 5958 0 R 5959 0 R 5960 0 R 5961 0 R 5962 0 R 5963 0 R 5964 0 R 5965 0 R 5966 0 R 5967 0 R 5968 0 R 5969 0 R 5970 0 R 5971 0 R 5972 0 R 5973 0 R 5974 0 R 5975 0 R 5976 0 R 5977 0 R 5978 0 R 5979 0 R 5980 0 R 5981 0 R 5982 0 R 5983 0 R 5984 0 R 5985 0 R 5986 0 R 5987 0 R 5988 0 R 5989 0 R 5990 0 R 5991 0 R 5992 0 R 5993 0 R 5994 0 R 5995 0 R 5996 0 R 5997 0 R 5998 0 R 5999 0 R 6000 0 R 6001 0 R 6002 0 R 6003 0 R 6004 0 R 6005 0 R 6006 0 R 6007 0 R 6008 0 R 6009 0 R 6010 0 R 6011 0 R 6012 0 R 6013 0 R 6014 0 R 6015 0 R 6016 0 R 6017 0 R 6018 0 R 6019 0 R 6020 0 R 6021 0 R 6022 0 R 6023 0 R 6024 0 R 6025 0 R 6026 0 R 6027 0 R 6028 0 R 6029 0 R 6030 0 R 6031 0 R 6032 0 R 6033 0 R 6034 0 R 6035 0 R 6036 0 R 6037 0 R 6038 0 R 6039 0 R 6040 0 R 6041 0 R 6042 0 R 6043 0 R 6044 0 R 6045 0 R 6046 0 R 6047 0 R 6048 0 R 6049 0 R 6050 0 R 6051 0 R 6052 0 R 6053 0 R 6054 0 R 6055 0 R 6056 0 R 6057 0 R 6058 0 R 6059 0 R 6060 0 R 6061 0 R 6062 0 R 6063 0 R 6064 0 R 6065 0 R 6066 0 R 6067 0 R 6068 0 R 6069 0 R 6070 0 R 6071 0 R 6072 0 R 6073 0 R 6074 0 R 6075 0 R 6076 0 R 6077 0 R 6078 0 R 6079 0 R 6080 0 R 6081 0 R 6082 0 R 6083 0 R 6084 0 R 6085 0 R 6086 0 R 6087 0 R 6088 0 R 6089 0 R 6090 0 R 6091 0 R 6092 0 R 6093 0 R 6094 0 R 6095 0 R 6096 0 R 6097 0 R 6098 0 R 6099 0 R 6100 0 R 6101 0 R 6102 0 R 6103 0 R 6104 0 R 6105 0 R 6106 0 R 6107 0 R 6108 0 R 6109 0 R 6110 0 R 6111 0 R 6112 0 R 6113 0 R] >> endobj 11 0 obj << /Type /Pages /Count 778 /Kids [9 0 R 14 0 R 324 0 R 652 0 R 980 0 R 1308 0 R 1636 0 R 2003 0 R 2331 0 R 2659 0 R 2987 0 R 3315 0 R 3643 0 R 3971 0 R 4299 0 R 4603 0 R 17 0 R 20 0 R 23 0 R 26 0 R 29 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R 53 0 R 56 0 R 59 0 R 62 0 R 65 0 R 68 0 R 71 0 R 74 0 R 77 0 R 80 0 R 83 0 R 86 0 R 89 0 R 92 0 R 95 0 R 98 0 R 101 0 R 104 0 R 107 0 R 110 0 R 113 0 R 116 0 R 119 0 R 122 0 R 125 0 R 128 0 R 131 0 R 134 0 R 137 0 R 140 0 R 143 0 R 146 0 R 149 0 R 152 0 R 155 0 R 158 0 R 161 0 R 164 0 R 167 0 R 327 0 R 330 0 R 333 0 R 336 0 R 339 0 R 342 0 R 345 0 R 348 0 R 351 0 R 354 0 R 357 0 R 360 0 R 363 0 R 366 0 R 369 0 R 372 0 R 375 0 R 378 0 R 381 0 R 384 0 R 387 0 R 390 0 R 393 0 R 396 0 R 399 0 R 402 0 R 405 0 R 408 0 R 411 0 R 414 0 R 417 0 R 420 0 R 423 0 R 426 0 R 429 0 R 432 0 R 435 0 R 438 0 R 441 0 R 444 0 R 447 0 R 450 0 R 453 0 R 456 0 R 459 0 R 462 0 R 465 0 R 468 0 R 471 0 R 474 0 R 477 0 R 480 0 R 483 0 R 486 0 R 655 0 R 658 0 R 661 0 R 664 0 R 667 0 R 670 0 R 673 0 R 676 0 R 679 0 R 682 0 R 685 0 R 688 0 R 691 0 R 694 0 R 697 0 R 700 0 R 703 0 R 706 0 R 709 0 R 712 0 R 715 0 R 718 0 R 721 0 R 724 0 R 727 0 R 730 0 R 733 0 R 736 0 R 739 0 R 742 0 R 745 0 R 748 0 R 751 0 R 754 0 R 757 0 R 760 0 R 763 0 R 766 0 R 769 0 R 772 0 R 775 0 R 778 0 R 781 0 R 784 0 R 787 0 R 790 0 R 793 0 R 796 0 R 799 0 R 802 0 R 805 0 R 808 0 R 811 0 R 814 0 R 983 0 R 986 0 R 989 0 R 992 0 R 995 0 R 998 0 R 1001 0 R 1004 0 R 1007 0 R 1010 0 R 1013 0 R 1016 0 R 1019 0 R 1022 0 R 1025 0 R 1028 0 R 1031 0 R 1034 0 R 1037 0 R 1040 0 R 1043 0 R 1046 0 R 1049 0 R 1052 0 R 1055 0 R 1058 0 R 1061 0 R 1064 0 R 1067 0 R 1070 0 R 1073 0 R 1076 0 R 1079 0 R 1082 0 R 1085 0 R 1088 0 R 1091 0 R 1094 0 R 1097 0 R 1100 0 R 1103 0 R 1106 0 R 1109 0 R 1112 0 R 1115 0 R 1118 0 R 1121 0 R 1124 0 R 1127 0 R 1130 0 R 1133 0 R 1136 0 R 1139 0 R 1142 0 R 1311 0 R 1314 0 R 1317 0 R 1320 0 R 1323 0 R 1326 0 R 1329 0 R 1332 0 R 1335 0 R 1338 0 R 1341 0 R 1344 0 R 1347 0 R 1350 0 R 1353 0 R 1356 0 R 1359 0 R 1362 0 R 1365 0 R 1368 0 R 1371 0 R 1374 0 R 1377 0 R 1380 0 R 1383 0 R 1386 0 R 1389 0 R 1392 0 R 1395 0 R 1398 0 R 1401 0 R 1404 0 R 1407 0 R 1410 0 R 1413 0 R 1416 0 R 1419 0 R 1422 0 R 1425 0 R 1428 0 R 1431 0 R 1434 0 R 1437 0 R 1440 0 R 1443 0 R 1446 0 R 1449 0 R 1452 0 R 1455 0 R 1458 0 R 1461 0 R 1464 0 R 1467 0 R 1470 0 R 1639 0 R 1642 0 R 1645 0 R 1648 0 R 1651 0 R 1654 0 R 1657 0 R 1660 0 R 1663 0 R 1666 0 R 1669 0 R 1672 0 R 1675 0 R 1678 0 R 1681 0 R 1684 0 R 1687 0 R 1690 0 R 1693 0 R 1696 0 R 1699 0 R 1702 0 R 1705 0 R 1708 0 R 1711 0 R 1714 0 R 1717 0 R 1720 0 R 1723 0 R 1726 0 R 1729 0 R 1732 0 R 1735 0 R 1738 0 R 1741 0 R 1744 0 R 1747 0 R 1750 0 R 1753 0 R 1756 0 R 1759 0 R 1762 0 R 1765 0 R 1768 0 R 1771 0 R 1774 0 R 1777 0 R 1780 0 R 1783 0 R 1786 0 R 1789 0 R 1792 0 R 1795 0 R 1798 0 R 1801 0 R 1804 0 R 1807 0 R 1810 0 R 1813 0 R 1816 0 R 1819 0 R 1822 0 R 1825 0 R 1828 0 R 1831 0 R 1834 0 R 1837 0 R 2006 0 R 2009 0 R 2012 0 R 2015 0 R 2018 0 R 2021 0 R 2024 0 R 2027 0 R 2030 0 R 2033 0 R 2036 0 R 2039 0 R 2042 0 R 2045 0 R 2048 0 R 2051 0 R 2054 0 R 2057 0 R 2060 0 R 2063 0 R 2066 0 R 2069 0 R 2072 0 R 2075 0 R 2078 0 R 2081 0 R 2084 0 R 2087 0 R 2090 0 R 2093 0 R 2096 0 R 2099 0 R 2102 0 R 2105 0 R 2108 0 R 2111 0 R 2114 0 R 2117 0 R 2120 0 R 2123 0 R 2126 0 R 2129 0 R 2132 0 R 2135 0 R 2138 0 R 2141 0 R 2144 0 R 2147 0 R 2150 0 R 2153 0 R 2156 0 R 2159 0 R 2162 0 R 2165 0 R 2334 0 R 2337 0 R 2340 0 R 2343 0 R 2346 0 R 2349 0 R 2352 0 R 2355 0 R 2358 0 R 2361 0 R 2364 0 R 2367 0 R 2370 0 R 2373 0 R 2376 0 R 2379 0 R 2382 0 R 2385 0 R 2388 0 R 2391 0 R 2394 0 R 2397 0 R 2400 0 R 2403 0 R 2406 0 R 2409 0 R 2412 0 R 2415 0 R 2418 0 R 2421 0 R 2424 0 R 2427 0 R 2430 0 R 2433 0 R 2436 0 R 2439 0 R 2442 0 R 2445 0 R 2448 0 R 2451 0 R 2454 0 R 2457 0 R 2460 0 R 2463 0 R 2466 0 R 2469 0 R 2472 0 R 2475 0 R 2478 0 R 2481 0 R 2484 0 R 2487 0 R 2490 0 R 2493 0 R 2662 0 R 2665 0 R 2668 0 R 2671 0 R 2674 0 R 2677 0 R 2680 0 R 2683 0 R 2686 0 R 2689 0 R 2692 0 R 2695 0 R 2698 0 R 2701 0 R 2704 0 R 2707 0 R 2710 0 R 2713 0 R 2716 0 R 2719 0 R 2722 0 R 2725 0 R 2728 0 R 2731 0 R 2734 0 R 2737 0 R 2740 0 R 2743 0 R 2746 0 R 2749 0 R 2752 0 R 2755 0 R 2758 0 R 2761 0 R 2764 0 R 2767 0 R 2770 0 R 2773 0 R 2776 0 R 2779 0 R 2782 0 R 2785 0 R 2788 0 R 2791 0 R 2794 0 R 2797 0 R 2800 0 R 2803 0 R 2806 0 R 2809 0 R 2812 0 R 2815 0 R 2818 0 R 2821 0 R 2990 0 R 2993 0 R 2996 0 R 2999 0 R 3002 0 R 3005 0 R 3008 0 R 3011 0 R 3014 0 R 3017 0 R 3020 0 R 3023 0 R 3026 0 R 3029 0 R 3032 0 R 3035 0 R 3038 0 R 3041 0 R 3044 0 R 3047 0 R 3050 0 R 3053 0 R 3056 0 R 3059 0 R 3062 0 R 3065 0 R 3068 0 R 3071 0 R 3074 0 R 3077 0 R 3080 0 R 3083 0 R 3086 0 R 3089 0 R 3092 0 R 3095 0 R 3098 0 R 3101 0 R 3104 0 R 3107 0 R 3110 0 R 3113 0 R 3116 0 R 3119 0 R 3122 0 R 3125 0 R 3128 0 R 3131 0 R 3134 0 R 3137 0 R 3140 0 R 3143 0 R 3146 0 R 3149 0 R 3318 0 R 3321 0 R 3324 0 R 3327 0 R 3330 0 R 3333 0 R 3336 0 R 3339 0 R 3342 0 R 3345 0 R 3348 0 R 3351 0 R 3354 0 R 3357 0 R 3360 0 R 3363 0 R 3366 0 R 3369 0 R 3372 0 R 3375 0 R 3378 0 R 3381 0 R 3384 0 R 3387 0 R 3390 0 R 3393 0 R 3396 0 R 3399 0 R 3402 0 R 3405 0 R 3408 0 R 3411 0 R 3414 0 R 3417 0 R 3420 0 R 3423 0 R 3426 0 R 3429 0 R 3432 0 R 3435 0 R 3438 0 R 3441 0 R 3444 0 R 3447 0 R 3450 0 R 3453 0 R 3456 0 R 3459 0 R 3462 0 R 3465 0 R 3468 0 R 3471 0 R 3474 0 R 3477 0 R 3646 0 R 3649 0 R 3652 0 R 3655 0 R 3658 0 R 3661 0 R 3664 0 R 3667 0 R 3670 0 R 3673 0 R 3676 0 R 3679 0 R 3682 0 R 3685 0 R 3688 0 R 3691 0 R 3694 0 R 3697 0 R 3700 0 R 3703 0 R 3706 0 R 3709 0 R 3712 0 R 3715 0 R 3718 0 R 3721 0 R 3724 0 R 3727 0 R 3730 0 R 3733 0 R 3736 0 R 3739 0 R 3742 0 R 3745 0 R 3748 0 R 3751 0 R 3754 0 R 3757 0 R 3760 0 R 3763 0 R 3766 0 R 3769 0 R 3772 0 R 3775 0 R 3778 0 R 3781 0 R 3784 0 R 3787 0 R 3790 0 R 3793 0 R 3796 0 R 3799 0 R 3802 0 R 3805 0 R 3974 0 R 3977 0 R 3980 0 R 3983 0 R 3986 0 R 3989 0 R 3992 0 R 3995 0 R 3998 0 R 4001 0 R 4004 0 R 4007 0 R 4010 0 R 4013 0 R 4016 0 R 4019 0 R 4022 0 R 4025 0 R 4028 0 R 4031 0 R 4034 0 R 4037 0 R 4040 0 R 4043 0 R 4046 0 R 4049 0 R 4052 0 R 4055 0 R 4058 0 R 4061 0 R 4064 0 R 4067 0 R 4070 0 R 4073 0 R 4076 0 R 4079 0 R 4082 0 R 4085 0 R 4088 0 R 4091 0 R 4094 0 R 4097 0 R 4100 0 R 4103 0 R 4106 0 R 4109 0 R 4112 0 R 4115 0 R 4118 0 R 4121 0 R 4124 0 R 4127 0 R 4130 0 R 4133 0 R 4302 0 R 4305 0 R 4308 0 R 4311 0 R 4314 0 R 4317 0 R 4320 0 R 4323 0 R 4326 0 R 4329 0 R 4332 0 R 4335 0 R 4338 0 R 4341 0 R 4344 0 R 4347 0 R 4350 0 R 4353 0 R 4356 0 R 4359 0 R 4362 0 R 4365 0 R 4368 0 R 4371 0 R 4374 0 R 4377 0 R 4380 0 R 4383 0 R 4386 0 R 4389 0 R 4392 0 R 4395 0 R 4398 0 R 4401 0 R 4404 0 R 4407 0 R 4410 0 R 4413 0 R 4416 0 R 4419 0 R 4422 0 R 4425 0 R 4428 0 R 4431 0 R 4434 0 R 4437 0 R 4440 0 R 4443 0 R 4446 0 R 4449 0 R ] >> endobj 6115 0 obj << /Type /Catalog /Pages 11 0 R /Lang (en) /Metadata 5 0 R /PageLabels 6116 0 R /Outlines 4606 0 R /PageMode /UseOutlines /Names 6117 0 R >> endobj 10 0 obj << /Font << /F6 5358 0 R /F7 5359 0 R /F9 5360 0 R /F10 5361 0 R /F3 5362 0 R /F5 5363 0 R >> /ProcSet [/PDF /ImageB /ImageC /Text] /ColorSpace << /DefaultRGB 4 0 R >> >> endobj 6116 0 obj << /Nums [0 << /S /r >> 2 << /S /r /St 3 >> 3 << /S /r /St 4 >> 4 << /S /r /St 5 >> 5 << /S /r /St 6 >> 6 << /S /r /St 7 >> 7 << /S /r /St 8 >> 8 << /S /r /St 9 >> 9 << /S /r /St 10 >> 10 << /S /r /St 11 >> 11 << /S /r /St 12 >> 12 << /S /r /St 13 >> 13 << /S /r /St 14 >> 14 << /S /r /St 15 >> 15 << /S /r /St 16 >> 16 << /S /D >> 67 << /S /D /St 52 >> 121 << /S /D /St 106 >> 175 << /S /D /St 160 >> 229 << /S /D /St 214 >> 283 << /S /D /St 268 >> 350 << /S /D /St 335 >> 404 << /S /D /St 389 >> 458 << /S /D /St 443 >> 512 << /S /D /St 497 >> 566 << /S /D /St 551 >> 620 << /S /D /St 605 >> 674 << /S /D /St 659 >> 728 << /S /D /St 713 >>] >> endobj 4606 0 obj << /First 4605 0 R /Last 5342 0 R >> endobj 6117 0 obj << /Dests 6114 0 R >> endobj xref 0 6118 0000000000 65535 f 0000000015 00000 n 0000000225 00000 n 0000007524 00000 n 0000007544 00000 n 0000007577 00000 n 0000008807 00000 n 0000008827 00000 n 0000009078 00000 n 0000009097 00000 n 0001403578 00000 n 0001396547 00000 n 0000009289 00000 n 0000010260 00000 n 0000010280 00000 n 0000010474 00000 n 0000011371 00000 n 0000011391 00000 n 0000011585 00000 n 0000012109 00000 n 0000012129 00000 n 0000012323 00000 n 0000013065 00000 n 0000013085 00000 n 0000013279 00000 n 0000013901 00000 n 0000013921 00000 n 0000014115 00000 n 0000014842 00000 n 0000014862 00000 n 0000015056 00000 n 0000015779 00000 n 0000015799 00000 n 0000015993 00000 n 0000016550 00000 n 0000016570 00000 n 0000016764 00000 n 0000017513 00000 n 0000017533 00000 n 0000017727 00000 n 0000018459 00000 n 0000018479 00000 n 0000018673 00000 n 0000019597 00000 n 0000019617 00000 n 0000019811 00000 n 0000020462 00000 n 0000020482 00000 n 0000020676 00000 n 0000021216 00000 n 0000021236 00000 n 0000021430 00000 n 0000022044 00000 n 0000022064 00000 n 0000022258 00000 n 0000022996 00000 n 0000023016 00000 n 0000023210 00000 n 0000023764 00000 n 0000023784 00000 n 0000023978 00000 n 0000024657 00000 n 0000024677 00000 n 0000024871 00000 n 0000025431 00000 n 0000025451 00000 n 0000025645 00000 n 0000026206 00000 n 0000026226 00000 n 0000026420 00000 n 0000027045 00000 n 0000027065 00000 n 0000027259 00000 n 0000027811 00000 n 0000027831 00000 n 0000028025 00000 n 0000028629 00000 n 0000028649 00000 n 0000028843 00000 n 0000029430 00000 n 0000029450 00000 n 0000029644 00000 n 0000030213 00000 n 0000030233 00000 n 0000030427 00000 n 0000031084 00000 n 0000031104 00000 n 0000031298 00000 n 0000031870 00000 n 0000031890 00000 n 0000032084 00000 n 0000032847 00000 n 0000032867 00000 n 0000033061 00000 n 0000033704 00000 n 0000033724 00000 n 0000033918 00000 n 0000034495 00000 n 0000034515 00000 n 0000034709 00000 n 0000035363 00000 n 0000035384 00000 n 0000035579 00000 n 0000036238 00000 n 0000036259 00000 n 0000036455 00000 n 0000037113 00000 n 0000037134 00000 n 0000037330 00000 n 0000037992 00000 n 0000038013 00000 n 0000038209 00000 n 0000038786 00000 n 0000038807 00000 n 0000039003 00000 n 0000039686 00000 n 0000039707 00000 n 0000039903 00000 n 0000040638 00000 n 0000040659 00000 n 0000040855 00000 n 0000041515 00000 n 0000041536 00000 n 0000041732 00000 n 0000042383 00000 n 0000042404 00000 n 0000042600 00000 n 0000043167 00000 n 0000043188 00000 n 0000043384 00000 n 0000043939 00000 n 0000043960 00000 n 0000044156 00000 n 0000044705 00000 n 0000044726 00000 n 0000044922 00000 n 0000045495 00000 n 0000045516 00000 n 0000045712 00000 n 0000046285 00000 n 0000046306 00000 n 0000046502 00000 n 0000047166 00000 n 0000047187 00000 n 0000047383 00000 n 0000048096 00000 n 0000048117 00000 n 0000048313 00000 n 0000048924 00000 n 0000048945 00000 n 0000049141 00000 n 0000049807 00000 n 0000049828 00000 n 0000050024 00000 n 0000050708 00000 n 0000050729 00000 n 0000050925 00000 n 0000051493 00000 n 0000051514 00000 n 0000051710 00000 n 0000052395 00000 n 0000052416 00000 n 0000052612 00000 n 0000053299 00000 n 0000053320 00000 n 0000053516 00000 n 0000054096 00000 n 0000054117 00000 n 0000054313 00000 n 0000054392 00000 n 0000054532 00000 n 0000054674 00000 n 0000054753 00000 n 0000054893 00000 n 0000055035 00000 n 0000055114 00000 n 0000055253 00000 n 0000055391 00000 n 0000055470 00000 n 0000055609 00000 n 0000055751 00000 n 0000055830 00000 n 0000055968 00000 n 0000056110 00000 n 0000056189 00000 n 0000056327 00000 n 0000056465 00000 n 0000056544 00000 n 0000056683 00000 n 0000056821 00000 n 0000056900 00000 n 0000057039 00000 n 0000057181 00000 n 0000057260 00000 n 0000057399 00000 n 0000057537 00000 n 0000057616 00000 n 0000057755 00000 n 0000057893 00000 n 0000057972 00000 n 0000058111 00000 n 0000058253 00000 n 0000058332 00000 n 0000058471 00000 n 0000058609 00000 n 0000058688 00000 n 0000058827 00000 n 0000058969 00000 n 0000059048 00000 n 0000059187 00000 n 0000059329 00000 n 0000059408 00000 n 0000059547 00000 n 0000059689 00000 n 0000059768 00000 n 0000059906 00000 n 0000060048 00000 n 0000060127 00000 n 0000060266 00000 n 0000060408 00000 n 0000060487 00000 n 0000060626 00000 n 0000060764 00000 n 0000060843 00000 n 0000060982 00000 n 0000061124 00000 n 0000061203 00000 n 0000061342 00000 n 0000061480 00000 n 0000061559 00000 n 0000061698 00000 n 0000061840 00000 n 0000061919 00000 n 0000062058 00000 n 0000062200 00000 n 0000062279 00000 n 0000062418 00000 n 0000062556 00000 n 0000062635 00000 n 0000062774 00000 n 0000062912 00000 n 0000062991 00000 n 0000063130 00000 n 0000063268 00000 n 0000063347 00000 n 0000063486 00000 n 0000063624 00000 n 0000063703 00000 n 0000063842 00000 n 0000063980 00000 n 0000064059 00000 n 0000064198 00000 n 0000064340 00000 n 0000064420 00000 n 0000064558 00000 n 0000064700 00000 n 0000064780 00000 n 0000064918 00000 n 0000065060 00000 n 0000065140 00000 n 0000065279 00000 n 0000065421 00000 n 0000065501 00000 n 0000065640 00000 n 0000065778 00000 n 0000065858 00000 n 0000065997 00000 n 0000066139 00000 n 0000066219 00000 n 0000066358 00000 n 0000066496 00000 n 0000066576 00000 n 0000066715 00000 n 0000066853 00000 n 0000066933 00000 n 0000067072 00000 n 0000067210 00000 n 0000067290 00000 n 0000067429 00000 n 0000067571 00000 n 0000067651 00000 n 0000067790 00000 n 0000067928 00000 n 0000068008 00000 n 0000068147 00000 n 0000068289 00000 n 0000068369 00000 n 0000068508 00000 n 0000068646 00000 n 0000068726 00000 n 0000068865 00000 n 0000069003 00000 n 0000069083 00000 n 0000069222 00000 n 0000069360 00000 n 0000069440 00000 n 0000069579 00000 n 0000069721 00000 n 0000069801 00000 n 0000069940 00000 n 0000070078 00000 n 0000070158 00000 n 0000070297 00000 n 0000070435 00000 n 0000070515 00000 n 0000070654 00000 n 0000070796 00000 n 0000070876 00000 n 0000071015 00000 n 0000071153 00000 n 0000071233 00000 n 0000071372 00000 n 0000071510 00000 n 0000071590 00000 n 0000071729 00000 n 0000071871 00000 n 0000071951 00000 n 0000072089 00000 n 0000072226 00000 n 0000072306 00000 n 0000072443 00000 n 0000072579 00000 n 0000087518 00000 n 0000087541 00000 n 0000088378 00000 n 0000088592 00000 n 0000089507 00000 n 0000089528 00000 n 0000089724 00000 n 0000090616 00000 n 0000090637 00000 n 0000090833 00000 n 0000091888 00000 n 0000091909 00000 n 0000092105 00000 n 0000092975 00000 n 0000092996 00000 n 0000093192 00000 n 0000094219 00000 n 0000094240 00000 n 0000094436 00000 n 0000095357 00000 n 0000095378 00000 n 0000095574 00000 n 0000096466 00000 n 0000096487 00000 n 0000096683 00000 n 0000097604 00000 n 0000097625 00000 n 0000097821 00000 n 0000098845 00000 n 0000098866 00000 n 0000099062 00000 n 0000099652 00000 n 0000099673 00000 n 0000099869 00000 n 0000100573 00000 n 0000100594 00000 n 0000100790 00000 n 0000102119 00000 n 0000102141 00000 n 0000102337 00000 n 0000103121 00000 n 0000103142 00000 n 0000103338 00000 n 0000104208 00000 n 0000104229 00000 n 0000104425 00000 n 0000105313 00000 n 0000105334 00000 n 0000105530 00000 n 0000106321 00000 n 0000106342 00000 n 0000106538 00000 n 0000107124 00000 n 0000107145 00000 n 0000107341 00000 n 0000107927 00000 n 0000107948 00000 n 0000108144 00000 n 0000108769 00000 n 0000108790 00000 n 0000108986 00000 n 0000109659 00000 n 0000109680 00000 n 0000109876 00000 n 0000110472 00000 n 0000110493 00000 n 0000110689 00000 n 0000111320 00000 n 0000111341 00000 n 0000111537 00000 n 0000112143 00000 n 0000112164 00000 n 0000112360 00000 n 0000112968 00000 n 0000112989 00000 n 0000113185 00000 n 0000113795 00000 n 0000113816 00000 n 0000114012 00000 n 0000114622 00000 n 0000114643 00000 n 0000114839 00000 n 0000115466 00000 n 0000115487 00000 n 0000115683 00000 n 0000116366 00000 n 0000116387 00000 n 0000116583 00000 n 0000117192 00000 n 0000117213 00000 n 0000117409 00000 n 0000118052 00000 n 0000118073 00000 n 0000118269 00000 n 0000119348 00000 n 0000119370 00000 n 0000119566 00000 n 0000120753 00000 n 0000120775 00000 n 0000120971 00000 n 0000122166 00000 n 0000122188 00000 n 0000122384 00000 n 0000123679 00000 n 0000123701 00000 n 0000123897 00000 n 0000125084 00000 n 0000125106 00000 n 0000125302 00000 n 0000126499 00000 n 0000126521 00000 n 0000126717 00000 n 0000127521 00000 n 0000127542 00000 n 0000127738 00000 n 0000128293 00000 n 0000128314 00000 n 0000128510 00000 n 0000129110 00000 n 0000129131 00000 n 0000129327 00000 n 0000129917 00000 n 0000129938 00000 n 0000130134 00000 n 0000130788 00000 n 0000130809 00000 n 0000131005 00000 n 0000131866 00000 n 0000131887 00000 n 0000132083 00000 n 0000132761 00000 n 0000132782 00000 n 0000132978 00000 n 0000133697 00000 n 0000133718 00000 n 0000133914 00000 n 0000134601 00000 n 0000134622 00000 n 0000134818 00000 n 0000135501 00000 n 0000135522 00000 n 0000135718 00000 n 0000136543 00000 n 0000136564 00000 n 0000136760 00000 n 0000137465 00000 n 0000137486 00000 n 0000137682 00000 n 0000138389 00000 n 0000138410 00000 n 0000138606 00000 n 0000139191 00000 n 0000139212 00000 n 0000139408 00000 n 0000140069 00000 n 0000140090 00000 n 0000140286 00000 n 0000140838 00000 n 0000140859 00000 n 0000141055 00000 n 0000141646 00000 n 0000141667 00000 n 0000141863 00000 n 0000142453 00000 n 0000142474 00000 n 0000142670 00000 n 0000142750 00000 n 0000142885 00000 n 0000143023 00000 n 0000143103 00000 n 0000143238 00000 n 0000143372 00000 n 0000143452 00000 n 0000143587 00000 n 0000143721 00000 n 0000143801 00000 n 0000143936 00000 n 0000144074 00000 n 0000144154 00000 n 0000144289 00000 n 0000144427 00000 n 0000144507 00000 n 0000144642 00000 n 0000144780 00000 n 0000144860 00000 n 0000144995 00000 n 0000145129 00000 n 0000145209 00000 n 0000145344 00000 n 0000145478 00000 n 0000145558 00000 n 0000145693 00000 n 0000145827 00000 n 0000145907 00000 n 0000146042 00000 n 0000146176 00000 n 0000146256 00000 n 0000146391 00000 n 0000146525 00000 n 0000146605 00000 n 0000146740 00000 n 0000146878 00000 n 0000146958 00000 n 0000147093 00000 n 0000147227 00000 n 0000147307 00000 n 0000147442 00000 n 0000147580 00000 n 0000147660 00000 n 0000147795 00000 n 0000147929 00000 n 0000148009 00000 n 0000148144 00000 n 0000148282 00000 n 0000148362 00000 n 0000148497 00000 n 0000148631 00000 n 0000148711 00000 n 0000148846 00000 n 0000148980 00000 n 0000149060 00000 n 0000149195 00000 n 0000149333 00000 n 0000149413 00000 n 0000149548 00000 n 0000149686 00000 n 0000149766 00000 n 0000149901 00000 n 0000150035 00000 n 0000150115 00000 n 0000150249 00000 n 0000150387 00000 n 0000150467 00000 n 0000150602 00000 n 0000150736 00000 n 0000150816 00000 n 0000150951 00000 n 0000151085 00000 n 0000151165 00000 n 0000151300 00000 n 0000151438 00000 n 0000151518 00000 n 0000151653 00000 n 0000151791 00000 n 0000151871 00000 n 0000152006 00000 n 0000152144 00000 n 0000152224 00000 n 0000152359 00000 n 0000152493 00000 n 0000152573 00000 n 0000152708 00000 n 0000152842 00000 n 0000152922 00000 n 0000153057 00000 n 0000153195 00000 n 0000153275 00000 n 0000153410 00000 n 0000153548 00000 n 0000153628 00000 n 0000153763 00000 n 0000153897 00000 n 0000153977 00000 n 0000154112 00000 n 0000154250 00000 n 0000154330 00000 n 0000154465 00000 n 0000154603 00000 n 0000154683 00000 n 0000154818 00000 n 0000154952 00000 n 0000155032 00000 n 0000155167 00000 n 0000155301 00000 n 0000155381 00000 n 0000155516 00000 n 0000155650 00000 n 0000155730 00000 n 0000155865 00000 n 0000155999 00000 n 0000156079 00000 n 0000156214 00000 n 0000156348 00000 n 0000156428 00000 n 0000156563 00000 n 0000156701 00000 n 0000156781 00000 n 0000156916 00000 n 0000157050 00000 n 0000157130 00000 n 0000157265 00000 n 0000157399 00000 n 0000157479 00000 n 0000157614 00000 n 0000157752 00000 n 0000157832 00000 n 0000157967 00000 n 0000158105 00000 n 0000158185 00000 n 0000158320 00000 n 0000158454 00000 n 0000158534 00000 n 0000158669 00000 n 0000158803 00000 n 0000158883 00000 n 0000159018 00000 n 0000159156 00000 n 0000159236 00000 n 0000159371 00000 n 0000159505 00000 n 0000159585 00000 n 0000159720 00000 n 0000159858 00000 n 0000159938 00000 n 0000160073 00000 n 0000160211 00000 n 0000160291 00000 n 0000160426 00000 n 0000160560 00000 n 0000160640 00000 n 0000160774 00000 n 0000160907 00000 n 0000160987 00000 n 0000161120 00000 n 0000161252 00000 n 0000161332 00000 n 0000161465 00000 n 0000161597 00000 n 0000176476 00000 n 0000176499 00000 n 0000177384 00000 n 0000177598 00000 n 0000178139 00000 n 0000178160 00000 n 0000178356 00000 n 0000178931 00000 n 0000178952 00000 n 0000179148 00000 n 0000179761 00000 n 0000179782 00000 n 0000179978 00000 n 0000180562 00000 n 0000180583 00000 n 0000180779 00000 n 0000181391 00000 n 0000181412 00000 n 0000181608 00000 n 0000182184 00000 n 0000182205 00000 n 0000182401 00000 n 0000182997 00000 n 0000183018 00000 n 0000183214 00000 n 0000183808 00000 n 0000183829 00000 n 0000184025 00000 n 0000184639 00000 n 0000184660 00000 n 0000184856 00000 n 0000185470 00000 n 0000185491 00000 n 0000185687 00000 n 0000186302 00000 n 0000186323 00000 n 0000186519 00000 n 0000187104 00000 n 0000187125 00000 n 0000187321 00000 n 0000187926 00000 n 0000187947 00000 n 0000188143 00000 n 0000188815 00000 n 0000188836 00000 n 0000189032 00000 n 0000189621 00000 n 0000189642 00000 n 0000189838 00000 n 0000190421 00000 n 0000190442 00000 n 0000190638 00000 n 0000191343 00000 n 0000191364 00000 n 0000191560 00000 n 0000192144 00000 n 0000192165 00000 n 0000192361 00000 n 0000192944 00000 n 0000192965 00000 n 0000193161 00000 n 0000193721 00000 n 0000193742 00000 n 0000193938 00000 n 0000194525 00000 n 0000194546 00000 n 0000194742 00000 n 0000195332 00000 n 0000195353 00000 n 0000195549 00000 n 0000196181 00000 n 0000196202 00000 n 0000196398 00000 n 0000197247 00000 n 0000197268 00000 n 0000197464 00000 n 0000198400 00000 n 0000198421 00000 n 0000198617 00000 n 0000199550 00000 n 0000199571 00000 n 0000199767 00000 n 0000200324 00000 n 0000200345 00000 n 0000200541 00000 n 0000201154 00000 n 0000201175 00000 n 0000201371 00000 n 0000202036 00000 n 0000202057 00000 n 0000202253 00000 n 0000202841 00000 n 0000202862 00000 n 0000203058 00000 n 0000203813 00000 n 0000203834 00000 n 0000204030 00000 n 0000204599 00000 n 0000204620 00000 n 0000204816 00000 n 0000205622 00000 n 0000205643 00000 n 0000205839 00000 n 0000206749 00000 n 0000206770 00000 n 0000206966 00000 n 0000207646 00000 n 0000207667 00000 n 0000207863 00000 n 0000208583 00000 n 0000208604 00000 n 0000208800 00000 n 0000209488 00000 n 0000209509 00000 n 0000209705 00000 n 0000210393 00000 n 0000210414 00000 n 0000210610 00000 n 0000211169 00000 n 0000211190 00000 n 0000211386 00000 n 0000212002 00000 n 0000212023 00000 n 0000212219 00000 n 0000212943 00000 n 0000212964 00000 n 0000213160 00000 n 0000213881 00000 n 0000213902 00000 n 0000214098 00000 n 0000214814 00000 n 0000214835 00000 n 0000215031 00000 n 0000215750 00000 n 0000215771 00000 n 0000215967 00000 n 0000216555 00000 n 0000216576 00000 n 0000216772 00000 n 0000217511 00000 n 0000217532 00000 n 0000217728 00000 n 0000218307 00000 n 0000218328 00000 n 0000218524 00000 n 0000219101 00000 n 0000219122 00000 n 0000219318 00000 n 0000219892 00000 n 0000219913 00000 n 0000220109 00000 n 0000220687 00000 n 0000220708 00000 n 0000220904 00000 n 0000221590 00000 n 0000221611 00000 n 0000221807 00000 n 0000222376 00000 n 0000222397 00000 n 0000222593 00000 n 0000223283 00000 n 0000223304 00000 n 0000223500 00000 n 0000224191 00000 n 0000224212 00000 n 0000224408 00000 n 0000224488 00000 n 0000224623 00000 n 0000224761 00000 n 0000224841 00000 n 0000224976 00000 n 0000225114 00000 n 0000225194 00000 n 0000225329 00000 n 0000225467 00000 n 0000225547 00000 n 0000225682 00000 n 0000225816 00000 n 0000225896 00000 n 0000226030 00000 n 0000226168 00000 n 0000226248 00000 n 0000226383 00000 n 0000226517 00000 n 0000226597 00000 n 0000226732 00000 n 0000226870 00000 n 0000226950 00000 n 0000227085 00000 n 0000227223 00000 n 0000227303 00000 n 0000227438 00000 n 0000227576 00000 n 0000227656 00000 n 0000227791 00000 n 0000227929 00000 n 0000228009 00000 n 0000228144 00000 n 0000228278 00000 n 0000228358 00000 n 0000228493 00000 n 0000228631 00000 n 0000228711 00000 n 0000228846 00000 n 0000228980 00000 n 0000229060 00000 n 0000229195 00000 n 0000229329 00000 n 0000229409 00000 n 0000229544 00000 n 0000229678 00000 n 0000229758 00000 n 0000229893 00000 n 0000230031 00000 n 0000230111 00000 n 0000230246 00000 n 0000230384 00000 n 0000230464 00000 n 0000230599 00000 n 0000230737 00000 n 0000230817 00000 n 0000230952 00000 n 0000231086 00000 n 0000231166 00000 n 0000231301 00000 n 0000231435 00000 n 0000231515 00000 n 0000231650 00000 n 0000231784 00000 n 0000231864 00000 n 0000231999 00000 n 0000232133 00000 n 0000232213 00000 n 0000232348 00000 n 0000232486 00000 n 0000232566 00000 n 0000232701 00000 n 0000232835 00000 n 0000232915 00000 n 0000233049 00000 n 0000233183 00000 n 0000233263 00000 n 0000233398 00000 n 0000233536 00000 n 0000233616 00000 n 0000233751 00000 n 0000233889 00000 n 0000233969 00000 n 0000234104 00000 n 0000234238 00000 n 0000234318 00000 n 0000234453 00000 n 0000234587 00000 n 0000234667 00000 n 0000234802 00000 n 0000234940 00000 n 0000235020 00000 n 0000235155 00000 n 0000235293 00000 n 0000235373 00000 n 0000235508 00000 n 0000235642 00000 n 0000235722 00000 n 0000235857 00000 n 0000235995 00000 n 0000236075 00000 n 0000236210 00000 n 0000236344 00000 n 0000236424 00000 n 0000236559 00000 n 0000236693 00000 n 0000236773 00000 n 0000236908 00000 n 0000237046 00000 n 0000237126 00000 n 0000237261 00000 n 0000237395 00000 n 0000237475 00000 n 0000237610 00000 n 0000237744 00000 n 0000237824 00000 n 0000237960 00000 n 0000238098 00000 n 0000238178 00000 n 0000238313 00000 n 0000238447 00000 n 0000238527 00000 n 0000238662 00000 n 0000238796 00000 n 0000238876 00000 n 0000239011 00000 n 0000239145 00000 n 0000239225 00000 n 0000239360 00000 n 0000239494 00000 n 0000239574 00000 n 0000239709 00000 n 0000239843 00000 n 0000239923 00000 n 0000240058 00000 n 0000240196 00000 n 0000240276 00000 n 0000240410 00000 n 0000240544 00000 n 0000240624 00000 n 0000240759 00000 n 0000240893 00000 n 0000240973 00000 n 0000241108 00000 n 0000241246 00000 n 0000241326 00000 n 0000241461 00000 n 0000241595 00000 n 0000241675 00000 n 0000241810 00000 n 0000241948 00000 n 0000242028 00000 n 0000242163 00000 n 0000242297 00000 n 0000242377 00000 n 0000242511 00000 n 0000242644 00000 n 0000242724 00000 n 0000242857 00000 n 0000242993 00000 n 0000243073 00000 n 0000243206 00000 n 0000243338 00000 n 0000258218 00000 n 0000258241 00000 n 0000259126 00000 n 0000259340 00000 n 0000260026 00000 n 0000260047 00000 n 0000260243 00000 n 0000260934 00000 n 0000260955 00000 n 0000261151 00000 n 0000261801 00000 n 0000261822 00000 n 0000262018 00000 n 0000262667 00000 n 0000262688 00000 n 0000262884 00000 n 0000263525 00000 n 0000263546 00000 n 0000263742 00000 n 0000264418 00000 n 0000264439 00000 n 0000264635 00000 n 0000265252 00000 n 0000265274 00000 n 0000265471 00000 n 0000266090 00000 n 0000266112 00000 n 0000266310 00000 n 0000266790 00000 n 0000266812 00000 n 0000267010 00000 n 0000268684 00000 n 0000268707 00000 n 0000268905 00000 n 0000269848 00000 n 0000269870 00000 n 0000270068 00000 n 0000270664 00000 n 0000270686 00000 n 0000270884 00000 n 0000271464 00000 n 0000271486 00000 n 0000271684 00000 n 0000272069 00000 n 0000272091 00000 n 0000272289 00000 n 0000273093 00000 n 0000273115 00000 n 0000273313 00000 n 0000273792 00000 n 0000273814 00000 n 0000274012 00000 n 0000274681 00000 n 0000274703 00000 n 0000274901 00000 n 0000275854 00000 n 0000275876 00000 n 0000276074 00000 n 0000276601 00000 n 0000276623 00000 n 0000276821 00000 n 0000277507 00000 n 0000277529 00000 n 0000277727 00000 n 0000278532 00000 n 0000278554 00000 n 0000278752 00000 n 0000279548 00000 n 0000279570 00000 n 0000279768 00000 n 0000280555 00000 n 0000280577 00000 n 0000280775 00000 n 0000281580 00000 n 0000281602 00000 n 0000281800 00000 n 0000282675 00000 n 0000282697 00000 n 0000282895 00000 n 0000283686 00000 n 0000283708 00000 n 0000283906 00000 n 0000284516 00000 n 0000284538 00000 n 0000284736 00000 n 0000285368 00000 n 0000285390 00000 n 0000285588 00000 n 0000286213 00000 n 0000286235 00000 n 0000286433 00000 n 0000287132 00000 n 0000287154 00000 n 0000287352 00000 n 0000288061 00000 n 0000288083 00000 n 0000288281 00000 n 0000288994 00000 n 0000289016 00000 n 0000289214 00000 n 0000289928 00000 n 0000289950 00000 n 0000290148 00000 n 0000290807 00000 n 0000290829 00000 n 0000291027 00000 n 0000291637 00000 n 0000291659 00000 n 0000291857 00000 n 0000292468 00000 n 0000292490 00000 n 0000292688 00000 n 0000293331 00000 n 0000293353 00000 n 0000293551 00000 n 0000294279 00000 n 0000294301 00000 n 0000294499 00000 n 0000295220 00000 n 0000295242 00000 n 0000295440 00000 n 0000296169 00000 n 0000296191 00000 n 0000296389 00000 n 0000297130 00000 n 0000297152 00000 n 0000297350 00000 n 0000297833 00000 n 0000297855 00000 n 0000298053 00000 n 0000298601 00000 n 0000298623 00000 n 0000298821 00000 n 0000299429 00000 n 0000299451 00000 n 0000299649 00000 n 0000300197 00000 n 0000300219 00000 n 0000300417 00000 n 0000301162 00000 n 0000301184 00000 n 0000301382 00000 n 0000302130 00000 n 0000302152 00000 n 0000302350 00000 n 0000302956 00000 n 0000302978 00000 n 0000303176 00000 n 0000303988 00000 n 0000304010 00000 n 0000304208 00000 n 0000304909 00000 n 0000304931 00000 n 0000305129 00000 n 0000305853 00000 n 0000305875 00000 n 0000306073 00000 n 0000306883 00000 n 0000306905 00000 n 0000307103 00000 n 0000307848 00000 n 0000307870 00000 n 0000308068 00000 n 0000308524 00000 n 0000308546 00000 n 0000308744 00000 n 0000308825 00000 n 0000308962 00000 n 0000309098 00000 n 0000309179 00000 n 0000309316 00000 n 0000309452 00000 n 0000309533 00000 n 0000309670 00000 n 0000309806 00000 n 0000309887 00000 n 0000310024 00000 n 0000310164 00000 n 0000310245 00000 n 0000310382 00000 n 0000310522 00000 n 0000310603 00000 n 0000310740 00000 n 0000310880 00000 n 0000310962 00000 n 0000311099 00000 n 0000311239 00000 n 0000311321 00000 n 0000311458 00000 n 0000311598 00000 n 0000311680 00000 n 0000311818 00000 n 0000311958 00000 n 0000312040 00000 n 0000312177 00000 n 0000312313 00000 n 0000312395 00000 n 0000312532 00000 n 0000312668 00000 n 0000312750 00000 n 0000312887 00000 n 0000313027 00000 n 0000313109 00000 n 0000313246 00000 n 0000313382 00000 n 0000313464 00000 n 0000313602 00000 n 0000313742 00000 n 0000313824 00000 n 0000313961 00000 n 0000314097 00000 n 0000314179 00000 n 0000314317 00000 n 0000314457 00000 n 0000314539 00000 n 0000314676 00000 n 0000314812 00000 n 0000314894 00000 n 0000315031 00000 n 0000315167 00000 n 0000315249 00000 n 0000315386 00000 n 0000315526 00000 n 0000315608 00000 n 0000315745 00000 n 0000315881 00000 n 0000315963 00000 n 0000316100 00000 n 0000316240 00000 n 0000316322 00000 n 0000316459 00000 n 0000316595 00000 n 0000316677 00000 n 0000316814 00000 n 0000316950 00000 n 0000317032 00000 n 0000317169 00000 n 0000317305 00000 n 0000317387 00000 n 0000317524 00000 n 0000317664 00000 n 0000317746 00000 n 0000317883 00000 n 0000318023 00000 n 0000318105 00000 n 0000318242 00000 n 0000318382 00000 n 0000318464 00000 n 0000318601 00000 n 0000318741 00000 n 0000318823 00000 n 0000318960 00000 n 0000319096 00000 n 0000319178 00000 n 0000319315 00000 n 0000319455 00000 n 0000319537 00000 n 0000319674 00000 n 0000319810 00000 n 0000319892 00000 n 0000320029 00000 n 0000320165 00000 n 0000320247 00000 n 0000320384 00000 n 0000320520 00000 n 0000320602 00000 n 0000320739 00000 n 0000320879 00000 n 0000320961 00000 n 0000321098 00000 n 0000321234 00000 n 0000321316 00000 n 0000321453 00000 n 0000321589 00000 n 0000321671 00000 n 0000321808 00000 n 0000321944 00000 n 0000322026 00000 n 0000322163 00000 n 0000322303 00000 n 0000322385 00000 n 0000322521 00000 n 0000322657 00000 n 0000322739 00000 n 0000322876 00000 n 0000323016 00000 n 0000323098 00000 n 0000323234 00000 n 0000323374 00000 n 0000323456 00000 n 0000323594 00000 n 0000323734 00000 n 0000323816 00000 n 0000323953 00000 n 0000324093 00000 n 0000324175 00000 n 0000324312 00000 n 0000324452 00000 n 0000324534 00000 n 0000324671 00000 n 0000324807 00000 n 0000324889 00000 n 0000325026 00000 n 0000325166 00000 n 0000325248 00000 n 0000325385 00000 n 0000325525 00000 n 0000325607 00000 n 0000325743 00000 n 0000325883 00000 n 0000325965 00000 n 0000326102 00000 n 0000326238 00000 n 0000326320 00000 n 0000326457 00000 n 0000326597 00000 n 0000326679 00000 n 0000326816 00000 n 0000326952 00000 n 0000327034 00000 n 0000327170 00000 n 0000327309 00000 n 0000327391 00000 n 0000327526 00000 n 0000327664 00000 n 0000327746 00000 n 0000327882 00000 n 0000328020 00000 n 0000342837 00000 n 0000342861 00000 n 0000343855 00000 n 0000344072 00000 n 0000344641 00000 n 0000344663 00000 n 0000344861 00000 n 0000345531 00000 n 0000345553 00000 n 0000345751 00000 n 0000346414 00000 n 0000346436 00000 n 0000346634 00000 n 0000347353 00000 n 0000347375 00000 n 0000347573 00000 n 0000348127 00000 n 0000348149 00000 n 0000348347 00000 n 0000348915 00000 n 0000348937 00000 n 0000349135 00000 n 0000349771 00000 n 0000349793 00000 n 0000349991 00000 n 0000350542 00000 n 0000350564 00000 n 0000350762 00000 n 0000351318 00000 n 0000351340 00000 n 0000351538 00000 n 0000352114 00000 n 0000352136 00000 n 0000352334 00000 n 0000352884 00000 n 0000352906 00000 n 0000353104 00000 n 0000353660 00000 n 0000353682 00000 n 0000353880 00000 n 0000354511 00000 n 0000354533 00000 n 0000354731 00000 n 0000355320 00000 n 0000355342 00000 n 0000355540 00000 n 0000356144 00000 n 0000356166 00000 n 0000356364 00000 n 0000357000 00000 n 0000357022 00000 n 0000357220 00000 n 0000357708 00000 n 0000357730 00000 n 0000357928 00000 n 0000359344 00000 n 0000359367 00000 n 0000359565 00000 n 0000361048 00000 n 0000361071 00000 n 0000361269 00000 n 0000362839 00000 n 0000362862 00000 n 0000363060 00000 n 0000364569 00000 n 0000364592 00000 n 0000364790 00000 n 0000366305 00000 n 0000366328 00000 n 0000366526 00000 n 0000367210 00000 n 0000367232 00000 n 0000367430 00000 n 0000368177 00000 n 0000368199 00000 n 0000368397 00000 n 0000369151 00000 n 0000369173 00000 n 0000369371 00000 n 0000370050 00000 n 0000370072 00000 n 0000370270 00000 n 0000370869 00000 n 0000370891 00000 n 0000371089 00000 n 0000371741 00000 n 0000371763 00000 n 0000371961 00000 n 0000372650 00000 n 0000372672 00000 n 0000372870 00000 n 0000373591 00000 n 0000373613 00000 n 0000373811 00000 n 0000374526 00000 n 0000374548 00000 n 0000374746 00000 n 0000375498 00000 n 0000375520 00000 n 0000375718 00000 n 0000376352 00000 n 0000376374 00000 n 0000376572 00000 n 0000377287 00000 n 0000377309 00000 n 0000377507 00000 n 0000378119 00000 n 0000378141 00000 n 0000378339 00000 n 0000378756 00000 n 0000378778 00000 n 0000378976 00000 n 0000379822 00000 n 0000379844 00000 n 0000380042 00000 n 0000380949 00000 n 0000380971 00000 n 0000381169 00000 n 0000381997 00000 n 0000382019 00000 n 0000382217 00000 n 0000382873 00000 n 0000382895 00000 n 0000383093 00000 n 0000383952 00000 n 0000383974 00000 n 0000384172 00000 n 0000384832 00000 n 0000384854 00000 n 0000385052 00000 n 0000385509 00000 n 0000385531 00000 n 0000385729 00000 n 0000386286 00000 n 0000386308 00000 n 0000386506 00000 n 0000387061 00000 n 0000387083 00000 n 0000387281 00000 n 0000387880 00000 n 0000387902 00000 n 0000388100 00000 n 0000388650 00000 n 0000388672 00000 n 0000388870 00000 n 0000389482 00000 n 0000389504 00000 n 0000389702 00000 n 0000390360 00000 n 0000390382 00000 n 0000390580 00000 n 0000391171 00000 n 0000391193 00000 n 0000391391 00000 n 0000392001 00000 n 0000392023 00000 n 0000392221 00000 n 0000392870 00000 n 0000392892 00000 n 0000393090 00000 n 0000393683 00000 n 0000393705 00000 n 0000393903 00000 n 0000394495 00000 n 0000394517 00000 n 0000394715 00000 n 0000394797 00000 n 0000394934 00000 n 0000395074 00000 n 0000395156 00000 n 0000395293 00000 n 0000395433 00000 n 0000395515 00000 n 0000395652 00000 n 0000395792 00000 n 0000395874 00000 n 0000396011 00000 n 0000396151 00000 n 0000396233 00000 n 0000396370 00000 n 0000396506 00000 n 0000396588 00000 n 0000396725 00000 n 0000396865 00000 n 0000396947 00000 n 0000397083 00000 n 0000397223 00000 n 0000397305 00000 n 0000397442 00000 n 0000397578 00000 n 0000397660 00000 n 0000397796 00000 n 0000397936 00000 n 0000398018 00000 n 0000398155 00000 n 0000398291 00000 n 0000398373 00000 n 0000398510 00000 n 0000398650 00000 n 0000398732 00000 n 0000398869 00000 n 0000399005 00000 n 0000399087 00000 n 0000399224 00000 n 0000399360 00000 n 0000399442 00000 n 0000399579 00000 n 0000399719 00000 n 0000399801 00000 n 0000399938 00000 n 0000400078 00000 n 0000400160 00000 n 0000400297 00000 n 0000400433 00000 n 0000400515 00000 n 0000400653 00000 n 0000400793 00000 n 0000400875 00000 n 0000401012 00000 n 0000401148 00000 n 0000401230 00000 n 0000401367 00000 n 0000401503 00000 n 0000401585 00000 n 0000401722 00000 n 0000401862 00000 n 0000401944 00000 n 0000402080 00000 n 0000402220 00000 n 0000402302 00000 n 0000402439 00000 n 0000402579 00000 n 0000402661 00000 n 0000402798 00000 n 0000402934 00000 n 0000403016 00000 n 0000403153 00000 n 0000403289 00000 n 0000403371 00000 n 0000403508 00000 n 0000403648 00000 n 0000403730 00000 n 0000403867 00000 n 0000404007 00000 n 0000404089 00000 n 0000404226 00000 n 0000404362 00000 n 0000404444 00000 n 0000404581 00000 n 0000404717 00000 n 0000404799 00000 n 0000404936 00000 n 0000405072 00000 n 0000405154 00000 n 0000405291 00000 n 0000405431 00000 n 0000405513 00000 n 0000405650 00000 n 0000405786 00000 n 0000405868 00000 n 0000406005 00000 n 0000406141 00000 n 0000406223 00000 n 0000406360 00000 n 0000406496 00000 n 0000406578 00000 n 0000406715 00000 n 0000406855 00000 n 0000406937 00000 n 0000407074 00000 n 0000407214 00000 n 0000407296 00000 n 0000407434 00000 n 0000407574 00000 n 0000407656 00000 n 0000407793 00000 n 0000407933 00000 n 0000408015 00000 n 0000408152 00000 n 0000408288 00000 n 0000408370 00000 n 0000408507 00000 n 0000408647 00000 n 0000408729 00000 n 0000408866 00000 n 0000409006 00000 n 0000409088 00000 n 0000409225 00000 n 0000409361 00000 n 0000409443 00000 n 0000409580 00000 n 0000409720 00000 n 0000409802 00000 n 0000409939 00000 n 0000410079 00000 n 0000410161 00000 n 0000410298 00000 n 0000410438 00000 n 0000410520 00000 n 0000410657 00000 n 0000410793 00000 n 0000410875 00000 n 0000411012 00000 n 0000411148 00000 n 0000411230 00000 n 0000411367 00000 n 0000411507 00000 n 0000411589 00000 n 0000411725 00000 n 0000411865 00000 n 0000411947 00000 n 0000412084 00000 n 0000412220 00000 n 0000412302 00000 n 0000412439 00000 n 0000412579 00000 n 0000412661 00000 n 0000412798 00000 n 0000412938 00000 n 0000413020 00000 n 0000413156 00000 n 0000413291 00000 n 0000413373 00000 n 0000413508 00000 n 0000413646 00000 n 0000413728 00000 n 0000413863 00000 n 0000413997 00000 n 0000428340 00000 n 0000428364 00000 n 0000429358 00000 n 0000429575 00000 n 0000430053 00000 n 0000430075 00000 n 0000430273 00000 n 0000431103 00000 n 0000431125 00000 n 0000431323 00000 n 0000432178 00000 n 0000432200 00000 n 0000432398 00000 n 0000433037 00000 n 0000433059 00000 n 0000433257 00000 n 0000433895 00000 n 0000433917 00000 n 0000434115 00000 n 0000434685 00000 n 0000434707 00000 n 0000434905 00000 n 0000435435 00000 n 0000435457 00000 n 0000435655 00000 n 0000436248 00000 n 0000436270 00000 n 0000436468 00000 n 0000437061 00000 n 0000437083 00000 n 0000437281 00000 n 0000437708 00000 n 0000437730 00000 n 0000437928 00000 n 0000438516 00000 n 0000438538 00000 n 0000438736 00000 n 0000439275 00000 n 0000439297 00000 n 0000439495 00000 n 0000440038 00000 n 0000440060 00000 n 0000440258 00000 n 0000440798 00000 n 0000440820 00000 n 0000441018 00000 n 0000441574 00000 n 0000441596 00000 n 0000441794 00000 n 0000442333 00000 n 0000442355 00000 n 0000442553 00000 n 0000443095 00000 n 0000443117 00000 n 0000443315 00000 n 0000443855 00000 n 0000443877 00000 n 0000444075 00000 n 0000444687 00000 n 0000444709 00000 n 0000444907 00000 n 0000445494 00000 n 0000445516 00000 n 0000445714 00000 n 0000446278 00000 n 0000446300 00000 n 0000446498 00000 n 0000447033 00000 n 0000447055 00000 n 0000447253 00000 n 0000447806 00000 n 0000447828 00000 n 0000448026 00000 n 0000448672 00000 n 0000448694 00000 n 0000448892 00000 n 0000449471 00000 n 0000449493 00000 n 0000449691 00000 n 0000450224 00000 n 0000450246 00000 n 0000450444 00000 n 0000451046 00000 n 0000451068 00000 n 0000451266 00000 n 0000451803 00000 n 0000451825 00000 n 0000452023 00000 n 0000452583 00000 n 0000452605 00000 n 0000452803 00000 n 0000453425 00000 n 0000453447 00000 n 0000453645 00000 n 0000454299 00000 n 0000454321 00000 n 0000454519 00000 n 0000455062 00000 n 0000455084 00000 n 0000455282 00000 n 0000456607 00000 n 0000456630 00000 n 0000456828 00000 n 0000457201 00000 n 0000457223 00000 n 0000457421 00000 n 0000458741 00000 n 0000458764 00000 n 0000458962 00000 n 0000459349 00000 n 0000459371 00000 n 0000459569 00000 n 0000460874 00000 n 0000460897 00000 n 0000461095 00000 n 0000461491 00000 n 0000461513 00000 n 0000461711 00000 n 0000463041 00000 n 0000463064 00000 n 0000463262 00000 n 0000463887 00000 n 0000463909 00000 n 0000464107 00000 n 0000465450 00000 n 0000465473 00000 n 0000465671 00000 n 0000466273 00000 n 0000466295 00000 n 0000466493 00000 n 0000467793 00000 n 0000467816 00000 n 0000468014 00000 n 0000468673 00000 n 0000468695 00000 n 0000468893 00000 n 0000470196 00000 n 0000470219 00000 n 0000470417 00000 n 0000471078 00000 n 0000471100 00000 n 0000471298 00000 n 0000472588 00000 n 0000472611 00000 n 0000472809 00000 n 0000473468 00000 n 0000473490 00000 n 0000473688 00000 n 0000475027 00000 n 0000475050 00000 n 0000475248 00000 n 0000475801 00000 n 0000475823 00000 n 0000476021 00000 n 0000477355 00000 n 0000477378 00000 n 0000477576 00000 n 0000478129 00000 n 0000478151 00000 n 0000478349 00000 n 0000479669 00000 n 0000479692 00000 n 0000479890 00000 n 0000480443 00000 n 0000480465 00000 n 0000480663 00000 n 0000482021 00000 n 0000482044 00000 n 0000482242 00000 n 0000482766 00000 n 0000482788 00000 n 0000482986 00000 n 0000484274 00000 n 0000484297 00000 n 0000484495 00000 n 0000485028 00000 n 0000485050 00000 n 0000485248 00000 n 0000485903 00000 n 0000485925 00000 n 0000486123 00000 n 0000486876 00000 n 0000486898 00000 n 0000487096 00000 n 0000487850 00000 n 0000487872 00000 n 0000488070 00000 n 0000488737 00000 n 0000488759 00000 n 0000488957 00000 n 0000489613 00000 n 0000489635 00000 n 0000489833 00000 n 0000490518 00000 n 0000490540 00000 n 0000490738 00000 n 0000491651 00000 n 0000491673 00000 n 0000491871 00000 n 0000492540 00000 n 0000492562 00000 n 0000492760 00000 n 0000493414 00000 n 0000493436 00000 n 0000493634 00000 n 0000493716 00000 n 0000493854 00000 n 0000493994 00000 n 0000494076 00000 n 0000494213 00000 n 0000494349 00000 n 0000494431 00000 n 0000494568 00000 n 0000494704 00000 n 0000494786 00000 n 0000494923 00000 n 0000495063 00000 n 0000495145 00000 n 0000495282 00000 n 0000495422 00000 n 0000495504 00000 n 0000495641 00000 n 0000495781 00000 n 0000495863 00000 n 0000495999 00000 n 0000496135 00000 n 0000496217 00000 n 0000496353 00000 n 0000496493 00000 n 0000496575 00000 n 0000496712 00000 n 0000496848 00000 n 0000496930 00000 n 0000497068 00000 n 0000497208 00000 n 0000497290 00000 n 0000497426 00000 n 0000497562 00000 n 0000497644 00000 n 0000497781 00000 n 0000497921 00000 n 0000498003 00000 n 0000498140 00000 n 0000498280 00000 n 0000498362 00000 n 0000498499 00000 n 0000498639 00000 n 0000498721 00000 n 0000498858 00000 n 0000498998 00000 n 0000499080 00000 n 0000499217 00000 n 0000499357 00000 n 0000499439 00000 n 0000499576 00000 n 0000499716 00000 n 0000499798 00000 n 0000499935 00000 n 0000500075 00000 n 0000500157 00000 n 0000500294 00000 n 0000500430 00000 n 0000500512 00000 n 0000500649 00000 n 0000500789 00000 n 0000500871 00000 n 0000501008 00000 n 0000501144 00000 n 0000501226 00000 n 0000501363 00000 n 0000501503 00000 n 0000501585 00000 n 0000501722 00000 n 0000501862 00000 n 0000501944 00000 n 0000502081 00000 n 0000502217 00000 n 0000502299 00000 n 0000502436 00000 n 0000502572 00000 n 0000502654 00000 n 0000502791 00000 n 0000502931 00000 n 0000503013 00000 n 0000503150 00000 n 0000503290 00000 n 0000503372 00000 n 0000503509 00000 n 0000503645 00000 n 0000503727 00000 n 0000503864 00000 n 0000504000 00000 n 0000504082 00000 n 0000504219 00000 n 0000504359 00000 n 0000504441 00000 n 0000504578 00000 n 0000504714 00000 n 0000504796 00000 n 0000504933 00000 n 0000505069 00000 n 0000505151 00000 n 0000505288 00000 n 0000505424 00000 n 0000505506 00000 n 0000505643 00000 n 0000505783 00000 n 0000505865 00000 n 0000506002 00000 n 0000506138 00000 n 0000506220 00000 n 0000506357 00000 n 0000506493 00000 n 0000506575 00000 n 0000506712 00000 n 0000506852 00000 n 0000506934 00000 n 0000507071 00000 n 0000507207 00000 n 0000507289 00000 n 0000507425 00000 n 0000507561 00000 n 0000507643 00000 n 0000507779 00000 n 0000507915 00000 n 0000507997 00000 n 0000508134 00000 n 0000508270 00000 n 0000508352 00000 n 0000508489 00000 n 0000508629 00000 n 0000508711 00000 n 0000508848 00000 n 0000508988 00000 n 0000509070 00000 n 0000509207 00000 n 0000509343 00000 n 0000509425 00000 n 0000509562 00000 n 0000509698 00000 n 0000509780 00000 n 0000509917 00000 n 0000510053 00000 n 0000510135 00000 n 0000510271 00000 n 0000510411 00000 n 0000510493 00000 n 0000510630 00000 n 0000510770 00000 n 0000510852 00000 n 0000510989 00000 n 0000511125 00000 n 0000511207 00000 n 0000511344 00000 n 0000511480 00000 n 0000511562 00000 n 0000511699 00000 n 0000511839 00000 n 0000511921 00000 n 0000512056 00000 n 0000512191 00000 n 0000512273 00000 n 0000512408 00000 n 0000512542 00000 n 0000512624 00000 n 0000512758 00000 n 0000512892 00000 n 0000527413 00000 n 0000527437 00000 n 0000528431 00000 n 0000528648 00000 n 0000529292 00000 n 0000529314 00000 n 0000529512 00000 n 0000530304 00000 n 0000530326 00000 n 0000530524 00000 n 0000531122 00000 n 0000531144 00000 n 0000531342 00000 n 0000532098 00000 n 0000532120 00000 n 0000532318 00000 n 0000533003 00000 n 0000533025 00000 n 0000533223 00000 n 0000533960 00000 n 0000533982 00000 n 0000534180 00000 n 0000534810 00000 n 0000534832 00000 n 0000535030 00000 n 0000535750 00000 n 0000535772 00000 n 0000535970 00000 n 0000536662 00000 n 0000536684 00000 n 0000536882 00000 n 0000537618 00000 n 0000537640 00000 n 0000537838 00000 n 0000538446 00000 n 0000538468 00000 n 0000538666 00000 n 0000539469 00000 n 0000539491 00000 n 0000539689 00000 n 0000540433 00000 n 0000540455 00000 n 0000540653 00000 n 0000541407 00000 n 0000541429 00000 n 0000541627 00000 n 0000542263 00000 n 0000542285 00000 n 0000542483 00000 n 0000543106 00000 n 0000543128 00000 n 0000543326 00000 n 0000544119 00000 n 0000544141 00000 n 0000544339 00000 n 0000544948 00000 n 0000544970 00000 n 0000545168 00000 n 0000545926 00000 n 0000545948 00000 n 0000546146 00000 n 0000546888 00000 n 0000546910 00000 n 0000547108 00000 n 0000547862 00000 n 0000547884 00000 n 0000548082 00000 n 0000548860 00000 n 0000548882 00000 n 0000549080 00000 n 0000549829 00000 n 0000549851 00000 n 0000550049 00000 n 0000550679 00000 n 0000550701 00000 n 0000550899 00000 n 0000551319 00000 n 0000551341 00000 n 0000551539 00000 n 0000552093 00000 n 0000552115 00000 n 0000552313 00000 n 0000552859 00000 n 0000552881 00000 n 0000553079 00000 n 0000553630 00000 n 0000553652 00000 n 0000553850 00000 n 0000554441 00000 n 0000554463 00000 n 0000554661 00000 n 0000555206 00000 n 0000555228 00000 n 0000555426 00000 n 0000556000 00000 n 0000556022 00000 n 0000556220 00000 n 0000556765 00000 n 0000556787 00000 n 0000556985 00000 n 0000557540 00000 n 0000557562 00000 n 0000557760 00000 n 0000558542 00000 n 0000558564 00000 n 0000558762 00000 n 0000559615 00000 n 0000559637 00000 n 0000559835 00000 n 0000560615 00000 n 0000560637 00000 n 0000560835 00000 n 0000561695 00000 n 0000561717 00000 n 0000561915 00000 n 0000562630 00000 n 0000562652 00000 n 0000562850 00000 n 0000563475 00000 n 0000563497 00000 n 0000563695 00000 n 0000564419 00000 n 0000564441 00000 n 0000564639 00000 n 0000565431 00000 n 0000565453 00000 n 0000565651 00000 n 0000566437 00000 n 0000566459 00000 n 0000566657 00000 n 0000567507 00000 n 0000567529 00000 n 0000567727 00000 n 0000568506 00000 n 0000568528 00000 n 0000568726 00000 n 0000569574 00000 n 0000569596 00000 n 0000569794 00000 n 0000570525 00000 n 0000570547 00000 n 0000570745 00000 n 0000571516 00000 n 0000571538 00000 n 0000571736 00000 n 0000572586 00000 n 0000572608 00000 n 0000572806 00000 n 0000573542 00000 n 0000573564 00000 n 0000573762 00000 n 0000574535 00000 n 0000574557 00000 n 0000574755 00000 n 0000575595 00000 n 0000575617 00000 n 0000575815 00000 n 0000576593 00000 n 0000576615 00000 n 0000576813 00000 n 0000577667 00000 n 0000577689 00000 n 0000577887 00000 n 0000578656 00000 n 0000578678 00000 n 0000578876 00000 n 0000578958 00000 n 0000579095 00000 n 0000579235 00000 n 0000579317 00000 n 0000579454 00000 n 0000579590 00000 n 0000579672 00000 n 0000579809 00000 n 0000579945 00000 n 0000580027 00000 n 0000580164 00000 n 0000580300 00000 n 0000580382 00000 n 0000580519 00000 n 0000580655 00000 n 0000580737 00000 n 0000580874 00000 n 0000581014 00000 n 0000581096 00000 n 0000581233 00000 n 0000581369 00000 n 0000581451 00000 n 0000581588 00000 n 0000581728 00000 n 0000581810 00000 n 0000581947 00000 n 0000582083 00000 n 0000582165 00000 n 0000582302 00000 n 0000582438 00000 n 0000582520 00000 n 0000582656 00000 n 0000582796 00000 n 0000582878 00000 n 0000583015 00000 n 0000583151 00000 n 0000583233 00000 n 0000583370 00000 n 0000583510 00000 n 0000583592 00000 n 0000583729 00000 n 0000583869 00000 n 0000583951 00000 n 0000584088 00000 n 0000584224 00000 n 0000584306 00000 n 0000584443 00000 n 0000584579 00000 n 0000584661 00000 n 0000584798 00000 n 0000584934 00000 n 0000585016 00000 n 0000585153 00000 n 0000585289 00000 n 0000585371 00000 n 0000585507 00000 n 0000585643 00000 n 0000585725 00000 n 0000585862 00000 n 0000585998 00000 n 0000586080 00000 n 0000586217 00000 n 0000586357 00000 n 0000586439 00000 n 0000586576 00000 n 0000586712 00000 n 0000586794 00000 n 0000586931 00000 n 0000587067 00000 n 0000587149 00000 n 0000587286 00000 n 0000587426 00000 n 0000587508 00000 n 0000587646 00000 n 0000587786 00000 n 0000587868 00000 n 0000588005 00000 n 0000588145 00000 n 0000588227 00000 n 0000588364 00000 n 0000588500 00000 n 0000588582 00000 n 0000588719 00000 n 0000588859 00000 n 0000588941 00000 n 0000589078 00000 n 0000589218 00000 n 0000589300 00000 n 0000589437 00000 n 0000589577 00000 n 0000589659 00000 n 0000589796 00000 n 0000589936 00000 n 0000590018 00000 n 0000590155 00000 n 0000590291 00000 n 0000590373 00000 n 0000590510 00000 n 0000590646 00000 n 0000590728 00000 n 0000590865 00000 n 0000591005 00000 n 0000591087 00000 n 0000591224 00000 n 0000591364 00000 n 0000591446 00000 n 0000591583 00000 n 0000591719 00000 n 0000591801 00000 n 0000591938 00000 n 0000592078 00000 n 0000592160 00000 n 0000592297 00000 n 0000592437 00000 n 0000592519 00000 n 0000592656 00000 n 0000592796 00000 n 0000592878 00000 n 0000593015 00000 n 0000593151 00000 n 0000593233 00000 n 0000593370 00000 n 0000593510 00000 n 0000593592 00000 n 0000593729 00000 n 0000593865 00000 n 0000593947 00000 n 0000594083 00000 n 0000594223 00000 n 0000594305 00000 n 0000594442 00000 n 0000594578 00000 n 0000594660 00000 n 0000594797 00000 n 0000594937 00000 n 0000595019 00000 n 0000595156 00000 n 0000595296 00000 n 0000595378 00000 n 0000595515 00000 n 0000595655 00000 n 0000595737 00000 n 0000595874 00000 n 0000596010 00000 n 0000596092 00000 n 0000596229 00000 n 0000596369 00000 n 0000596451 00000 n 0000596588 00000 n 0000596724 00000 n 0000596806 00000 n 0000596943 00000 n 0000597083 00000 n 0000597165 00000 n 0000597301 00000 n 0000597440 00000 n 0000597522 00000 n 0000597657 00000 n 0000597795 00000 n 0000597877 00000 n 0000598012 00000 n 0000598146 00000 n 0000612617 00000 n 0000612641 00000 n 0000613635 00000 n 0000613852 00000 n 0000614705 00000 n 0000614727 00000 n 0000614925 00000 n 0000615408 00000 n 0000615430 00000 n 0000615628 00000 n 0000616545 00000 n 0000616567 00000 n 0000616765 00000 n 0000617379 00000 n 0000617401 00000 n 0000617599 00000 n 0000618259 00000 n 0000618281 00000 n 0000618479 00000 n 0000619146 00000 n 0000619168 00000 n 0000619366 00000 n 0000620028 00000 n 0000620050 00000 n 0000620248 00000 n 0000620915 00000 n 0000620937 00000 n 0000621135 00000 n 0000622005 00000 n 0000622027 00000 n 0000622225 00000 n 0000623104 00000 n 0000623126 00000 n 0000623324 00000 n 0000623913 00000 n 0000623935 00000 n 0000624133 00000 n 0000624739 00000 n 0000624761 00000 n 0000624959 00000 n 0000625559 00000 n 0000625581 00000 n 0000625779 00000 n 0000626385 00000 n 0000626407 00000 n 0000626605 00000 n 0000627206 00000 n 0000627228 00000 n 0000627426 00000 n 0000628277 00000 n 0000628299 00000 n 0000628497 00000 n 0000629347 00000 n 0000629369 00000 n 0000629567 00000 n 0000630399 00000 n 0000630421 00000 n 0000630619 00000 n 0000631484 00000 n 0000631506 00000 n 0000631704 00000 n 0000632542 00000 n 0000632564 00000 n 0000632762 00000 n 0000633620 00000 n 0000633642 00000 n 0000633840 00000 n 0000634688 00000 n 0000634710 00000 n 0000634908 00000 n 0000635776 00000 n 0000635798 00000 n 0000635996 00000 n 0000636843 00000 n 0000636865 00000 n 0000637063 00000 n 0000637933 00000 n 0000637955 00000 n 0000638153 00000 n 0000638997 00000 n 0000639019 00000 n 0000639217 00000 n 0000640069 00000 n 0000640091 00000 n 0000640289 00000 n 0000641160 00000 n 0000641182 00000 n 0000641380 00000 n 0000642250 00000 n 0000642272 00000 n 0000642470 00000 n 0000643336 00000 n 0000643358 00000 n 0000643556 00000 n 0000644399 00000 n 0000644421 00000 n 0000644619 00000 n 0000645473 00000 n 0000645495 00000 n 0000645693 00000 n 0000646516 00000 n 0000646538 00000 n 0000646736 00000 n 0000647573 00000 n 0000647595 00000 n 0000647793 00000 n 0000648644 00000 n 0000648666 00000 n 0000648864 00000 n 0000649686 00000 n 0000649708 00000 n 0000649906 00000 n 0000650725 00000 n 0000650747 00000 n 0000650945 00000 n 0000651794 00000 n 0000651816 00000 n 0000652014 00000 n 0000652876 00000 n 0000652898 00000 n 0000653096 00000 n 0000653555 00000 n 0000653577 00000 n 0000653775 00000 n 0000654632 00000 n 0000654654 00000 n 0000654852 00000 n 0000655497 00000 n 0000655519 00000 n 0000655717 00000 n 0000656435 00000 n 0000656457 00000 n 0000656655 00000 n 0000657239 00000 n 0000657261 00000 n 0000657459 00000 n 0000658202 00000 n 0000658224 00000 n 0000658422 00000 n 0000659335 00000 n 0000659357 00000 n 0000659555 00000 n 0000660413 00000 n 0000660435 00000 n 0000660633 00000 n 0000661347 00000 n 0000661369 00000 n 0000661567 00000 n 0000662472 00000 n 0000662494 00000 n 0000662692 00000 n 0000663291 00000 n 0000663313 00000 n 0000663511 00000 n 0000663932 00000 n 0000663954 00000 n 0000664152 00000 n 0000664696 00000 n 0000664718 00000 n 0000664916 00000 n 0000665463 00000 n 0000665485 00000 n 0000665683 00000 n 0000666279 00000 n 0000666301 00000 n 0000666499 00000 n 0000666581 00000 n 0000666718 00000 n 0000666858 00000 n 0000666940 00000 n 0000667078 00000 n 0000667218 00000 n 0000667300 00000 n 0000667437 00000 n 0000667573 00000 n 0000667655 00000 n 0000667792 00000 n 0000667932 00000 n 0000668014 00000 n 0000668151 00000 n 0000668291 00000 n 0000668373 00000 n 0000668510 00000 n 0000668650 00000 n 0000668732 00000 n 0000668868 00000 n 0000669008 00000 n 0000669090 00000 n 0000669227 00000 n 0000669367 00000 n 0000669449 00000 n 0000669586 00000 n 0000669722 00000 n 0000669804 00000 n 0000669941 00000 n 0000670077 00000 n 0000670159 00000 n 0000670296 00000 n 0000670436 00000 n 0000670518 00000 n 0000670655 00000 n 0000670791 00000 n 0000670873 00000 n 0000671010 00000 n 0000671150 00000 n 0000671232 00000 n 0000671369 00000 n 0000671509 00000 n 0000671591 00000 n 0000671728 00000 n 0000671868 00000 n 0000671950 00000 n 0000672086 00000 n 0000672222 00000 n 0000672304 00000 n 0000672441 00000 n 0000672581 00000 n 0000672663 00000 n 0000672800 00000 n 0000672940 00000 n 0000673022 00000 n 0000673159 00000 n 0000673299 00000 n 0000673381 00000 n 0000673518 00000 n 0000673658 00000 n 0000673740 00000 n 0000673876 00000 n 0000674016 00000 n 0000674098 00000 n 0000674234 00000 n 0000674370 00000 n 0000674452 00000 n 0000674588 00000 n 0000674724 00000 n 0000674806 00000 n 0000674943 00000 n 0000675083 00000 n 0000675165 00000 n 0000675302 00000 n 0000675442 00000 n 0000675524 00000 n 0000675661 00000 n 0000675801 00000 n 0000675883 00000 n 0000676020 00000 n 0000676160 00000 n 0000676242 00000 n 0000676379 00000 n 0000676515 00000 n 0000676597 00000 n 0000676734 00000 n 0000676870 00000 n 0000676952 00000 n 0000677088 00000 n 0000677224 00000 n 0000677306 00000 n 0000677443 00000 n 0000677583 00000 n 0000677665 00000 n 0000677802 00000 n 0000677942 00000 n 0000678024 00000 n 0000678161 00000 n 0000678301 00000 n 0000678383 00000 n 0000678520 00000 n 0000678660 00000 n 0000678742 00000 n 0000678879 00000 n 0000679019 00000 n 0000679101 00000 n 0000679238 00000 n 0000679374 00000 n 0000679456 00000 n 0000679592 00000 n 0000679732 00000 n 0000679814 00000 n 0000679951 00000 n 0000680087 00000 n 0000680169 00000 n 0000680306 00000 n 0000680446 00000 n 0000680528 00000 n 0000680665 00000 n 0000680805 00000 n 0000680887 00000 n 0000681024 00000 n 0000681164 00000 n 0000681246 00000 n 0000681383 00000 n 0000681523 00000 n 0000681605 00000 n 0000681742 00000 n 0000681882 00000 n 0000681964 00000 n 0000682101 00000 n 0000682241 00000 n 0000682323 00000 n 0000682460 00000 n 0000682600 00000 n 0000682682 00000 n 0000682819 00000 n 0000682955 00000 n 0000683037 00000 n 0000683173 00000 n 0000683313 00000 n 0000683395 00000 n 0000683532 00000 n 0000683672 00000 n 0000683754 00000 n 0000683891 00000 n 0000684031 00000 n 0000684113 00000 n 0000684250 00000 n 0000684390 00000 n 0000684472 00000 n 0000684609 00000 n 0000684749 00000 n 0000684831 00000 n 0000684967 00000 n 0000685102 00000 n 0000685184 00000 n 0000685319 00000 n 0000685457 00000 n 0000685539 00000 n 0000685674 00000 n 0000685812 00000 n 0000700358 00000 n 0000700382 00000 n 0000701376 00000 n 0000701593 00000 n 0000702143 00000 n 0000702165 00000 n 0000702363 00000 n 0000703037 00000 n 0000703059 00000 n 0000703257 00000 n 0000703802 00000 n 0000703824 00000 n 0000704022 00000 n 0000704572 00000 n 0000704594 00000 n 0000704792 00000 n 0000705397 00000 n 0000705419 00000 n 0000705617 00000 n 0000706180 00000 n 0000706202 00000 n 0000706400 00000 n 0000707118 00000 n 0000707140 00000 n 0000707338 00000 n 0000707902 00000 n 0000707924 00000 n 0000708122 00000 n 0000708815 00000 n 0000708837 00000 n 0000709035 00000 n 0000709603 00000 n 0000709625 00000 n 0000709823 00000 n 0000710441 00000 n 0000710463 00000 n 0000710661 00000 n 0000711285 00000 n 0000711307 00000 n 0000711505 00000 n 0000712068 00000 n 0000712090 00000 n 0000712288 00000 n 0000713134 00000 n 0000713156 00000 n 0000713354 00000 n 0000713963 00000 n 0000713985 00000 n 0000714183 00000 n 0000714924 00000 n 0000714946 00000 n 0000715144 00000 n 0000715703 00000 n 0000715725 00000 n 0000715923 00000 n 0000716730 00000 n 0000716752 00000 n 0000716950 00000 n 0000717519 00000 n 0000717541 00000 n 0000717739 00000 n 0000718615 00000 n 0000718637 00000 n 0000718835 00000 n 0000720303 00000 n 0000720326 00000 n 0000720524 00000 n 0000721173 00000 n 0000721195 00000 n 0000721393 00000 n 0000721962 00000 n 0000721984 00000 n 0000722182 00000 n 0000723031 00000 n 0000723053 00000 n 0000723251 00000 n 0000723834 00000 n 0000723856 00000 n 0000724054 00000 n 0000724902 00000 n 0000724924 00000 n 0000725122 00000 n 0000725784 00000 n 0000725806 00000 n 0000726004 00000 n 0000726502 00000 n 0000726524 00000 n 0000726722 00000 n 0000727301 00000 n 0000727323 00000 n 0000727521 00000 n 0000728279 00000 n 0000728301 00000 n 0000728499 00000 n 0000728918 00000 n 0000728940 00000 n 0000729138 00000 n 0000729838 00000 n 0000729860 00000 n 0000730058 00000 n 0000730867 00000 n 0000730889 00000 n 0000731087 00000 n 0000731935 00000 n 0000731957 00000 n 0000732155 00000 n 0000732928 00000 n 0000732950 00000 n 0000733148 00000 n 0000733650 00000 n 0000733672 00000 n 0000733870 00000 n 0000734567 00000 n 0000734589 00000 n 0000734787 00000 n 0000735243 00000 n 0000735265 00000 n 0000735463 00000 n 0000736012 00000 n 0000736034 00000 n 0000736232 00000 n 0000736780 00000 n 0000736802 00000 n 0000737000 00000 n 0000737588 00000 n 0000737610 00000 n 0000737808 00000 n 0000738360 00000 n 0000738382 00000 n 0000738580 00000 n 0000739027 00000 n 0000739049 00000 n 0000739247 00000 n 0000739834 00000 n 0000739856 00000 n 0000740054 00000 n 0000740671 00000 n 0000740693 00000 n 0000740891 00000 n 0000741566 00000 n 0000741588 00000 n 0000741786 00000 n 0000742515 00000 n 0000742537 00000 n 0000742735 00000 n 0000743381 00000 n 0000743403 00000 n 0000743601 00000 n 0000744210 00000 n 0000744232 00000 n 0000744430 00000 n 0000745034 00000 n 0000745056 00000 n 0000745254 00000 n 0000745855 00000 n 0000745877 00000 n 0000746075 00000 n 0000746689 00000 n 0000746711 00000 n 0000746909 00000 n 0000747576 00000 n 0000747598 00000 n 0000747796 00000 n 0000748214 00000 n 0000748236 00000 n 0000748434 00000 n 0000748516 00000 n 0000748653 00000 n 0000748789 00000 n 0000748871 00000 n 0000749008 00000 n 0000749148 00000 n 0000749230 00000 n 0000749367 00000 n 0000749503 00000 n 0000749585 00000 n 0000749722 00000 n 0000749862 00000 n 0000749944 00000 n 0000750081 00000 n 0000750221 00000 n 0000750303 00000 n 0000750440 00000 n 0000750580 00000 n 0000750662 00000 n 0000750799 00000 n 0000750939 00000 n 0000751021 00000 n 0000751158 00000 n 0000751294 00000 n 0000751376 00000 n 0000751513 00000 n 0000751653 00000 n 0000751735 00000 n 0000751872 00000 n 0000752012 00000 n 0000752094 00000 n 0000752231 00000 n 0000752371 00000 n 0000752453 00000 n 0000752590 00000 n 0000752730 00000 n 0000752812 00000 n 0000752949 00000 n 0000753085 00000 n 0000753167 00000 n 0000753304 00000 n 0000753444 00000 n 0000753526 00000 n 0000753663 00000 n 0000753799 00000 n 0000753881 00000 n 0000754018 00000 n 0000754158 00000 n 0000754240 00000 n 0000754377 00000 n 0000754513 00000 n 0000754595 00000 n 0000754731 00000 n 0000754871 00000 n 0000754953 00000 n 0000755090 00000 n 0000755230 00000 n 0000755312 00000 n 0000755449 00000 n 0000755589 00000 n 0000755671 00000 n 0000755808 00000 n 0000755948 00000 n 0000756030 00000 n 0000756166 00000 n 0000756302 00000 n 0000756384 00000 n 0000756521 00000 n 0000756661 00000 n 0000756743 00000 n 0000756880 00000 n 0000757020 00000 n 0000757102 00000 n 0000757238 00000 n 0000757374 00000 n 0000757456 00000 n 0000757593 00000 n 0000757729 00000 n 0000757811 00000 n 0000757948 00000 n 0000758084 00000 n 0000758166 00000 n 0000758303 00000 n 0000758443 00000 n 0000758525 00000 n 0000758661 00000 n 0000758801 00000 n 0000758883 00000 n 0000759020 00000 n 0000759156 00000 n 0000759238 00000 n 0000759376 00000 n 0000759516 00000 n 0000759598 00000 n 0000759735 00000 n 0000759871 00000 n 0000759953 00000 n 0000760090 00000 n 0000760230 00000 n 0000760312 00000 n 0000760449 00000 n 0000760585 00000 n 0000760667 00000 n 0000760804 00000 n 0000760940 00000 n 0000761022 00000 n 0000761160 00000 n 0000761300 00000 n 0000761382 00000 n 0000761519 00000 n 0000761655 00000 n 0000761737 00000 n 0000761875 00000 n 0000762015 00000 n 0000762097 00000 n 0000762234 00000 n 0000762370 00000 n 0000762452 00000 n 0000762589 00000 n 0000762725 00000 n 0000762807 00000 n 0000762944 00000 n 0000763080 00000 n 0000763162 00000 n 0000763299 00000 n 0000763435 00000 n 0000763517 00000 n 0000763655 00000 n 0000763795 00000 n 0000763877 00000 n 0000764014 00000 n 0000764154 00000 n 0000764236 00000 n 0000764373 00000 n 0000764509 00000 n 0000764591 00000 n 0000764728 00000 n 0000764868 00000 n 0000764950 00000 n 0000765087 00000 n 0000765227 00000 n 0000765309 00000 n 0000765446 00000 n 0000765582 00000 n 0000765664 00000 n 0000765801 00000 n 0000765941 00000 n 0000766023 00000 n 0000766160 00000 n 0000766300 00000 n 0000766382 00000 n 0000766519 00000 n 0000766659 00000 n 0000766741 00000 n 0000766877 00000 n 0000767012 00000 n 0000767094 00000 n 0000767229 00000 n 0000767363 00000 n 0000767445 00000 n 0000767581 00000 n 0000767719 00000 n 0000782513 00000 n 0000782537 00000 n 0000783531 00000 n 0000783748 00000 n 0000784554 00000 n 0000784576 00000 n 0000784774 00000 n 0000785576 00000 n 0000785598 00000 n 0000785796 00000 n 0000786523 00000 n 0000786545 00000 n 0000786743 00000 n 0000787492 00000 n 0000787514 00000 n 0000787712 00000 n 0000788402 00000 n 0000788424 00000 n 0000788622 00000 n 0000789327 00000 n 0000789349 00000 n 0000789547 00000 n 0000790338 00000 n 0000790360 00000 n 0000790558 00000 n 0000791364 00000 n 0000791386 00000 n 0000791584 00000 n 0000792304 00000 n 0000792326 00000 n 0000792524 00000 n 0000792940 00000 n 0000792962 00000 n 0000793160 00000 n 0000793793 00000 n 0000793815 00000 n 0000794013 00000 n 0000794698 00000 n 0000794720 00000 n 0000794918 00000 n 0000795522 00000 n 0000795544 00000 n 0000795742 00000 n 0000796463 00000 n 0000796485 00000 n 0000796683 00000 n 0000797470 00000 n 0000797492 00000 n 0000797690 00000 n 0000798411 00000 n 0000798433 00000 n 0000798631 00000 n 0000799334 00000 n 0000799356 00000 n 0000799554 00000 n 0000800223 00000 n 0000800245 00000 n 0000800443 00000 n 0000801125 00000 n 0000801147 00000 n 0000801345 00000 n 0000801988 00000 n 0000802010 00000 n 0000802208 00000 n 0000802951 00000 n 0000802973 00000 n 0000803171 00000 n 0000803562 00000 n 0000803584 00000 n 0000803782 00000 n 0000804341 00000 n 0000804363 00000 n 0000804561 00000 n 0000805094 00000 n 0000805116 00000 n 0000805314 00000 n 0000806050 00000 n 0000806072 00000 n 0000806270 00000 n 0000806892 00000 n 0000806914 00000 n 0000807112 00000 n 0000808441 00000 n 0000808464 00000 n 0000808662 00000 n 0000809646 00000 n 0000809668 00000 n 0000809866 00000 n 0000810567 00000 n 0000810589 00000 n 0000810787 00000 n 0000811486 00000 n 0000811508 00000 n 0000811706 00000 n 0000812406 00000 n 0000812428 00000 n 0000812626 00000 n 0000813330 00000 n 0000813352 00000 n 0000813550 00000 n 0000814251 00000 n 0000814273 00000 n 0000814471 00000 n 0000815316 00000 n 0000815338 00000 n 0000815536 00000 n 0000816288 00000 n 0000816310 00000 n 0000816508 00000 n 0000817413 00000 n 0000817435 00000 n 0000817633 00000 n 0000818332 00000 n 0000818354 00000 n 0000818552 00000 n 0000819252 00000 n 0000819274 00000 n 0000819472 00000 n 0000820304 00000 n 0000820326 00000 n 0000820524 00000 n 0000821356 00000 n 0000821378 00000 n 0000821576 00000 n 0000822597 00000 n 0000822619 00000 n 0000822817 00000 n 0000823796 00000 n 0000823818 00000 n 0000824016 00000 n 0000824700 00000 n 0000824722 00000 n 0000824920 00000 n 0000825625 00000 n 0000825647 00000 n 0000825845 00000 n 0000826571 00000 n 0000826593 00000 n 0000826791 00000 n 0000827472 00000 n 0000827494 00000 n 0000827692 00000 n 0000828393 00000 n 0000828415 00000 n 0000828613 00000 n 0000829330 00000 n 0000829352 00000 n 0000829550 00000 n 0000830251 00000 n 0000830273 00000 n 0000830471 00000 n 0000831188 00000 n 0000831210 00000 n 0000831408 00000 n 0000832109 00000 n 0000832131 00000 n 0000832329 00000 n 0000833046 00000 n 0000833068 00000 n 0000833266 00000 n 0000833966 00000 n 0000833988 00000 n 0000834186 00000 n 0000834902 00000 n 0000834924 00000 n 0000835122 00000 n 0000835204 00000 n 0000835341 00000 n 0000835481 00000 n 0000835563 00000 n 0000835700 00000 n 0000835836 00000 n 0000835918 00000 n 0000836055 00000 n 0000836191 00000 n 0000836273 00000 n 0000836410 00000 n 0000836550 00000 n 0000836632 00000 n 0000836769 00000 n 0000836905 00000 n 0000836987 00000 n 0000837124 00000 n 0000837264 00000 n 0000837346 00000 n 0000837483 00000 n 0000837623 00000 n 0000837705 00000 n 0000837842 00000 n 0000837978 00000 n 0000838060 00000 n 0000838197 00000 n 0000838333 00000 n 0000838415 00000 n 0000838553 00000 n 0000838693 00000 n 0000838775 00000 n 0000838912 00000 n 0000839048 00000 n 0000839130 00000 n 0000839267 00000 n 0000839403 00000 n 0000839485 00000 n 0000839621 00000 n 0000839761 00000 n 0000839843 00000 n 0000839980 00000 n 0000840120 00000 n 0000840202 00000 n 0000840339 00000 n 0000840479 00000 n 0000840561 00000 n 0000840698 00000 n 0000840838 00000 n 0000840920 00000 n 0000841056 00000 n 0000841192 00000 n 0000841274 00000 n 0000841411 00000 n 0000841551 00000 n 0000841633 00000 n 0000841770 00000 n 0000841906 00000 n 0000841988 00000 n 0000842125 00000 n 0000842265 00000 n 0000842347 00000 n 0000842484 00000 n 0000842624 00000 n 0000842706 00000 n 0000842843 00000 n 0000842983 00000 n 0000843065 00000 n 0000843202 00000 n 0000843342 00000 n 0000843424 00000 n 0000843562 00000 n 0000843702 00000 n 0000843784 00000 n 0000843920 00000 n 0000844056 00000 n 0000844138 00000 n 0000844275 00000 n 0000844411 00000 n 0000844493 00000 n 0000844630 00000 n 0000844770 00000 n 0000844852 00000 n 0000844989 00000 n 0000845129 00000 n 0000845211 00000 n 0000845348 00000 n 0000845484 00000 n 0000845566 00000 n 0000845703 00000 n 0000845839 00000 n 0000845921 00000 n 0000846058 00000 n 0000846194 00000 n 0000846276 00000 n 0000846413 00000 n 0000846553 00000 n 0000846635 00000 n 0000846772 00000 n 0000846908 00000 n 0000846990 00000 n 0000847127 00000 n 0000847263 00000 n 0000847345 00000 n 0000847482 00000 n 0000847622 00000 n 0000847704 00000 n 0000847841 00000 n 0000847977 00000 n 0000848059 00000 n 0000848196 00000 n 0000848336 00000 n 0000848418 00000 n 0000848555 00000 n 0000848695 00000 n 0000848777 00000 n 0000848914 00000 n 0000849054 00000 n 0000849136 00000 n 0000849273 00000 n 0000849413 00000 n 0000849495 00000 n 0000849631 00000 n 0000849771 00000 n 0000849853 00000 n 0000849990 00000 n 0000850130 00000 n 0000850212 00000 n 0000850349 00000 n 0000850485 00000 n 0000850567 00000 n 0000850704 00000 n 0000850840 00000 n 0000850922 00000 n 0000851059 00000 n 0000851195 00000 n 0000851277 00000 n 0000851414 00000 n 0000851554 00000 n 0000851636 00000 n 0000851773 00000 n 0000851909 00000 n 0000851991 00000 n 0000852128 00000 n 0000852268 00000 n 0000852350 00000 n 0000852487 00000 n 0000852623 00000 n 0000852705 00000 n 0000852842 00000 n 0000852982 00000 n 0000853064 00000 n 0000853201 00000 n 0000853337 00000 n 0000853419 00000 n 0000853555 00000 n 0000853694 00000 n 0000853776 00000 n 0000853911 00000 n 0000854049 00000 n 0000854131 00000 n 0000854266 00000 n 0000854404 00000 n 0000869264 00000 n 0000869288 00000 n 0000870282 00000 n 0000870499 00000 n 0000871204 00000 n 0000871226 00000 n 0000871424 00000 n 0000872153 00000 n 0000872175 00000 n 0000872373 00000 n 0000873177 00000 n 0000873199 00000 n 0000873397 00000 n 0000874219 00000 n 0000874241 00000 n 0000874439 00000 n 0000875281 00000 n 0000875303 00000 n 0000875501 00000 n 0000876192 00000 n 0000876214 00000 n 0000876412 00000 n 0000877120 00000 n 0000877142 00000 n 0000877340 00000 n 0000878071 00000 n 0000878093 00000 n 0000878291 00000 n 0000879159 00000 n 0000879181 00000 n 0000879379 00000 n 0000880306 00000 n 0000880328 00000 n 0000880526 00000 n 0000881289 00000 n 0000881311 00000 n 0000881509 00000 n 0000882817 00000 n 0000882840 00000 n 0000883038 00000 n 0000884088 00000 n 0000884110 00000 n 0000884308 00000 n 0000885012 00000 n 0000885034 00000 n 0000885232 00000 n 0000886145 00000 n 0000886167 00000 n 0000886365 00000 n 0000887063 00000 n 0000887085 00000 n 0000887283 00000 n 0000887981 00000 n 0000888003 00000 n 0000888201 00000 n 0000889028 00000 n 0000889050 00000 n 0000889248 00000 n 0000890075 00000 n 0000890097 00000 n 0000890295 00000 n 0000891260 00000 n 0000891282 00000 n 0000891480 00000 n 0000892192 00000 n 0000892214 00000 n 0000892412 00000 n 0000893141 00000 n 0000893163 00000 n 0000893361 00000 n 0000894073 00000 n 0000894095 00000 n 0000894293 00000 n 0000895022 00000 n 0000895044 00000 n 0000895242 00000 n 0000895954 00000 n 0000895976 00000 n 0000896174 00000 n 0000896903 00000 n 0000896925 00000 n 0000897123 00000 n 0000897832 00000 n 0000897854 00000 n 0000898052 00000 n 0000898778 00000 n 0000898800 00000 n 0000898998 00000 n 0000899816 00000 n 0000899838 00000 n 0000900036 00000 n 0000900870 00000 n 0000900892 00000 n 0000901090 00000 n 0000901965 00000 n 0000901987 00000 n 0000902185 00000 n 0000902886 00000 n 0000902908 00000 n 0000903106 00000 n 0000903824 00000 n 0000903846 00000 n 0000904044 00000 n 0000904784 00000 n 0000904806 00000 n 0000905004 00000 n 0000905634 00000 n 0000905656 00000 n 0000905854 00000 n 0000906599 00000 n 0000906621 00000 n 0000906819 00000 n 0000907564 00000 n 0000907586 00000 n 0000907784 00000 n 0000908527 00000 n 0000908549 00000 n 0000908747 00000 n 0000909497 00000 n 0000909519 00000 n 0000909717 00000 n 0000910465 00000 n 0000910487 00000 n 0000910685 00000 n 0000911414 00000 n 0000911436 00000 n 0000911634 00000 n 0000912421 00000 n 0000912443 00000 n 0000912641 00000 n 0000913385 00000 n 0000913407 00000 n 0000913605 00000 n 0000914348 00000 n 0000914370 00000 n 0000914568 00000 n 0000915308 00000 n 0000915330 00000 n 0000915528 00000 n 0000916276 00000 n 0000916298 00000 n 0000916496 00000 n 0000917237 00000 n 0000917259 00000 n 0000917457 00000 n 0000918188 00000 n 0000918210 00000 n 0000918408 00000 n 0000919135 00000 n 0000919157 00000 n 0000919355 00000 n 0000920142 00000 n 0000920164 00000 n 0000920362 00000 n 0000920902 00000 n 0000920924 00000 n 0000921122 00000 n 0000921731 00000 n 0000921753 00000 n 0000921951 00000 n 0000922618 00000 n 0000922640 00000 n 0000922838 00000 n 0000923545 00000 n 0000923567 00000 n 0000923765 00000 n 0000923847 00000 n 0000923984 00000 n 0000924120 00000 n 0000924202 00000 n 0000924338 00000 n 0000924474 00000 n 0000924556 00000 n 0000924693 00000 n 0000924833 00000 n 0000924915 00000 n 0000925052 00000 n 0000925188 00000 n 0000925270 00000 n 0000925407 00000 n 0000925547 00000 n 0000925629 00000 n 0000925766 00000 n 0000925902 00000 n 0000925984 00000 n 0000926121 00000 n 0000926257 00000 n 0000926339 00000 n 0000926476 00000 n 0000926616 00000 n 0000926698 00000 n 0000926835 00000 n 0000926975 00000 n 0000927057 00000 n 0000927194 00000 n 0000927330 00000 n 0000927412 00000 n 0000927549 00000 n 0000927689 00000 n 0000927771 00000 n 0000927908 00000 n 0000928044 00000 n 0000928126 00000 n 0000928263 00000 n 0000928399 00000 n 0000928481 00000 n 0000928618 00000 n 0000928754 00000 n 0000928836 00000 n 0000928973 00000 n 0000929113 00000 n 0000929195 00000 n 0000929332 00000 n 0000929472 00000 n 0000929554 00000 n 0000929691 00000 n 0000929831 00000 n 0000929913 00000 n 0000930050 00000 n 0000930190 00000 n 0000930272 00000 n 0000930409 00000 n 0000930549 00000 n 0000930631 00000 n 0000930768 00000 n 0000930908 00000 n 0000930990 00000 n 0000931127 00000 n 0000931267 00000 n 0000931349 00000 n 0000931486 00000 n 0000931626 00000 n 0000931708 00000 n 0000931845 00000 n 0000931985 00000 n 0000932067 00000 n 0000932204 00000 n 0000932344 00000 n 0000932426 00000 n 0000932563 00000 n 0000932703 00000 n 0000932785 00000 n 0000932922 00000 n 0000933062 00000 n 0000933144 00000 n 0000933281 00000 n 0000933417 00000 n 0000933499 00000 n 0000933636 00000 n 0000933776 00000 n 0000933858 00000 n 0000933995 00000 n 0000934135 00000 n 0000934217 00000 n 0000934354 00000 n 0000934490 00000 n 0000934572 00000 n 0000934709 00000 n 0000934849 00000 n 0000934931 00000 n 0000935068 00000 n 0000935204 00000 n 0000935286 00000 n 0000935423 00000 n 0000935563 00000 n 0000935645 00000 n 0000935782 00000 n 0000935922 00000 n 0000936004 00000 n 0000936142 00000 n 0000936282 00000 n 0000936364 00000 n 0000936500 00000 n 0000936636 00000 n 0000936718 00000 n 0000936855 00000 n 0000936995 00000 n 0000937077 00000 n 0000937214 00000 n 0000937350 00000 n 0000937432 00000 n 0000937569 00000 n 0000937705 00000 n 0000937787 00000 n 0000937924 00000 n 0000938064 00000 n 0000938146 00000 n 0000938283 00000 n 0000938419 00000 n 0000938501 00000 n 0000938638 00000 n 0000938778 00000 n 0000938860 00000 n 0000938997 00000 n 0000939133 00000 n 0000939215 00000 n 0000939352 00000 n 0000939488 00000 n 0000939570 00000 n 0000939707 00000 n 0000939847 00000 n 0000939929 00000 n 0000940066 00000 n 0000940206 00000 n 0000940288 00000 n 0000940425 00000 n 0000940561 00000 n 0000940643 00000 n 0000940780 00000 n 0000940920 00000 n 0000941002 00000 n 0000941139 00000 n 0000941279 00000 n 0000941361 00000 n 0000941498 00000 n 0000941638 00000 n 0000941720 00000 n 0000941858 00000 n 0000941998 00000 n 0000942080 00000 n 0000942216 00000 n 0000942355 00000 n 0000942437 00000 n 0000942572 00000 n 0000942710 00000 n 0000942792 00000 n 0000942927 00000 n 0000943065 00000 n 0000957246 00000 n 0000957270 00000 n 0000958264 00000 n 0000958481 00000 n 0000959089 00000 n 0000959111 00000 n 0000959309 00000 n 0000959810 00000 n 0000959832 00000 n 0000960030 00000 n 0000960696 00000 n 0000960718 00000 n 0000960916 00000 n 0000961599 00000 n 0000961621 00000 n 0000961819 00000 n 0000962686 00000 n 0000962708 00000 n 0000962906 00000 n 0000963581 00000 n 0000963603 00000 n 0000963801 00000 n 0000964678 00000 n 0000964700 00000 n 0000964898 00000 n 0000965627 00000 n 0000965649 00000 n 0000965847 00000 n 0000966637 00000 n 0000966659 00000 n 0000966857 00000 n 0000967608 00000 n 0000967630 00000 n 0000967828 00000 n 0000968447 00000 n 0000968469 00000 n 0000968667 00000 n 0000969512 00000 n 0000969534 00000 n 0000969732 00000 n 0000970480 00000 n 0000970502 00000 n 0000970700 00000 n 0000971486 00000 n 0000971508 00000 n 0000971706 00000 n 0000972417 00000 n 0000972439 00000 n 0000972637 00000 n 0000973561 00000 n 0000973583 00000 n 0000973781 00000 n 0000974944 00000 n 0000974967 00000 n 0000975165 00000 n 0000975684 00000 n 0000975706 00000 n 0000975904 00000 n 0000976581 00000 n 0000976603 00000 n 0000976801 00000 n 0000977386 00000 n 0000977408 00000 n 0000977606 00000 n 0000978339 00000 n 0000978361 00000 n 0000978559 00000 n 0000979204 00000 n 0000979226 00000 n 0000979424 00000 n 0000980023 00000 n 0000980045 00000 n 0000980243 00000 n 0000980827 00000 n 0000980849 00000 n 0000981047 00000 n 0000981630 00000 n 0000981652 00000 n 0000981850 00000 n 0000982488 00000 n 0000982510 00000 n 0000982708 00000 n 0000983919 00000 n 0000983942 00000 n 0000984140 00000 n 0000984921 00000 n 0000984943 00000 n 0000985141 00000 n 0000985968 00000 n 0000985990 00000 n 0000986188 00000 n 0000987091 00000 n 0000987113 00000 n 0000987311 00000 n 0000988234 00000 n 0000988256 00000 n 0000988454 00000 n 0000989106 00000 n 0000989128 00000 n 0000989326 00000 n 0000990050 00000 n 0000990072 00000 n 0000990270 00000 n 0000991036 00000 n 0000991058 00000 n 0000991256 00000 n 0000991965 00000 n 0000991987 00000 n 0000992185 00000 n 0000992795 00000 n 0000992817 00000 n 0000993015 00000 n 0000993659 00000 n 0000993681 00000 n 0000993879 00000 n 0000994481 00000 n 0000994503 00000 n 0000994701 00000 n 0000995339 00000 n 0000995361 00000 n 0000995559 00000 n 0000996172 00000 n 0000996194 00000 n 0000996392 00000 n 0000997033 00000 n 0000997055 00000 n 0000997253 00000 n 0000997850 00000 n 0000997872 00000 n 0000998070 00000 n 0000998705 00000 n 0000998727 00000 n 0000998925 00000 n 0000999536 00000 n 0000999558 00000 n 0000999756 00000 n 0001000387 00000 n 0001000409 00000 n 0001000607 00000 n 0001001219 00000 n 0001001241 00000 n 0001001439 00000 n 0001002087 00000 n 0001002109 00000 n 0001002307 00000 n 0001002934 00000 n 0001002956 00000 n 0001003154 00000 n 0001003794 00000 n 0001003816 00000 n 0001004014 00000 n 0001004621 00000 n 0001004643 00000 n 0001004841 00000 n 0001005451 00000 n 0001005473 00000 n 0001005671 00000 n 0001006265 00000 n 0001006287 00000 n 0001006485 00000 n 0001007092 00000 n 0001007114 00000 n 0001007312 00000 n 0001007995 00000 n 0001008017 00000 n 0001008215 00000 n 0001008297 00000 n 0001008434 00000 n 0001008570 00000 n 0001008652 00000 n 0001008790 00000 n 0001008930 00000 n 0001009012 00000 n 0001009148 00000 n 0001009288 00000 n 0001009370 00000 n 0001009507 00000 n 0001009643 00000 n 0001009725 00000 n 0001009862 00000 n 0001009998 00000 n 0001010080 00000 n 0001010217 00000 n 0001010357 00000 n 0001010439 00000 n 0001010576 00000 n 0001010716 00000 n 0001010798 00000 n 0001010935 00000 n 0001011071 00000 n 0001011153 00000 n 0001011290 00000 n 0001011426 00000 n 0001011508 00000 n 0001011645 00000 n 0001011781 00000 n 0001011863 00000 n 0001012000 00000 n 0001012136 00000 n 0001012218 00000 n 0001012355 00000 n 0001012491 00000 n 0001012573 00000 n 0001012710 00000 n 0001012850 00000 n 0001012932 00000 n 0001013069 00000 n 0001013205 00000 n 0001013287 00000 n 0001013424 00000 n 0001013560 00000 n 0001013642 00000 n 0001013779 00000 n 0001013915 00000 n 0001013997 00000 n 0001014134 00000 n 0001014270 00000 n 0001014352 00000 n 0001014490 00000 n 0001014630 00000 n 0001014712 00000 n 0001014849 00000 n 0001014989 00000 n 0001015071 00000 n 0001015208 00000 n 0001015348 00000 n 0001015430 00000 n 0001015567 00000 n 0001015707 00000 n 0001015789 00000 n 0001015925 00000 n 0001016065 00000 n 0001016147 00000 n 0001016284 00000 n 0001016420 00000 n 0001016502 00000 n 0001016638 00000 n 0001016774 00000 n 0001016856 00000 n 0001016993 00000 n 0001017129 00000 n 0001017211 00000 n 0001017348 00000 n 0001017484 00000 n 0001017566 00000 n 0001017703 00000 n 0001017839 00000 n 0001017921 00000 n 0001018058 00000 n 0001018194 00000 n 0001018276 00000 n 0001018413 00000 n 0001018553 00000 n 0001018635 00000 n 0001018772 00000 n 0001018908 00000 n 0001018990 00000 n 0001019126 00000 n 0001019262 00000 n 0001019344 00000 n 0001019482 00000 n 0001019622 00000 n 0001019704 00000 n 0001019841 00000 n 0001019981 00000 n 0001020063 00000 n 0001020200 00000 n 0001020340 00000 n 0001020422 00000 n 0001020558 00000 n 0001020698 00000 n 0001020780 00000 n 0001020916 00000 n 0001021052 00000 n 0001021134 00000 n 0001021271 00000 n 0001021407 00000 n 0001021489 00000 n 0001021626 00000 n 0001021762 00000 n 0001021844 00000 n 0001021980 00000 n 0001022120 00000 n 0001022202 00000 n 0001022338 00000 n 0001022478 00000 n 0001022560 00000 n 0001022696 00000 n 0001022832 00000 n 0001022914 00000 n 0001023051 00000 n 0001023191 00000 n 0001023273 00000 n 0001023410 00000 n 0001023546 00000 n 0001023628 00000 n 0001023764 00000 n 0001023904 00000 n 0001023986 00000 n 0001024123 00000 n 0001024259 00000 n 0001024341 00000 n 0001024477 00000 n 0001024617 00000 n 0001024699 00000 n 0001024836 00000 n 0001024972 00000 n 0001025054 00000 n 0001025190 00000 n 0001025330 00000 n 0001025412 00000 n 0001025549 00000 n 0001025685 00000 n 0001025767 00000 n 0001025903 00000 n 0001026043 00000 n 0001026125 00000 n 0001026262 00000 n 0001026398 00000 n 0001026480 00000 n 0001026615 00000 n 0001026754 00000 n 0001026836 00000 n 0001026971 00000 n 0001027109 00000 n 0001027191 00000 n 0001027325 00000 n 0001027463 00000 n 0001042410 00000 n 0001042434 00000 n 0001043428 00000 n 0001043645 00000 n 0001044253 00000 n 0001044275 00000 n 0001044473 00000 n 0001045188 00000 n 0001045210 00000 n 0001045408 00000 n 0001046020 00000 n 0001046042 00000 n 0001046240 00000 n 0001046858 00000 n 0001046880 00000 n 0001047078 00000 n 0001047774 00000 n 0001047796 00000 n 0001047994 00000 n 0001048428 00000 n 0001048450 00000 n 0001048648 00000 n 0001049259 00000 n 0001049281 00000 n 0001049479 00000 n 0001050363 00000 n 0001050385 00000 n 0001050583 00000 n 0001051320 00000 n 0001051342 00000 n 0001051540 00000 n 0001052271 00000 n 0001052293 00000 n 0001052491 00000 n 0001053199 00000 n 0001053221 00000 n 0001053419 00000 n 0001054409 00000 n 0001054431 00000 n 0001054629 00000 n 0001055527 00000 n 0001055549 00000 n 0001055747 00000 n 0001056760 00000 n 0001056782 00000 n 0001056980 00000 n 0001057846 00000 n 0001057868 00000 n 0001058066 00000 n 0001058920 00000 n 0001058942 00000 n 0001059140 00000 n 0001059806 00000 n 0001059828 00000 n 0001060026 00000 n 0001060556 00000 n 0001060578 00000 n 0001060776 00000 n 0001061365 00000 n 0001061387 00000 n 0001061585 00000 n 0001062155 00000 n 0001062177 00000 n 0001062375 00000 n 0001063023 00000 n 0001063045 00000 n 0001063243 00000 n 0001063933 00000 n 0001063955 00000 n 0001064153 00000 n 0001065029 00000 n 0001065051 00000 n 0001065249 00000 n 0001065859 00000 n 0001065881 00000 n 0001066079 00000 n 0001066745 00000 n 0001066767 00000 n 0001066965 00000 n 0001067788 00000 n 0001067810 00000 n 0001068008 00000 n 0001068575 00000 n 0001068597 00000 n 0001068795 00000 n 0001069581 00000 n 0001069603 00000 n 0001069801 00000 n 0001070466 00000 n 0001070488 00000 n 0001070686 00000 n 0001071321 00000 n 0001071343 00000 n 0001071541 00000 n 0001072530 00000 n 0001072552 00000 n 0001072750 00000 n 0001073622 00000 n 0001073644 00000 n 0001073842 00000 n 0001074697 00000 n 0001074719 00000 n 0001074917 00000 n 0001075627 00000 n 0001075649 00000 n 0001075847 00000 n 0001076455 00000 n 0001076477 00000 n 0001076675 00000 n 0001077400 00000 n 0001077422 00000 n 0001077620 00000 n 0001078336 00000 n 0001078358 00000 n 0001078556 00000 n 0001079392 00000 n 0001079414 00000 n 0001079612 00000 n 0001080418 00000 n 0001080440 00000 n 0001080638 00000 n 0001081381 00000 n 0001081403 00000 n 0001081601 00000 n 0001082314 00000 n 0001082336 00000 n 0001082534 00000 n 0001083207 00000 n 0001083229 00000 n 0001083427 00000 n 0001084149 00000 n 0001084171 00000 n 0001084369 00000 n 0001085216 00000 n 0001085238 00000 n 0001085436 00000 n 0001086161 00000 n 0001086183 00000 n 0001086381 00000 n 0001087299 00000 n 0001087321 00000 n 0001087519 00000 n 0001088375 00000 n 0001088397 00000 n 0001088595 00000 n 0001089541 00000 n 0001089563 00000 n 0001089761 00000 n 0001090363 00000 n 0001090385 00000 n 0001090583 00000 n 0001091286 00000 n 0001091308 00000 n 0001091506 00000 n 0001092294 00000 n 0001092316 00000 n 0001092514 00000 n 0001093564 00000 n 0001093586 00000 n 0001093784 00000 n 0001094432 00000 n 0001094454 00000 n 0001094652 00000 n 0001095287 00000 n 0001095309 00000 n 0001095507 00000 n 0001095589 00000 n 0001095726 00000 n 0001095862 00000 n 0001095944 00000 n 0001096080 00000 n 0001096220 00000 n 0001096302 00000 n 0001096439 00000 n 0001096579 00000 n 0001096661 00000 n 0001096798 00000 n 0001096938 00000 n 0001097020 00000 n 0001097157 00000 n 0001097297 00000 n 0001097379 00000 n 0001097517 00000 n 0001097657 00000 n 0001097739 00000 n 0001097876 00000 n 0001098016 00000 n 0001098098 00000 n 0001098235 00000 n 0001098371 00000 n 0001098453 00000 n 0001098590 00000 n 0001098726 00000 n 0001098808 00000 n 0001098945 00000 n 0001099085 00000 n 0001099167 00000 n 0001099304 00000 n 0001099444 00000 n 0001099526 00000 n 0001099663 00000 n 0001099799 00000 n 0001099881 00000 n 0001100018 00000 n 0001100158 00000 n 0001100240 00000 n 0001100377 00000 n 0001100513 00000 n 0001100595 00000 n 0001100732 00000 n 0001100872 00000 n 0001100954 00000 n 0001101091 00000 n 0001101227 00000 n 0001101309 00000 n 0001101446 00000 n 0001101586 00000 n 0001101668 00000 n 0001101805 00000 n 0001101945 00000 n 0001102027 00000 n 0001102164 00000 n 0001102304 00000 n 0001102386 00000 n 0001102523 00000 n 0001102659 00000 n 0001102741 00000 n 0001102878 00000 n 0001103014 00000 n 0001103096 00000 n 0001103232 00000 n 0001103372 00000 n 0001103454 00000 n 0001103591 00000 n 0001103727 00000 n 0001103809 00000 n 0001103946 00000 n 0001104082 00000 n 0001104164 00000 n 0001104301 00000 n 0001104437 00000 n 0001104519 00000 n 0001104656 00000 n 0001104792 00000 n 0001104874 00000 n 0001105011 00000 n 0001105151 00000 n 0001105233 00000 n 0001105370 00000 n 0001105506 00000 n 0001105588 00000 n 0001105725 00000 n 0001105865 00000 n 0001105947 00000 n 0001106084 00000 n 0001106224 00000 n 0001106306 00000 n 0001106443 00000 n 0001106579 00000 n 0001106661 00000 n 0001106798 00000 n 0001106934 00000 n 0001107016 00000 n 0001107153 00000 n 0001107289 00000 n 0001107371 00000 n 0001107508 00000 n 0001107648 00000 n 0001107730 00000 n 0001107867 00000 n 0001108003 00000 n 0001108085 00000 n 0001108221 00000 n 0001108357 00000 n 0001108439 00000 n 0001108576 00000 n 0001108712 00000 n 0001108794 00000 n 0001108931 00000 n 0001109071 00000 n 0001109153 00000 n 0001109290 00000 n 0001109430 00000 n 0001109512 00000 n 0001109649 00000 n 0001109789 00000 n 0001109871 00000 n 0001110008 00000 n 0001110144 00000 n 0001110226 00000 n 0001110363 00000 n 0001110499 00000 n 0001110581 00000 n 0001110718 00000 n 0001110854 00000 n 0001110936 00000 n 0001111073 00000 n 0001111213 00000 n 0001111295 00000 n 0001111432 00000 n 0001111572 00000 n 0001111654 00000 n 0001111791 00000 n 0001111927 00000 n 0001112009 00000 n 0001112146 00000 n 0001112286 00000 n 0001112368 00000 n 0001112505 00000 n 0001112645 00000 n 0001112727 00000 n 0001112863 00000 n 0001112999 00000 n 0001113081 00000 n 0001113218 00000 n 0001113354 00000 n 0001113436 00000 n 0001113573 00000 n 0001113709 00000 n 0001113791 00000 n 0001113927 00000 n 0001114066 00000 n 0001114148 00000 n 0001114283 00000 n 0001114421 00000 n 0001114503 00000 n 0001114638 00000 n 0001114776 00000 n 0001129228 00000 n 0001129252 00000 n 0001130246 00000 n 0001130463 00000 n 0001131123 00000 n 0001131145 00000 n 0001131343 00000 n 0001132089 00000 n 0001132111 00000 n 0001132309 00000 n 0001133019 00000 n 0001133041 00000 n 0001133239 00000 n 0001133968 00000 n 0001133990 00000 n 0001134188 00000 n 0001134988 00000 n 0001135010 00000 n 0001135208 00000 n 0001135919 00000 n 0001135941 00000 n 0001136139 00000 n 0001136827 00000 n 0001136849 00000 n 0001137047 00000 n 0001137875 00000 n 0001137897 00000 n 0001138095 00000 n 0001138854 00000 n 0001138876 00000 n 0001139074 00000 n 0001139726 00000 n 0001139748 00000 n 0001139946 00000 n 0001140602 00000 n 0001140624 00000 n 0001140822 00000 n 0001141589 00000 n 0001141611 00000 n 0001141809 00000 n 0001142297 00000 n 0001142319 00000 n 0001142517 00000 n 0001143201 00000 n 0001143223 00000 n 0001143421 00000 n 0001143971 00000 n 0001143993 00000 n 0001144191 00000 n 0001144833 00000 n 0001144855 00000 n 0001145053 00000 n 0001145801 00000 n 0001145823 00000 n 0001146021 00000 n 0001146497 00000 n 0001146519 00000 n 0001146717 00000 n 0001147453 00000 n 0001147475 00000 n 0001147673 00000 n 0001148419 00000 n 0001148441 00000 n 0001148639 00000 n 0001149335 00000 n 0001149357 00000 n 0001149555 00000 n 0001150228 00000 n 0001150250 00000 n 0001150448 00000 n 0001151090 00000 n 0001151112 00000 n 0001151310 00000 n 0001152023 00000 n 0001152045 00000 n 0001152243 00000 n 0001153102 00000 n 0001153124 00000 n 0001153322 00000 n 0001154182 00000 n 0001154204 00000 n 0001154402 00000 n 0001155034 00000 n 0001155056 00000 n 0001155254 00000 n 0001155888 00000 n 0001155910 00000 n 0001156108 00000 n 0001156870 00000 n 0001156892 00000 n 0001157090 00000 n 0001157848 00000 n 0001157870 00000 n 0001158068 00000 n 0001159016 00000 n 0001159038 00000 n 0001159236 00000 n 0001159643 00000 n 0001159665 00000 n 0001159863 00000 n 0001160509 00000 n 0001160531 00000 n 0001160729 00000 n 0001161172 00000 n 0001161194 00000 n 0001161392 00000 n 0001161988 00000 n 0001162010 00000 n 0001162208 00000 n 0001162823 00000 n 0001162845 00000 n 0001163043 00000 n 0001163657 00000 n 0001163679 00000 n 0001163877 00000 n 0001164496 00000 n 0001164518 00000 n 0001164716 00000 n 0001165336 00000 n 0001165358 00000 n 0001165556 00000 n 0001166165 00000 n 0001166187 00000 n 0001166385 00000 n 0001167007 00000 n 0001167029 00000 n 0001167227 00000 n 0001167804 00000 n 0001167826 00000 n 0001168024 00000 n 0001168637 00000 n 0001168659 00000 n 0001168857 00000 n 0001169764 00000 n 0001169786 00000 n 0001169984 00000 n 0001170743 00000 n 0001170765 00000 n 0001170963 00000 n 0001171555 00000 n 0001171577 00000 n 0001171775 00000 n 0001172462 00000 n 0001172484 00000 n 0001172682 00000 n 0001173274 00000 n 0001173296 00000 n 0001173494 00000 n 0001174386 00000 n 0001174408 00000 n 0001174606 00000 n 0001175570 00000 n 0001175592 00000 n 0001175790 00000 n 0001175872 00000 n 0001176009 00000 n 0001176145 00000 n 0001176227 00000 n 0001176364 00000 n 0001176500 00000 n 0001176582 00000 n 0001176719 00000 n 0001176859 00000 n 0001176941 00000 n 0001177077 00000 n 0001177213 00000 n 0001177295 00000 n 0001177432 00000 n 0001177572 00000 n 0001177654 00000 n 0001177791 00000 n 0001177931 00000 n 0001178013 00000 n 0001178150 00000 n 0001178286 00000 n 0001178368 00000 n 0001178505 00000 n 0001178645 00000 n 0001178727 00000 n 0001178864 00000 n 0001179000 00000 n 0001179082 00000 n 0001179219 00000 n 0001179355 00000 n 0001179437 00000 n 0001179574 00000 n 0001179714 00000 n 0001179796 00000 n 0001179932 00000 n 0001180068 00000 n 0001180150 00000 n 0001180288 00000 n 0001180428 00000 n 0001180510 00000 n 0001180647 00000 n 0001180787 00000 n 0001180869 00000 n 0001181006 00000 n 0001181146 00000 n 0001181228 00000 n 0001181364 00000 n 0001181504 00000 n 0001181586 00000 n 0001181723 00000 n 0001181863 00000 n 0001181945 00000 n 0001182083 00000 n 0001182223 00000 n 0001182305 00000 n 0001182442 00000 n 0001182582 00000 n 0001182664 00000 n 0001182801 00000 n 0001182937 00000 n 0001183019 00000 n 0001183156 00000 n 0001183296 00000 n 0001183378 00000 n 0001183515 00000 n 0001183655 00000 n 0001183737 00000 n 0001183874 00000 n 0001184014 00000 n 0001184096 00000 n 0001184233 00000 n 0001184369 00000 n 0001184451 00000 n 0001184588 00000 n 0001184724 00000 n 0001184806 00000 n 0001184943 00000 n 0001185079 00000 n 0001185161 00000 n 0001185298 00000 n 0001185438 00000 n 0001185520 00000 n 0001185657 00000 n 0001185797 00000 n 0001185879 00000 n 0001186016 00000 n 0001186156 00000 n 0001186238 00000 n 0001186375 00000 n 0001186511 00000 n 0001186593 00000 n 0001186730 00000 n 0001186870 00000 n 0001186952 00000 n 0001187089 00000 n 0001187229 00000 n 0001187311 00000 n 0001187448 00000 n 0001187588 00000 n 0001187670 00000 n 0001187808 00000 n 0001187948 00000 n 0001188030 00000 n 0001188167 00000 n 0001188303 00000 n 0001188385 00000 n 0001188522 00000 n 0001188662 00000 n 0001188744 00000 n 0001188881 00000 n 0001189017 00000 n 0001189099 00000 n 0001189236 00000 n 0001189376 00000 n 0001189458 00000 n 0001189595 00000 n 0001189735 00000 n 0001189817 00000 n 0001189954 00000 n 0001190090 00000 n 0001190172 00000 n 0001190309 00000 n 0001190449 00000 n 0001190531 00000 n 0001190668 00000 n 0001190808 00000 n 0001190890 00000 n 0001191027 00000 n 0001191163 00000 n 0001191245 00000 n 0001191382 00000 n 0001191522 00000 n 0001191604 00000 n 0001191741 00000 n 0001191877 00000 n 0001191959 00000 n 0001192096 00000 n 0001192236 00000 n 0001192318 00000 n 0001192455 00000 n 0001192591 00000 n 0001192673 00000 n 0001192811 00000 n 0001192951 00000 n 0001193033 00000 n 0001193170 00000 n 0001193306 00000 n 0001193388 00000 n 0001193525 00000 n 0001193665 00000 n 0001207435 00000 n 0001207459 00000 n 0001208381 00000 n 0001208598 00000 n 0001208677 00000 n 0001404447 00000 n 0001208872 00000 n 0001208791 00000 n 0001208986 00000 n 0001209178 00000 n 0001225705 00000 n 0001209436 00000 n 0001225607 00000 n 0001209530 00000 n 0001209646 00000 n 0001209761 00000 n 0001209873 00000 n 0001209990 00000 n 0001210103 00000 n 0001210220 00000 n 0001210338 00000 n 0001210455 00000 n 0001210564 00000 n 0001210675 00000 n 0001210797 00000 n 0001210907 00000 n 0001211020 00000 n 0001211130 00000 n 0001211244 00000 n 0001211358 00000 n 0001211467 00000 n 0001211580 00000 n 0001211695 00000 n 0001211810 00000 n 0001211924 00000 n 0001212042 00000 n 0001212155 00000 n 0001212272 00000 n 0001212389 00000 n 0001212502 00000 n 0001212615 00000 n 0001212727 00000 n 0001212840 00000 n 0001212952 00000 n 0001213065 00000 n 0001213177 00000 n 0001213289 00000 n 0001213401 00000 n 0001213516 00000 n 0001213626 00000 n 0001213735 00000 n 0001213853 00000 n 0001213967 00000 n 0001214075 00000 n 0001214188 00000 n 0001214305 00000 n 0001214413 00000 n 0001214525 00000 n 0001214635 00000 n 0001214756 00000 n 0001214886 00000 n 0001215002 00000 n 0001215119 00000 n 0001215235 00000 n 0001215357 00000 n 0001215485 00000 n 0001215616 00000 n 0001215734 00000 n 0001215851 00000 n 0001215967 00000 n 0001216082 00000 n 0001216196 00000 n 0001216309 00000 n 0001216423 00000 n 0001216544 00000 n 0001216657 00000 n 0001216772 00000 n 0001216888 00000 n 0001217001 00000 n 0001217114 00000 n 0001217231 00000 n 0001217349 00000 n 0001217471 00000 n 0001217592 00000 n 0001217709 00000 n 0001217826 00000 n 0001217943 00000 n 0001218060 00000 n 0001218178 00000 n 0001218297 00000 n 0001218420 00000 n 0001218529 00000 n 0001218651 00000 n 0001218769 00000 n 0001218886 00000 n 0001219009 00000 n 0001219128 00000 n 0001219246 00000 n 0001219357 00000 n 0001219473 00000 n 0001219591 00000 n 0001219707 00000 n 0001219820 00000 n 0001219933 00000 n 0001220046 00000 n 0001220163 00000 n 0001220276 00000 n 0001220389 00000 n 0001220501 00000 n 0001220620 00000 n 0001220740 00000 n 0001220854 00000 n 0001220972 00000 n 0001221091 00000 n 0001221206 00000 n 0001221321 00000 n 0001221440 00000 n 0001221559 00000 n 0001221679 00000 n 0001221793 00000 n 0001221920 00000 n 0001222035 00000 n 0001222153 00000 n 0001222271 00000 n 0001222388 00000 n 0001222505 00000 n 0001222622 00000 n 0001222739 00000 n 0001222867 00000 n 0001222984 00000 n 0001223098 00000 n 0001223213 00000 n 0001223329 00000 n 0001223443 00000 n 0001223557 00000 n 0001223666 00000 n 0001223779 00000 n 0001223892 00000 n 0001224008 00000 n 0001224119 00000 n 0001224235 00000 n 0001224349 00000 n 0001224458 00000 n 0001224572 00000 n 0001224687 00000 n 0001224806 00000 n 0001224920 00000 n 0001225035 00000 n 0001225147 00000 n 0001225261 00000 n 0001225375 00000 n 0001225493 00000 n 0001228688 00000 n 0001225970 00000 n 0001228583 00000 n 0001226062 00000 n 0001226180 00000 n 0001226298 00000 n 0001226415 00000 n 0001226533 00000 n 0001226655 00000 n 0001226771 00000 n 0001226892 00000 n 0001227013 00000 n 0001227133 00000 n 0001227254 00000 n 0001227367 00000 n 0001227485 00000 n 0001227605 00000 n 0001227725 00000 n 0001227845 00000 n 0001227966 00000 n 0001228090 00000 n 0001228214 00000 n 0001228337 00000 n 0001228461 00000 n 0001229390 00000 n 0001228965 00000 n 0001229292 00000 n 0001229061 00000 n 0001229176 00000 n 0001229752 00000 n 0001229671 00000 n 0001232937 00000 n 0001229994 00000 n 0001232829 00000 n 0001230097 00000 n 0001230219 00000 n 0001230339 00000 n 0001230461 00000 n 0001230581 00000 n 0001230700 00000 n 0001230819 00000 n 0001230939 00000 n 0001231061 00000 n 0001231180 00000 n 0001231304 00000 n 0001231414 00000 n 0001231526 00000 n 0001231640 00000 n 0001231759 00000 n 0001231882 00000 n 0001232010 00000 n 0001232132 00000 n 0001232243 00000 n 0001232356 00000 n 0001232471 00000 n 0001232587 00000 n 0001232710 00000 n 0001234501 00000 n 0001233191 00000 n 0001234395 00000 n 0001233298 00000 n 0001233422 00000 n 0001233545 00000 n 0001233667 00000 n 0001233789 00000 n 0001233911 00000 n 0001234028 00000 n 0001234151 00000 n 0001234278 00000 n 0001236702 00000 n 0001234755 00000 n 0001236594 00000 n 0001234860 00000 n 0001234981 00000 n 0001235101 00000 n 0001235224 00000 n 0001235350 00000 n 0001235483 00000 n 0001235604 00000 n 0001235730 00000 n 0001235856 00000 n 0001235982 00000 n 0001236108 00000 n 0001236233 00000 n 0001236351 00000 n 0001236474 00000 n 0001239352 00000 n 0001237020 00000 n 0001239234 00000 n 0001237119 00000 n 0001237238 00000 n 0001237362 00000 n 0001237483 00000 n 0001237608 00000 n 0001237739 00000 n 0001237873 00000 n 0001238007 00000 n 0001238144 00000 n 0001238276 00000 n 0001238415 00000 n 0001238554 00000 n 0001238697 00000 n 0001238836 00000 n 0001238977 00000 n 0001239103 00000 n 0001240266 00000 n 0001239589 00000 n 0001240164 00000 n 0001239693 00000 n 0001239815 00000 n 0001239930 00000 n 0001240046 00000 n 0001241720 00000 n 0001240500 00000 n 0001241623 00000 n 0001240596 00000 n 0001240709 00000 n 0001240821 00000 n 0001240933 00000 n 0001241045 00000 n 0001241160 00000 n 0001241276 00000 n 0001241391 00000 n 0001241505 00000 n 0001242957 00000 n 0001242033 00000 n 0001242853 00000 n 0001242138 00000 n 0001242258 00000 n 0001242375 00000 n 0001242491 00000 n 0001242611 00000 n 0001242732 00000 n 0001251455 00000 n 0001243219 00000 n 0001251349 00000 n 0001243323 00000 n 0001243435 00000 n 0001243548 00000 n 0001243660 00000 n 0001243774 00000 n 0001243886 00000 n 0001243999 00000 n 0001244111 00000 n 0001244232 00000 n 0001244353 00000 n 0001244478 00000 n 0001244594 00000 n 0001244714 00000 n 0001244838 00000 n 0001244954 00000 n 0001245069 00000 n 0001245187 00000 n 0001245306 00000 n 0001245419 00000 n 0001245545 00000 n 0001245664 00000 n 0001245785 00000 n 0001245910 00000 n 0001246030 00000 n 0001246151 00000 n 0001246279 00000 n 0001246408 00000 n 0001246538 00000 n 0001246671 00000 n 0001246803 00000 n 0001246927 00000 n 0001247052 00000 n 0001247178 00000 n 0001247307 00000 n 0001247435 00000 n 0001247567 00000 n 0001247693 00000 n 0001247818 00000 n 0001247946 00000 n 0001248075 00000 n 0001248203 00000 n 0001248334 00000 n 0001248456 00000 n 0001248580 00000 n 0001248705 00000 n 0001248834 00000 n 0001248955 00000 n 0001249077 00000 n 0001249196 00000 n 0001249318 00000 n 0001249437 00000 n 0001249560 00000 n 0001249679 00000 n 0001249797 00000 n 0001249922 00000 n 0001250037 00000 n 0001250152 00000 n 0001250274 00000 n 0001250389 00000 n 0001250511 00000 n 0001250629 00000 n 0001250754 00000 n 0001250872 00000 n 0001250997 00000 n 0001251112 00000 n 0001251234 00000 n 0001255331 00000 n 0001251701 00000 n 0001255223 00000 n 0001251810 00000 n 0001251936 00000 n 0001252059 00000 n 0001252182 00000 n 0001252306 00000 n 0001252430 00000 n 0001252555 00000 n 0001252680 00000 n 0001252799 00000 n 0001252925 00000 n 0001253045 00000 n 0001253172 00000 n 0001253288 00000 n 0001253411 00000 n 0001253528 00000 n 0001253652 00000 n 0001253772 00000 n 0001253899 00000 n 0001254015 00000 n 0001254138 00000 n 0001254256 00000 n 0001254374 00000 n 0001254499 00000 n 0001254614 00000 n 0001254732 00000 n 0001254857 00000 n 0001254978 00000 n 0001255106 00000 n 0001260124 00000 n 0001255617 00000 n 0001260018 00000 n 0001255724 00000 n 0001255846 00000 n 0001255969 00000 n 0001256093 00000 n 0001256220 00000 n 0001256348 00000 n 0001256474 00000 n 0001256598 00000 n 0001256721 00000 n 0001256845 00000 n 0001256969 00000 n 0001257094 00000 n 0001257219 00000 n 0001257342 00000 n 0001257461 00000 n 0001257578 00000 n 0001257700 00000 n 0001257820 00000 n 0001257940 00000 n 0001258060 00000 n 0001258185 00000 n 0001258306 00000 n 0001258426 00000 n 0001258548 00000 n 0001258672 00000 n 0001258796 00000 n 0001258924 00000 n 0001259055 00000 n 0001259177 00000 n 0001259300 00000 n 0001259420 00000 n 0001259542 00000 n 0001259659 00000 n 0001259777 00000 n 0001259895 00000 n 0001261577 00000 n 0001260402 00000 n 0001261475 00000 n 0001260510 00000 n 0001260631 00000 n 0001260752 00000 n 0001260876 00000 n 0001260995 00000 n 0001261112 00000 n 0001261238 00000 n 0001261355 00000 n 0001265823 00000 n 0001261823 00000 n 0001265722 00000 n 0001261926 00000 n 0001262047 00000 n 0001262168 00000 n 0001262287 00000 n 0001262408 00000 n 0001262525 00000 n 0001262647 00000 n 0001262771 00000 n 0001262902 00000 n 0001263022 00000 n 0001263149 00000 n 0001263269 00000 n 0001263396 00000 n 0001263512 00000 n 0001263633 00000 n 0001263761 00000 n 0001263878 00000 n 0001264002 00000 n 0001264120 00000 n 0001264245 00000 n 0001264364 00000 n 0001264490 00000 n 0001264605 00000 n 0001264727 00000 n 0001264852 00000 n 0001264984 00000 n 0001265105 00000 n 0001265233 00000 n 0001265353 00000 n 0001265471 00000 n 0001265596 00000 n 0001266497 00000 n 0001266064 00000 n 0001266397 00000 n 0001266164 00000 n 0001266281 00000 n 0001266832 00000 n 0001266742 00000 n 0001267502 00000 n 0001267077 00000 n 0001267397 00000 n 0001267173 00000 n 0001267285 00000 n 0001268998 00000 n 0001267820 00000 n 0001268891 00000 n 0001267917 00000 n 0001268030 00000 n 0001268157 00000 n 0001268289 00000 n 0001268416 00000 n 0001268533 00000 n 0001268650 00000 n 0001268767 00000 n 0001270227 00000 n 0001269247 00000 n 0001270132 00000 n 0001269343 00000 n 0001269456 00000 n 0001269573 00000 n 0001269685 00000 n 0001269796 00000 n 0001269909 00000 n 0001270019 00000 n 0001271786 00000 n 0001270513 00000 n 0001271682 00000 n 0001270611 00000 n 0001270724 00000 n 0001270838 00000 n 0001270956 00000 n 0001271072 00000 n 0001271195 00000 n 0001271311 00000 n 0001271432 00000 n 0001271554 00000 n 0001272153 00000 n 0001272071 00000 n 0001280313 00000 n 0001272519 00000 n 0001280206 00000 n 0001272626 00000 n 0001272744 00000 n 0001272871 00000 n 0001273004 00000 n 0001273122 00000 n 0001273239 00000 n 0001273357 00000 n 0001273478 00000 n 0001273597 00000 n 0001273717 00000 n 0001273839 00000 n 0001273966 00000 n 0001274099 00000 n 0001274232 00000 n 0001274358 00000 n 0001274484 00000 n 0001274609 00000 n 0001274740 00000 n 0001274856 00000 n 0001274978 00000 n 0001275099 00000 n 0001275214 00000 n 0001275331 00000 n 0001275454 00000 n 0001275571 00000 n 0001275694 00000 n 0001275811 00000 n 0001275934 00000 n 0001276050 00000 n 0001276172 00000 n 0001276293 00000 n 0001276413 00000 n 0001276529 00000 n 0001276651 00000 n 0001276772 00000 n 0001276889 00000 n 0001277012 00000 n 0001277134 00000 n 0001277252 00000 n 0001277372 00000 n 0001277500 00000 n 0001277627 00000 n 0001277752 00000 n 0001277878 00000 n 0001278003 00000 n 0001278134 00000 n 0001278265 00000 n 0001278389 00000 n 0001278513 00000 n 0001278636 00000 n 0001278754 00000 n 0001278878 00000 n 0001278996 00000 n 0001279120 00000 n 0001279238 00000 n 0001279362 00000 n 0001279479 00000 n 0001279602 00000 n 0001279719 00000 n 0001279842 00000 n 0001279964 00000 n 0001280082 00000 n 0001282473 00000 n 0001280667 00000 n 0001282365 00000 n 0001280773 00000 n 0001280894 00000 n 0001281016 00000 n 0001281141 00000 n 0001281264 00000 n 0001281388 00000 n 0001281514 00000 n 0001281634 00000 n 0001281753 00000 n 0001281873 00000 n 0001281996 00000 n 0001282117 00000 n 0001282239 00000 n 0001283132 00000 n 0001282714 00000 n 0001283035 00000 n 0001282811 00000 n 0001282923 00000 n 0001285183 00000 n 0001283490 00000 n 0001285084 00000 n 0001283588 00000 n 0001283702 00000 n 0001283816 00000 n 0001283934 00000 n 0001284048 00000 n 0001284166 00000 n 0001284286 00000 n 0001284401 00000 n 0001284514 00000 n 0001284627 00000 n 0001284740 00000 n 0001284853 00000 n 0001284968 00000 n 0001287145 00000 n 0001285593 00000 n 0001287035 00000 n 0001285701 00000 n 0001285824 00000 n 0001285947 00000 n 0001286073 00000 n 0001286196 00000 n 0001286319 00000 n 0001286439 00000 n 0001286562 00000 n 0001286683 00000 n 0001286796 00000 n 0001286915 00000 n 0001290633 00000 n 0001287447 00000 n 0001290517 00000 n 0001287553 00000 n 0001287675 00000 n 0001287797 00000 n 0001287917 00000 n 0001288035 00000 n 0001288149 00000 n 0001288267 00000 n 0001288385 00000 n 0001288500 00000 n 0001288615 00000 n 0001288729 00000 n 0001288847 00000 n 0001288961 00000 n 0001289079 00000 n 0001289193 00000 n 0001289311 00000 n 0001289425 00000 n 0001289543 00000 n 0001289657 00000 n 0001289775 00000 n 0001289890 00000 n 0001290012 00000 n 0001290133 00000 n 0001290267 00000 n 0001290392 00000 n 0001298066 00000 n 0001290939 00000 n 0001297968 00000 n 0001291039 00000 n 0001291159 00000 n 0001291280 00000 n 0001291404 00000 n 0001291530 00000 n 0001291653 00000 n 0001291774 00000 n 0001291895 00000 n 0001292017 00000 n 0001292137 00000 n 0001292258 00000 n 0001292381 00000 n 0001292498 00000 n 0001292615 00000 n 0001292733 00000 n 0001292849 00000 n 0001292965 00000 n 0001293081 00000 n 0001293197 00000 n 0001293318 00000 n 0001293437 00000 n 0001293557 00000 n 0001293674 00000 n 0001293796 00000 n 0001293915 00000 n 0001294039 00000 n 0001294164 00000 n 0001294283 00000 n 0001294412 00000 n 0001294531 00000 n 0001294648 00000 n 0001294765 00000 n 0001294887 00000 n 0001295010 00000 n 0001295130 00000 n 0001295249 00000 n 0001295368 00000 n 0001295492 00000 n 0001295617 00000 n 0001295735 00000 n 0001295858 00000 n 0001295982 00000 n 0001296096 00000 n 0001296211 00000 n 0001296326 00000 n 0001296443 00000 n 0001296560 00000 n 0001296675 00000 n 0001296788 00000 n 0001296908 00000 n 0001297028 00000 n 0001297148 00000 n 0001297266 00000 n 0001297386 00000 n 0001297506 00000 n 0001297625 00000 n 0001297738 00000 n 0001297853 00000 n 0001298732 00000 n 0001298303 00000 n 0001298630 00000 n 0001298400 00000 n 0001298514 00000 n 0001300600 00000 n 0001298970 00000 n 0001300503 00000 n 0001299075 00000 n 0001299211 00000 n 0001299346 00000 n 0001299476 00000 n 0001299605 00000 n 0001299727 00000 n 0001299862 00000 n 0001299996 00000 n 0001300120 00000 n 0001300246 00000 n 0001300375 00000 n 0001300991 00000 n 0001300905 00000 n 0001302774 00000 n 0001301313 00000 n 0001302671 00000 n 0001301416 00000 n 0001301529 00000 n 0001301641 00000 n 0001301753 00000 n 0001301865 00000 n 0001301978 00000 n 0001302091 00000 n 0001302205 00000 n 0001302318 00000 n 0001302435 00000 n 0001302554 00000 n 0001303023 00000 n 0001303122 00000 n 0001303228 00000 n 0001303339 00000 n 0001303448 00000 n 0001303554 00000 n 0001303668 00000 n 0001303781 00000 n 0001303891 00000 n 0001303969 00000 n 0001304057 00000 n 0001304145 00000 n 0001304233 00000 n 0001304321 00000 n 0001304405 00000 n 0001304514 00000 n 0001304638 00000 n 0001304759 00000 n 0001304880 00000 n 0001305010 00000 n 0001305131 00000 n 0001305252 00000 n 0001305364 00000 n 0001305485 00000 n 0001305600 00000 n 0001305702 00000 n 0001305793 00000 n 0001305914 00000 n 0001306020 00000 n 0001306119 00000 n 0001306237 00000 n 0001306327 00000 n 0001306432 00000 n 0001306525 00000 n 0001306630 00000 n 0001306738 00000 n 0001306843 00000 n 0001306934 00000 n 0001307015 00000 n 0001307123 00000 n 0001307231 00000 n 0001307336 00000 n 0001307444 00000 n 0001307531 00000 n 0001307652 00000 n 0001307776 00000 n 0001307897 00000 n 0001307985 00000 n 0001308105 00000 n 0001308196 00000 n 0001308287 00000 n 0001308407 00000 n 0001308501 00000 n 0001308604 00000 n 0001308688 00000 n 0001308781 00000 n 0001308881 00000 n 0001308969 00000 n 0001309053 00000 n 0001309149 00000 n 0001309234 00000 n 0001309330 00000 n 0001309442 00000 n 0001309533 00000 n 0001309621 00000 n 0001309709 00000 n 0001309797 00000 n 0001309888 00000 n 0001309979 00000 n 0001310073 00000 n 0001310164 00000 n 0001310267 00000 n 0001310376 00000 n 0001310485 00000 n 0001310576 00000 n 0001310709 00000 n 0001310857 00000 n 0001310990 00000 n 0001311092 00000 n 0001311216 00000 n 0001311325 00000 n 0001311440 00000 n 0001311557 00000 n 0001311674 00000 n 0001311788 00000 n 0001311905 00000 n 0001311986 00000 n 0001312074 00000 n 0001312165 00000 n 0001312253 00000 n 0001312344 00000 n 0001312453 00000 n 0001312580 00000 n 0001312710 00000 n 0001312813 00000 n 0001312916 00000 n 0001313009 00000 n 0001313115 00000 n 0001313233 00000 n 0001313366 00000 n 0001313490 00000 n 0001313626 00000 n 0001313780 00000 n 0001313943 00000 n 0001314106 00000 n 0001314278 00000 n 0001314435 00000 n 0001314613 00000 n 0001314791 00000 n 0001314981 00000 n 0001315159 00000 n 0001315343 00000 n 0001315482 00000 n 0001315636 00000 n 0001315799 00000 n 0001315893 00000 n 0001316023 00000 n 0001316141 00000 n 0001316253 00000 n 0001316380 00000 n 0001316501 00000 n 0001316622 00000 n 0001316743 00000 n 0001316879 00000 n 0001317003 00000 n 0001317124 00000 n 0001317251 00000 n 0001317372 00000 n 0001317490 00000 n 0001317611 00000 n 0001317735 00000 n 0001317868 00000 n 0001318004 00000 n 0001318128 00000 n 0001318249 00000 n 0001318348 00000 n 0001318447 00000 n 0001318562 00000 n 0001318656 00000 n 0001318750 00000 n 0001318843 00000 n 0001318958 00000 n 0001319118 00000 n 0001319275 00000 n 0001319417 00000 n 0001319556 00000 n 0001319656 00000 n 0001319822 00000 n 0001319985 00000 n 0001320118 00000 n 0001320257 00000 n 0001320405 00000 n 0001320550 00000 n 0001320668 00000 n 0001320801 00000 n 0001320952 00000 n 0001321058 00000 n 0001321161 00000 n 0001321267 00000 n 0001321382 00000 n 0001321491 00000 n 0001321603 00000 n 0001321721 00000 n 0001321854 00000 n 0001322005 00000 n 0001322156 00000 n 0001322286 00000 n 0001322416 00000 n 0001322534 00000 n 0001322646 00000 n 0001322785 00000 n 0001322897 00000 n 0001323018 00000 n 0001323133 00000 n 0001323241 00000 n 0001323374 00000 n 0001323507 00000 n 0001323652 00000 n 0001323806 00000 n 0001323936 00000 n 0001324050 00000 n 0001324164 00000 n 0001324276 00000 n 0001324391 00000 n 0001324473 00000 n 0001324569 00000 n 0001324672 00000 n 0001324780 00000 n 0001324874 00000 n 0001324980 00000 n 0001325071 00000 n 0001325183 00000 n 0001325276 00000 n 0001325381 00000 n 0001325486 00000 n 0001325604 00000 n 0001325728 00000 n 0001325852 00000 n 0001325988 00000 n 0001326097 00000 n 0001326218 00000 n 0001326351 00000 n 0001326460 00000 n 0001326566 00000 n 0001326681 00000 n 0001326799 00000 n 0001326899 00000 n 0001327038 00000 n 0001327156 00000 n 0001327280 00000 n 0001327416 00000 n 0001327537 00000 n 0001327661 00000 n 0001327806 00000 n 0001327954 00000 n 0001328105 00000 n 0001328265 00000 n 0001328422 00000 n 0001328555 00000 n 0001328691 00000 n 0001328830 00000 n 0001328978 00000 n 0001329123 00000 n 0001329244 00000 n 0001329368 00000 n 0001329501 00000 n 0001329640 00000 n 0001329770 00000 n 0001329894 00000 n 0001330018 00000 n 0001330145 00000 n 0001330266 00000 n 0001330390 00000 n 0001330520 00000 n 0001330632 00000 n 0001330744 00000 n 0001330859 00000 n 0001330968 00000 n 0001331077 00000 n 0001331186 00000 n 0001331295 00000 n 0001331419 00000 n 0001331537 00000 n 0001331658 00000 n 0001331770 00000 n 0001331897 00000 n 0001332015 00000 n 0001332148 00000 n 0001332284 00000 n 0001332402 00000 n 0001332550 00000 n 0001332668 00000 n 0001332780 00000 n 0001332892 00000 n 0001333019 00000 n 0001333149 00000 n 0001333270 00000 n 0001333388 00000 n 0001333506 00000 n 0001333639 00000 n 0001333775 00000 n 0001333890 00000 n 0001334020 00000 n 0001334153 00000 n 0001334256 00000 n 0001334362 00000 n 0001334468 00000 n 0001334580 00000 n 0001334692 00000 n 0001334798 00000 n 0001334898 00000 n 0001335019 00000 n 0001335140 00000 n 0001335261 00000 n 0001335376 00000 n 0001335497 00000 n 0001335618 00000 n 0001335736 00000 n 0001335836 00000 n 0001335942 00000 n 0001336048 00000 n 0001336151 00000 n 0001336251 00000 n 0001336345 00000 n 0001336438 00000 n 0001336531 00000 n 0001336621 00000 n 0001336714 00000 n 0001336804 00000 n 0001336897 00000 n 0001336987 00000 n 0001337077 00000 n 0001337167 00000 n 0001337285 00000 n 0001337373 00000 n 0001337464 00000 n 0001337552 00000 n 0001337670 00000 n 0001337758 00000 n 0001337857 00000 n 0001337941 00000 n 0001338022 00000 n 0001338130 00000 n 0001338226 00000 n 0001338304 00000 n 0001338397 00000 n 0001338502 00000 n 0001338580 00000 n 0001338670 00000 n 0001338754 00000 n 0001338871 00000 n 0001339015 00000 n 0001339117 00000 n 0001339222 00000 n 0001339324 00000 n 0001339444 00000 n 0001339582 00000 n 0001339729 00000 n 0001339837 00000 n 0001339942 00000 n 0001340033 00000 n 0001340135 00000 n 0001340234 00000 n 0001340330 00000 n 0001340442 00000 n 0001340551 00000 n 0001340660 00000 n 0001340772 00000 n 0001340890 00000 n 0001340999 00000 n 0001341092 00000 n 0001341186 00000 n 0001341277 00000 n 0001341371 00000 n 0001341477 00000 n 0001341577 00000 n 0001341698 00000 n 0001341798 00000 n 0001341913 00000 n 0001342031 00000 n 0001342167 00000 n 0001342279 00000 n 0001342367 00000 n 0001342461 00000 n 0001342585 00000 n 0001342709 00000 n 0001342830 00000 n 0001342954 00000 n 0001343057 00000 n 0001343153 00000 n 0001343270 00000 n 0001343363 00000 n 0001343462 00000 n 0001343564 00000 n 0001343667 00000 n 0001343767 00000 n 0001343867 00000 n 0001343991 00000 n 0001344109 00000 n 0001344202 00000 n 0001344295 00000 n 0001344404 00000 n 0001344519 00000 n 0001344643 00000 n 0001344767 00000 n 0001344888 00000 n 0001345018 00000 n 0001345157 00000 n 0001345317 00000 n 0001345441 00000 n 0001345580 00000 n 0001345719 00000 n 0001345858 00000 n 0001345997 00000 n 0001346133 00000 n 0001346248 00000 n 0001346378 00000 n 0001346499 00000 n 0001346632 00000 n 0001346753 00000 n 0001346880 00000 n 0001346986 00000 n 0001347095 00000 n 0001347210 00000 n 0001347325 00000 n 0001347430 00000 n 0001347548 00000 n 0001347663 00000 n 0001347781 00000 n 0001347908 00000 n 0001348029 00000 n 0001348153 00000 n 0001348283 00000 n 0001348391 00000 n 0001348511 00000 n 0001348628 00000 n 0001348733 00000 n 0001348838 00000 n 0001348943 00000 n 0001349048 00000 n 0001349156 00000 n 0001349267 00000 n 0001349390 00000 n 0001349502 00000 n 0001349611 00000 n 0001349723 00000 n 0001349844 00000 n 0001349959 00000 n 0001350077 00000 n 0001350207 00000 n 0001350331 00000 n 0001350412 00000 n 0001350545 00000 n 0001350699 00000 n 0001350820 00000 n 0001350962 00000 n 0001351083 00000 n 0001351225 00000 n 0001351334 00000 n 0001351458 00000 n 0001351603 00000 n 0001351715 00000 n 0001351848 00000 n 0001351963 00000 n 0001352099 00000 n 0001352217 00000 n 0001352356 00000 n 0001352462 00000 n 0001352589 00000 n 0001352725 00000 n 0001352882 00000 n 0001352985 00000 n 0001353109 00000 n 0001353254 00000 n 0001353375 00000 n 0001353490 00000 n 0001353626 00000 n 0001353765 00000 n 0001353877 00000 n 0001353995 00000 n 0001354116 00000 n 0001354237 00000 n 0001354361 00000 n 0001354485 00000 n 0001354612 00000 n 0001354739 00000 n 0001354857 00000 n 0001354996 00000 n 0001355117 00000 n 0001355259 00000 n 0001355368 00000 n 0001355498 00000 n 0001355610 00000 n 0001355743 00000 n 0001355864 00000 n 0001356006 00000 n 0001356115 00000 n 0001356245 00000 n 0001356360 00000 n 0001356475 00000 n 0001356611 00000 n 0001356717 00000 n 0001356832 00000 n 0001356968 00000 n 0001357092 00000 n 0001357237 00000 n 0001357349 00000 n 0001357482 00000 n 0001357594 00000 n 0001357703 00000 n 0001357803 00000 n 0001357909 00000 n 0001358029 00000 n 0001358144 00000 n 0001358252 00000 n 0001358357 00000 n 0001358480 00000 n 0001358591 00000 n 0001358699 00000 n 0001358786 00000 n 0001358888 00000 n 0001358996 00000 n 0001359098 00000 n 0001359225 00000 n 0001359352 00000 n 0001359479 00000 n 0001359600 00000 n 0001359715 00000 n 0001359818 00000 n 0001359933 00000 n 0001360048 00000 n 0001360154 00000 n 0001360260 00000 n 0001360363 00000 n 0001360478 00000 n 0001360581 00000 n 0001360696 00000 n 0001360799 00000 n 0001360914 00000 n 0001361017 00000 n 0001361132 00000 n 0001361235 00000 n 0001361350 00000 n 0001361456 00000 n 0001361583 00000 n 0001361707 00000 n 0001361870 00000 n 0001362006 00000 n 0001362142 00000 n 0001362299 00000 n 0001362417 00000 n 0001362532 00000 n 0001362625 00000 n 0001362731 00000 n 0001362843 00000 n 0001362952 00000 n 0001363049 00000 n 0001363140 00000 n 0001363231 00000 n 0001363322 00000 n 0001363413 00000 n 0001363570 00000 n 0001363709 00000 n 0001363845 00000 n 0001363990 00000 n 0001364138 00000 n 0001364283 00000 n 0001364437 00000 n 0001364564 00000 n 0001364697 00000 n 0001364833 00000 n 0001364981 00000 n 0001365105 00000 n 0001365232 00000 n 0001365350 00000 n 0001365477 00000 n 0001365595 00000 n 0001365725 00000 n 0001365843 00000 n 0001365949 00000 n 0001366042 00000 n 0001366135 00000 n 0001366240 00000 n 0001366333 00000 n 0001366426 00000 n 0001366532 00000 n 0001366659 00000 n 0001366750 00000 n 0001366840 00000 n 0001366955 00000 n 0001367079 00000 n 0001367190 00000 n 0001367304 00000 n 0001367400 00000 n 0001367508 00000 n 0001367619 00000 n 0001367740 00000 n 0001367839 00000 n 0001367938 00000 n 0001368049 00000 n 0001368160 00000 n 0001368274 00000 n 0001368370 00000 n 0001368505 00000 n 0001368604 00000 n 0001368712 00000 n 0001368820 00000 n 0001368925 00000 n 0001369030 00000 n 0001369135 00000 n 0001369240 00000 n 0001369378 00000 n 0001369483 00000 n 0001369579 00000 n 0001369678 00000 n 0001369796 00000 n 0001369898 00000 n 0001370001 00000 n 0001370097 00000 n 0001370218 00000 n 0001370351 00000 n 0001370447 00000 n 0001370550 00000 n 0001370665 00000 n 0001370801 00000 n 0001370907 00000 n 0001371013 00000 n 0001371140 00000 n 0001371246 00000 n 0001371373 00000 n 0001371488 00000 n 0001371624 00000 n 0001371751 00000 n 0001371881 00000 n 0001372002 00000 n 0001372129 00000 n 0001372241 00000 n 0001372356 00000 n 0001372471 00000 n 0001372601 00000 n 0001372728 00000 n 0001372852 00000 n 0001372973 00000 n 0001373097 00000 n 0001373221 00000 n 0001373348 00000 n 0001373475 00000 n 0001373572 00000 n 0001373672 00000 n 0001373784 00000 n 0001373914 00000 n 0001373995 00000 n 0001374092 00000 n 0001374189 00000 n 0001374289 00000 n 0001374386 00000 n 0001374483 00000 n 0001374580 00000 n 0001374686 00000 n 0001374795 00000 n 0001374901 00000 n 0001375004 00000 n 0001375119 00000 n 0001375219 00000 n 0001375316 00000 n 0001375416 00000 n 0001375510 00000 n 0001375612 00000 n 0001375705 00000 n 0001375798 00000 n 0001375885 00000 n 0001375987 00000 n 0001376083 00000 n 0001376174 00000 n 0001376289 00000 n 0001376425 00000 n 0001376531 00000 n 0001376658 00000 n 0001376764 00000 n 0001376891 00000 n 0001376972 00000 n 0001377068 00000 n 0001377167 00000 n 0001377278 00000 n 0001377374 00000 n 0001377492 00000 n 0001377619 00000 n 0001377764 00000 n 0001377864 00000 n 0001377982 00000 n 0001378097 00000 n 0001378194 00000 n 0001378309 00000 n 0001378421 00000 n 0001378524 00000 n 0001378645 00000 n 0001378748 00000 n 0001378869 00000 n 0001378972 00000 n 0001379093 00000 n 0001379193 00000 n 0001379311 00000 n 0001379411 00000 n 0001379529 00000 n 0001379644 00000 n 0001379743 00000 n 0001379846 00000 n 0001379967 00000 n 0001380085 00000 n 0001380191 00000 n 0001380303 00000 n 0001380439 00000 n 0001380572 00000 n 0001380699 00000 n 0001380829 00000 n 0001380956 00000 n 0001381101 00000 n 0001381246 00000 n 0001381370 00000 n 0001381494 00000 n 0001381615 00000 n 0001381721 00000 n 0001381845 00000 n 0001381951 00000 n 0001382075 00000 n 0001382181 00000 n 0001382305 00000 n 0001382408 00000 n 0001382529 00000 n 0001382632 00000 n 0001382753 00000 n 0001382871 00000 n 0001382977 00000 n 0001383101 00000 n 0001383222 00000 n 0001383337 00000 n 0001383427 00000 n 0001383523 00000 n 0001383619 00000 n 0001383727 00000 n 0001383823 00000 n 0001383919 00000 n 0001384010 00000 n 0001384134 00000 n 0001384231 00000 n 0001384334 00000 n 0001384452 00000 n 0001384582 00000 n 0001384727 00000 n 0001384854 00000 n 0001384948 00000 n 0001385048 00000 n 0001385154 00000 n 0001385263 00000 n 0001385393 00000 n 0001385511 00000 n 0001385644 00000 n 0001385729 00000 n 0001385850 00000 n 0001385974 00000 n 0001386098 00000 n 0001386219 00000 n 0001386307 00000 n 0001386392 00000 n 0001386485 00000 n 0001386606 00000 n 0001386712 00000 n 0001386800 00000 n 0001386891 00000 n 0001386973 00000 n 0001387061 00000 n 0001387173 00000 n 0001387276 00000 n 0001387372 00000 n 0001387466 00000 n 0001387548 00000 n 0001387633 00000 n 0001387730 00000 n 0001387824 00000 n 0001387915 00000 n 0001388018 00000 n 0001388103 00000 n 0001388209 00000 n 0001388300 00000 n 0001388391 00000 n 0001388479 00000 n 0001388564 00000 n 0001388655 00000 n 0001388740 00000 n 0001388831 00000 n 0001388937 00000 n 0001389064 00000 n 0001389155 00000 n 0001389258 00000 n 0001389364 00000 n 0001389455 00000 n 0001389555 00000 n 0001389654 00000 n 0001389736 00000 n 0001403403 00000 n 0001403783 00000 n 0001404503 00000 n trailer << /Root 6115 0 R /Info 1 0 R /ID [<64FCF6959D221E806D3BCDD40A34FBA5> <64FCF6959D221E806D3BCDD40A34FBA5>] /Size 6118 >> startxref 1404543 %%EOF systemtap-4.6/doc/SystemTap_Tapset_Reference/tapsets.tmpl000066400000000000000000000353641414446751200240140ustar00rootroot00000000000000 SystemTap Tapset Reference Manual 2008-2015 Red Hat, Inc. and others SystemTap Hackers This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live running kernel. The instrumentation makes extensive use of the probe points and functions provided in the tapset library. This document describes the various probe points and functions.

Tapset Name Format In this guide, tapset definitions appear in the following format: name:return (parameters) definition The return field specifies what data type the tapset extracts and returns from the kernel during a probe (and thus, returns). Tapsets use 2 data types for return: long (tapset extracts and returns an integer) and string (tapset extracts and returns a string). In some cases, tapsets do not have a return value. This simply means that the tapset does not extract anything from the kernel. This is common among asynchronous events such as timers, exit functions, and print functions.
Context Functions The context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. !Itapset/context.stp !Itapset/linux/context.stp !Itapset/linux/context-envvar.stp !Itapset/linux/context-symbols.stp !Itapset/linux/ucontext.stp !Itapset/linux/ucontext-symbols.stp !Itapset/linux/context-unwind.stp !Itapset/linux/context-caller.stp !Itapset/linux/ucontext-unwind.stp !Itapset/linux/task.stp !Itapset/linux/task_ancestry.stp !Itapset/pn.stp !Itapset/linux/pstrace.stp !Itapset/registers.stp Timestamp Functions Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. !Itapset/linux/timestamp.stp !Itapset/linux/timestamp_gtod.stp !Itapset/linux/timestamp_monotonic.stp !Itapset/stopwatch.stp Time utility functions Utility functions to turn seconds since the epoch (as returned by the timestamp function gettimeofday_s()) into a human readable date/time strings. !Itapset/linux/ctime.stp !Itapset/linux/tzinfo.stp !Itapset/tzinfo.stp Shell command functions Utility functions to enqueue shell commands. !Itapset/system.stp Memory Tapset This family of probe points is used to probe memory-related events or query the memory usage of the current process. It contains the following probe points: !Itapset/linux/memory.stp !Itapset/linux/proc_mem.stp Task Time Tapset This tapset defines utility functions to query time related properties of the current tasks, translate those in miliseconds and human readable strings. !Itapset/linux/task_time.stp Scheduler Tapset This family of probe points is used to probe the task scheduler activities. It contains the following probe points: !Itapset/linux/scheduler.stp IO Scheduler and block IO Tapset This family of probe points is used to probe block IO layer and IO scheduler activities. It contains the following probe points: !Itapset/linux/ioscheduler.stp !Itapset/linux/ioblock.stp SCSI Tapset This family of probe points is used to probe SCSI activities. It contains the following probe points: !Itapset/linux/scsi.stp TTY Tapset This family of probe points is used to probe TTY (Teletype) activities. It contains the following probe points: !Itapset/linux/tty.stp Interrupt Request (IRQ) Tapset This family of probe points is used to probe interrupt request (IRQ) activities. It contains the following probe points: !Itapset/linux/irq.stp Networking Tapset This family of probe points is used to probe the activities of the network device and protocol layers. !Itapset/linux/networking.stp !Itapset/linux/tcp.stp !Itapset/linux/udp.stp !Itapset/linux/ip.stp !Itapset/linux/inet.stp !Itapset/linux/rpc.stp !Itapset/linux/netfilter.stp Socket Tapset This family of probe points is used to probe socket activities. It contains the following probe points: !Itapset/linux/socket.stp !Itapset/linux/inet_sock.stp SNMP Information Tapset This family of probe points is used to probe socket activities to provide SNMP type information. It contains the following functions and probe points: !Itapset/linux/ipmib.stp !Itapset/linux/ipmib-filter-default.stp !Itapset/linux/tcpmib.stp !Itapset/linux/tcpmib-filter-default.stp !Itapset/linux/linuxmib.stp !Itapset/linux/linuxmib-filter-default.stp Kernel Process Tapset This family of probe points is used to probe process-related activities. It contains the following probe points: !Itapset/linux/kprocess.stp !Itapset/linux/target_set.stp !Itapset/linux/loadavg.stp Signal Tapset This family of probe points is used to probe signal activities. It contains the following probe points: !Itapset/linux/signal.stp Errno Tapset This set of functions is used to handle errno number values. It contains the following functions: !Itapset/errno.stp RLIMIT Tapset This set of functions is used to handle string which defines resource limits (RLIMIT_*) and returns corresponding number of resource limit. It contains the following functions: !Itapset/linux/rlimit.stp Device Tapset This set of functions is used to handle kernel and userspace device numbers. It contains the following functions: !Itapset/linux/dev.stp Directory-entry (dentry) Tapset This family of functions is used to map kernel VFS directory entry pointers to file or full path names. !Itapset/linux/dentry.stp Logging Tapset This family of functions is used to send simple message strings to various destinations. !Itapset/logging.stp !Itapset/linux/logging.stp Queue Statistics Tapset This family of functions is used to track performance of queuing systems. !Itapset/queue_stats.stp Random functions Tapset These functions deal with random number generation. !Itapset/random.stp String and data retrieving functions Tapset Functions to retrieve strings and other primitive types from the kernel or a user space programs based on addresses. All strings are of a maximum length given by MAXSTRINGLEN. !Itapset/linux/conversions.stp !Itapset/linux/atomic.stp !Itapset/uconversions.stp String and data writing functions Tapset The SystemTap guru mode can be used to test error handling in kernel code by simulating faults. The functions in the this tapset provide standard methods of writing to primitive types in the kernel's memory. All the functions in this tapset require the use of guru mode (-g). !Itapset/linux/conversions-guru.stp !Itapset/uconversions-guru.stp Guru tapsets Functions to deliberately interfere with the system's behavior, in order to inject faults or improve observability. All the functions in this tapset require the use of guru mode (-g). !Itapset/linux/guru-delay.stp !Itapset/linux/panic.stp !Itapset/linux/guru-signal.stp A collection of standard string functions Functions to get the length, a substring, getting at individual characters, string seaching, escaping, tokenizing, and converting strings to longs. !Itapset/string.stp !Itapset/tokenize.stp !Itapset/regex.stp Utility functions for using ansi control chars in logs Utility functions for logging using ansi control characters. This lets you manipulate the cursor position and character color output and attributes of log messages. !Itapset/ansi.stp !Itapset/indent.stp SystemTap Translator Tapset This family of user-space probe points is used to probe the operation of the SystemTap translator (stap) and run command (staprun). The tapset includes probes to watch the various phases of SystemTap and SystemTap's management of instrumentation cache. It contains the following probe points: !Itapset/stap_staticmarkers.stp Network File Storage Tapsets This family of probe points is used to probe network file storage functions and operations. !Itapset/linux/nfs_proc.stp !Itapset/linux/nfs.stp !Itapset/linux/nfsd.stp !Itapset/linux/nfsderrno.stp Speculation This family of functions provides the ability to speculative record information and then at a later point in the SystemTap script either commit the information or discard it. !Itapset/speculative.stp JSON Tapset This family of probe points, functions, and macros is used to output data in JSON format. It contains the following probe points, functions, and macros: !Itapset/linux/json.stp !Itapset/linux/json.stpm Output file switching Tapset Utility function to allow switching of output files. !Itapset/switchfile.stp Floating point processing Tapset Utility functions to extract, convert, and perform arithmetic on IEEE-754 doubles. !Itapset/floatingpoint.stp Syscall Any Tapset This family of probe points is designed to provide low cost instrumentation for cases where only the syscall name (or number) and return value are required and there is no need for the detailed syscall argument values. They are restricted versions of syscall.* and syscall.*.return. !Itapset/linux/syscall_any.stp !Syscalls systemtap-4.6/doc/Tapset_Reference_Guide/000077500000000000000000000000001414446751200205245ustar00rootroot00000000000000systemtap-4.6/doc/Tapset_Reference_Guide/Makefile000066400000000000000000000006411414446751200221650ustar00rootroot00000000000000#Makefile for Tapset_Reference_Guide XML_LANG = en-US DOCNAME = Tapset_Reference_Guide #PRODUCT = FIX_ME! BRAND = fedora #OTHER_LANGS = as-IN bn-IN de-DE es-ES fr-FR gu-IN hi-IN it-IT ja-JP kn-IN ko-KR ml-IN mr-IN or-IN pa-IN pt-BR ru-RU si-LK ta-IN te-IN zh-CN zh-TW # Extra Parameters start here # Extra Parameters stop here COMMON_CONFIG = /usr/share/publican include $(COMMON_CONFIG)/make/Makefile.common systemtap-4.6/doc/Tapset_Reference_Guide/README000066400000000000000000000032661414446751200214130ustar00rootroot00000000000000The Publican Tapset Reference Guide is build from files generated during the build of SystemTap when it is configured with "--enable-refdocs". Assuming that SystemTap was built in /home/wcohen/systemtap/build, the file needed to generate the Publican Tapset Reference Guide would be /home/wcohen/systemtap/build/doc/SystemTap_Tapset_Reference/tapsets.xml. To generate the required DocBook XML file of the tapsets.xml file and build the Publican Tapset Reference Guide from this directory: export BUILD=/home/wcohen/systemtap/build ./publicanize.sh -i=$BUILD/doc/SystemTap_Tapset_Reference/tapsets.xml This will copy and clean the XML source of SystemTap_Tapset_Reference created by kernel-doc and place the resulting file in ./en-US/Tapset_Reference_Guide.xml. You can now build it in pdf, html, etc using Publican. To make the Publican pdf file: make pdf-en-US The resulting output file will be ./tmp/en-US/pdf/Tapset_Reference_Guide.pdf The main source of the Language Reference Guide is in the build directory: $BUILD/doc/SystemTap_Tapset_Reference/tapsets.xml This main source is generated by kernel-doc when you run 'make' in the main git tree. The tapset documentation inside is collected from all tapset files defined in the following template file: ../SystemTap_Tapset_Reference/tapsets.tmpl The tapset file definitions appear in tapsets.tmpl as: !Itapset/context.stp !Itapset/context-symbols.stp etc context.stp, context-symbols, and all the other tapset files are located in: ../../tapset All tapset documentation should be done inside their respective tapset files. For more information about this project, refer to: http://sourceware.org/systemtap/wiki/ProjectTapsetReferenceGuide systemtap-4.6/doc/Tapset_Reference_Guide/en-US/000077500000000000000000000000001414446751200214535ustar00rootroot00000000000000systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Author_Group.xml000066400000000000000000000013371414446751200246170ustar00rootroot00000000000000 Red Hat Enterprise Linux Documentation Don Domingo Engineering Services and Operations Content Services ddomingo@redhat.com William Cohen Engineering Services and Operations Performance Tools wcohen@redhat.com systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Book_Info.xml000066400000000000000000000023111414446751200240370ustar00rootroot00000000000000 Tapset Reference Guide For SystemTap in Fedora 10 Fedora 10 1.0 0 The Tapset Reference Guide describes the most common tapset definitions users can apply to SystemTap scripts. All included tapsets documented in this guide are current as of Fedora 10 and the latest upstream version of SystemTap. Logo &YEAR; &HOLDER; systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Introduction.xml000066400000000000000000000046631414446751200246670ustar00rootroot00000000000000 Introduction SystemTap provides free software (GPL) infrastructure to simplify the gathering of information about the running Linux system. This assists diagnosis of a performance or functional problem. SystemTap eliminates the need for the developer to go through the tedious and disruptive instrument, recompile, install, and reboot sequence that may be otherwise required to collect data. SystemTap provides a simple command line interface and scripting language for writing instrumentation for a live, running kernel. This instrumentation uses probe points and functions provided in the tapset library. Simply put, tapsets are scripts that encapsulate knowledge about a kernel subsystem into pre-written probes and functions that can be used by other scripts. Tapsets are analogous to libraries for C programs. They hide the underlying details of a kernel area while exposing the key information needed to manage and monitor that aspect of the kernel. They are typically developed by kernel subject-matter experts. A tapset exposes the high-level data and state transitions of a subsystem. For the most part, good tapset developers assume that SystemTap users know little to nothing about the kernel subsystem's low-level details. As such, tapset developers write tapsets that help ordinary SystemTap users write meaningful and useful SystemTap scripts.
Documentation Goals This guide aims to document SystemTap's most useful and common tapset entries; it also contains guidelines on proper tapset development and documentation. The tapset definitions contained in this guide are extracted automatically from properly-formatted comments in the code of each tapset file. As such, any revisions to the definitions in this guide should be applied directly to their respective tapset file. add: "while users can read from code, it's easier to read from here!" add: target audience, expected proficiency of readers
systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Legal_Notice.xml000066400000000000000000000017221414446751200245240ustar00rootroot00000000000000 This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. For more details see the file COPYING in the source distribution of Linux. systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Preface.xml000066400000000000000000000011361414446751200235430ustar00rootroot00000000000000 Preface systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Tapset_Dev_Guide.xml000066400000000000000000000220311414446751200253460ustar00rootroot00000000000000 Tapset Development Guidelines This chapter describes the upstream guidelines on proper tapset documentation. It also contains information on how to properly document your tapsets, to ensure that they are properly defined in this guide.
Writing Good Tapsets The first step to writing good tapsets is to create a simple model of your subject area. For example, a model of the process subsystem might include the following: Key Data process ID parent process ID process group ID State Transitions forked exec'd running stopped terminated Note Both lists are examples, and are not meant to represent a complete list. Use your subsystem expertise to find probe points (function entries and exits) that expose the elements of the model, then define probe aliases for those points. Be aware that some state transitions can occur in more than one place. In those cases, an alias can place a probe in multiple locations. For example, process execs can occur in either the do_execve() or the compat_do_execve() functions. The following alias inserts probes at the beginning of those functions: probe kprocess.exec = kernel.function("do_execve"), kernel.function("compat_do_execve") {probe body} Try to place probes on stable interfaces (i.e., functions that are unlikely to change at the interface level) whenever possible. This will make the tapset less likely to break due to kernel changes. Where kernel version or architecture dependencies are unavoidable, use preprocessor conditionals (see the stap(1) man page for details). Fill in the probe bodies with the key data available at the probe points. Function entry probes can access the entry parameters specified to the function, while exit probes can access the entry parameters and the return value. Convert the data into meaningful forms where appropriate (e.g., bytes to kilobytes, state values to strings, etc). You may need to use auxiliary functions to access or convert some of the data. Auxiliary functions often use embedded C to do things that cannot be done in the SystemTap language, like access structure fields in some contexts, follow linked lists, etc. You can use auxiliary functions defined in other tapsets or write your own. In the following example, copy_process() returns a pointer to the task_struct for the new process. Note that the process ID of the new process is retrieved by calling task_pid() and passing it the task_struct pointer. In this case, the auxiliary function is an embedded C function defined in task.stp. probe kprocess.create = kernel.function("copy_process").return { task = $return new_pid = task_pid(task) } It is not advisable to write probes for every function. Most SystemTap users will not need or understand them. Keep your tapsets simple and high-level. info from here:http://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=tapset/DEVGUIDE
Elements of a Tapset The following sections describe the most important aspects of writing a tapset. Most of the content herein is suitable for developers who wish to contribute to SystemTap's upstream library of tapsets.
Tapset Files Tapset files are stored in src/tapset/ of the SystemTap GIT directory. Most tapset files are kept at that level. If you have code that only works with a specific architecture or kernel version, you may choose to put your tapset in the appropriate subdirectory. Installed tapsets are located in /usr/share/systemtap/tapset/ or /usr/local/share/systemtap/tapset. Personal tapsets can be stored anywhere. However, to ensure that SystemTap can use them, use -I tapset_directory to specify their location when invoking stap.
Namespace Probe alias names should take the form tapset_name.probe_name. For example, the probe for sending a signal could be named signal.send. Global symbol names (probes, functions, and variables) should be unique accross all tapsets. This helps avoid namespace collisions in scripts that use multiple tapsets. To ensure this, use tapset-specific prefixes in your global symbols. Internal symbol names should be prefixed with an underscore (_).
Comments and Documentation All probes and functions should include comment blocks that describe their purpose, the data they provide, and the context in which they run (e.g. interrupt, process, etc). Use comments in areas where your intent may not be clear from reading the code. Note that specially-formatted comments are automatically extracted from most tapsets and included in this guide. This helps ensure that tapset contributors can write their tapset and document it in the same place. The specified format for documenting tapsets is as follows: /** * probe tapset.name - Short summary of what the tapset does. * @argument: Explanation of argument. * @argument2: Explanation of argument2. Probes can have multiple arguments. * * Context: * A brief explanation of the tapset context. * Note that the context should only be 1 paragraph short. * * Text that will appear under "Description." * * A new paragraph that will also appear under the heading "Description". * * Header: * A paragraph that will appear under the heading "Header". **/ For example: /** * probe vm.write_shared_copy- Page copy for shared page write. * @address: The address of the shared write. * @zero: Boolean indicating whether it is a zero page * (can do a clear instead of a copy). * * Context: * The process attempting the write. * * Fires when a write to a shared page requires a page copy. This is * always preceded by a vm.write_shared. **/ To override the automatically-generated Synopsis content, use: * Synopsis: * New Synopsis string * For example: /** * probe signal.handle - Fires when the signal handler is invoked * @sig: The signal number that invoked the signal handler * * Synopsis: * <programlisting>static int handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, * sigset_t *oldset, struct pt_regs * regs)</programlisting> */ It is recommended that you use the <programlisting> tag in this instance, since overriding the Synopsis content of an entry does not automatically form the necessary tags. For the purposes of improving the DocBook XML output of your comments, you can also use the following XML tags in your comments: command emphasis programlisting remark (tagged strings will appear in Publican beta builds of the document)
systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.ent000066400000000000000000000002521414446751200265150ustar00rootroot00000000000000 systemtap-4.6/doc/Tapset_Reference_Guide/en-US/Tapset_Reference_Guide.xml000066400000000000000000036147511414446751200265510ustar00rootroot00000000000000 Context Functions The context functions provide additional information about where an event occurred. These functions can provide information such as a backtrace to where the event occurred and the current register values for the processor. LINUX SystemTap Tapset Reference November 2021 function::addr 3stap function::addr Address of the current probe point. Synopsis addr:long() Arguments None Description Returns the instruction pointer from the current probe's register state. Not all probe types have registers though, in which case zero is returned. The returned address is suitable for use with functions like symname and symdata. LINUX SystemTap Tapset Reference November 2021 function::asmlinkage 3stap function::asmlinkage Mark function as declared asmlinkage Synopsis asmlinkage() Arguments None Description Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared asmlinkage in the source. LINUX SystemTap Tapset Reference November 2021 function::backtrace 3stap function::backtrace Hex backtrace of current kernel stack Synopsis backtrace:string() Arguments None Description This function returns a string of hex addresses that are a backtrace of the kernel stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). See ubacktrace for user-space backtrace. LINUX SystemTap Tapset Reference November 2021 function::caller 3stap function::caller Return name and address of calling function Synopsis caller:string() Arguments None Description This function returns the address and name of the calling function. This is equivalent to calling: sprintf(s 0xx, symname(caller_addr), caller_addr) LINUX SystemTap Tapset Reference November 2021 function::caller_addr 3stap function::caller_addr Return caller address Synopsis caller_addr:long() Arguments None Description This function returns the address of the calling function. LINUX SystemTap Tapset Reference November 2021 function::callers 3stap function::callers Return first n elements of kernel stack backtrace Synopsis callers:string(n:long) Arguments n number of levels to descend in the stack (not counting the top level). If n is -1, print the entire stack. Description This function returns a string of the first n hex addresses from the backtrace of the kernel stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). LINUX SystemTap Tapset Reference November 2021 function::cmdline_arg 3stap function::cmdline_arg Fetch a command line argument Synopsis cmdline_arg:string(n:long) Arguments n Argument to get (zero is the program itself) Description Returns argument the requested argument from the current process or the empty string when there are not that many arguments or there is a problem retrieving the argument. Argument zero is traditionally the command itself. LINUX SystemTap Tapset Reference November 2021 function::cmdline_args 3stap function::cmdline_args Fetch command line arguments from current process Synopsis cmdline_args:string(n:long,m:long,delim:string) Arguments n First argument to get (zero is normally the program itself) m Last argument to get (or minus one for all arguments after n) delim String to use to separate arguments when more than one. Description Returns arguments from the current process starting with argument number n, up to argument m. If there are less than n arguments, or the arguments cannot be retrieved from the current process, the empty string is returned. If m is smaller than n then all arguments starting from argument n are returned. Argument zero is traditionally the command itself. LINUX SystemTap Tapset Reference November 2021 function::cmdline_str 3stap function::cmdline_str Fetch all command line arguments from current process Synopsis cmdline_str:string() Arguments None Description Returns all arguments from the current process delimited by spaces. Returns the empty string when the arguments cannot be retrieved. LINUX SystemTap Tapset Reference November 2021 function::cpu 3stap function::cpu Returns the current cpu number Synopsis cpu:long() Arguments None Description This function returns the current cpu number. LINUX SystemTap Tapset Reference November 2021 function::cpuid 3stap function::cpuid Returns the current cpu number Synopsis cpuid:long() Arguments None Description This function returns the current cpu number. Deprecated in SystemTap 1.4 and removed in SystemTap 1.5. LINUX SystemTap Tapset Reference November 2021 function::current_exe_file 3stap function::current_exe_file get the file struct pointer for the current task's executable file Synopsis current_exe_file:long() Arguments None Description This function returns the file struct pointer for the current task's executable file. Note that the file struct pointer isn't locked on return. The return value of this function can be passed to fullpath_struct_file to get the path from the file struct. LINUX SystemTap Tapset Reference November 2021 function::egid 3stap function::egid Returns the effective gid of a target process Synopsis egid:long() Arguments None Description This function returns the effective gid of a target process LINUX SystemTap Tapset Reference November 2021 function::env_var 3stap function::env_var Fetch environment variable from current process Synopsis env_var:string(name:string) Arguments name Name of the environment variable to fetch Description Returns the contents of the specified environment value for the current process. If the variable isn't set an empty string is returned. LINUX SystemTap Tapset Reference November 2021 function::euid 3stap function::euid Return the effective uid of a target process Synopsis euid:long() Arguments None Description Returns the effective user ID of the target process. LINUX SystemTap Tapset Reference November 2021 function::execname 3stap function::execname Returns the execname of a target process (or group of processes) Synopsis execname:string() Arguments None Description Returns the execname of a target process (or group of processes). LINUX SystemTap Tapset Reference November 2021 function::fastcall 3stap function::fastcall Mark function as declared fastcall Synopsis fastcall() Arguments None Description Call this function before accessing arguments using the *_arg functions if the probed kernel function was declared fastcall in the source. LINUX SystemTap Tapset Reference November 2021 function::gid 3stap function::gid Returns the group ID of a target process Synopsis gid:long() Arguments None Description This function returns the group ID of a target process. LINUX SystemTap Tapset Reference November 2021 function::int_arg 3stap function::int_arg Return function argument as signed int Synopsis int_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a signed int (i.e., a 32-bit integer sign-extended to 64 bits). LINUX SystemTap Tapset Reference November 2021 function::is_myproc 3stap function::is_myproc Determines if the current probe point has occurred in the user's own process Synopsis is_myproc:long() Arguments None Description This function returns 1 if the current probe point has occurred in the user's own process. LINUX SystemTap Tapset Reference November 2021 function::is_return 3stap function::is_return Whether the current probe context is a return probe Synopsis is_return:long() Arguments None Description Returns 1 if the current probe context is a return probe, returns 0 otherwise. LINUX SystemTap Tapset Reference November 2021 function::long_arg 3stap function::long_arg Return function argument as signed long Synopsis long_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a signed long. On architectures where a long is 32 bits, the value is sign-extended to 64 bits. LINUX SystemTap Tapset Reference November 2021 function::longlong_arg 3stap function::longlong_arg Return function argument as 64-bit value Synopsis longlong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a 64-bit value. LINUX SystemTap Tapset Reference November 2021 function::modname 3stap function::modname Return the kernel module name loaded at the address Synopsis modname:string(addr:long) Arguments addr The address to map to a kernel module name Description Returns the module name associated with the given address if known. If not known it will raise an error. If the address was not in a kernel module, but in the kernel itself, then the string kernel will be returned. LINUX SystemTap Tapset Reference November 2021 function::module_name 3stap function::module_name The module name of the current script Synopsis module_name:string() Arguments None Description This function returns the name of the stap module. Either generated randomly (stap_[0-9a-f]+_[0-9a-f]+) or set by stap -m <module_name>. LINUX SystemTap Tapset Reference November 2021 function::module_size 3stap function::module_size The module size of the current script Synopsis module_size:string() Arguments None Description This function returns the sizes of various sections of the stap module. LINUX SystemTap Tapset Reference November 2021 function::ns_egid 3stap function::ns_egid Returns the effective gid of a target process as seen in a user namespace Synopsis ns_egid:long() Arguments None Description This function returns the effective gid of a target process as seen in the target user namespace if provided, or the stap process namespace LINUX SystemTap Tapset Reference November 2021 function::ns_euid 3stap function::ns_euid Returns the effective user ID of a target process as seen in a user namespace Synopsis ns_euid:long() Arguments None Description This function returns the effective user ID of the target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_gid 3stap function::ns_gid Returns the group ID of a target process as seen in a user namespace Synopsis ns_gid:long() Arguments None Description This function returns the group ID of a target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_pgrp 3stap function::ns_pgrp Returns the process group ID of the current process as seen in a pid namespace Synopsis ns_pgrp:long() Arguments None Description This function returns the process group ID of the current process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_pid 3stap function::ns_pid Returns the ID of a target process as seen in a pid namespace Synopsis ns_pid:long() Arguments None Description This function returns the ID of a target process as seen in the target pid namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_ppid 3stap function::ns_ppid Returns the process ID of a target process's parent process as seen in a pid namespace Synopsis ns_ppid:long() Arguments None Description This function return the process ID of the target proccess's parent process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_sid 3stap function::ns_sid Returns the session ID of the current process as seen in a pid namespace Synopsis ns_sid:long() Arguments None Description The namespace-aware session ID of a process is the process group ID of the session leader as seen in the target pid namespace if provided, or the stap process namespace. Session ID is stored in the signal_struct since Kernel 2.6.0. LINUX SystemTap Tapset Reference November 2021 function::ns_tid 3stap function::ns_tid Returns the thread ID of a target process as seen in a pid namespace Synopsis ns_tid:long() Arguments None Description This function returns the thread ID of a target process as seen in the target pid namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::ns_uid 3stap function::ns_uid Returns the user ID of a target process as seen in a user namespace Synopsis ns_uid:long() Arguments None Description This function returns the user ID of the target process as seen in the target user namespace if provided, or the stap process namespace. LINUX SystemTap Tapset Reference November 2021 function::pexecname 3stap function::pexecname Returns the execname of a target process's parent process Synopsis pexecname:string() Arguments None Description This function returns the execname of a target process's parent procces. LINUX SystemTap Tapset Reference November 2021 function::pgrp 3stap function::pgrp Returns the process group ID of the current process Synopsis pgrp:long() Arguments None Description This function returns the process group ID of the current process. LINUX SystemTap Tapset Reference November 2021 function::pid 3stap function::pid Returns the ID of a target process Synopsis pid:long() Arguments None Description This function returns the ID of a target process. LINUX SystemTap Tapset Reference November 2021 function::pid2execname 3stap function::pid2execname The name of the given process identifier Synopsis pid2execname:string(pid:long) Arguments pid process identifier Description Return the name of the given process id. LINUX SystemTap Tapset Reference November 2021 function::pid2task 3stap function::pid2task The task_struct of the given process identifier Synopsis pid2task:long(pid:long) Arguments pid process identifier Description Return the task struct of the given process id. LINUX SystemTap Tapset Reference November 2021 function::pn 3stap function::pn Returns the active probe name Synopsis pn:string() Arguments None Description This function returns the script-level probe point associated with a currently running probe handler, including wild-card expansion effects. Context: The current probe point. LINUX SystemTap Tapset Reference November 2021 function::pnlabel 3stap function::pnlabel Returns the label name parsed from the probe name Synopsis pnlabel:string() Arguments None Description This returns the label name as parsed from the script-level probe point. This function will only work if called directly from the body of a '.label' probe point (i.e. no aliases). Context The current probe point. LINUX SystemTap Tapset Reference November 2021 function::pointer_arg 3stap function::pointer_arg Return function argument as pointer value Synopsis pointer_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned value of argument n, same as ulong_arg. Can be used with any type of pointer. LINUX SystemTap Tapset Reference November 2021 function::pp 3stap function::pp Returns the active probe point Synopsis pp:string() Arguments None Description This function returns the fully-resolved probe point associated with a currently running probe handler, including alias and wild-card expansion effects. Context: The current probe point. LINUX SystemTap Tapset Reference November 2021 function::ppfunc 3stap function::ppfunc Returns the function name parsed from pp Synopsis ppfunc:string() Arguments None Description This returns the function name from the current pp. Not all pp have functions in them, in which case "" is returned. LINUX SystemTap Tapset Reference November 2021 function::ppid 3stap function::ppid Returns the process ID of a target process's parent process Synopsis ppid:long() Arguments None Description This function return the process ID of the target proccess's parent process. LINUX SystemTap Tapset Reference November 2021 function::print_backtrace 3stap function::print_backtrace Print kernel stack back trace Synopsis print_backtrace() Arguments None Description This function is equivalent to print_stack(backtrace), except that deeper stack nesting may be supported. See print_ubacktrace for user-space backtrace. The function does not return a value. LINUX SystemTap Tapset Reference November 2021 function::print_backtrace_fileline 3stap function::print_backtrace_fileline Print kernel stack back trace Synopsis print_backtrace_fileline() Arguments None Description This function is equivalent to print_backtrace, but output for each symbol is longer including file names and line numbers. The function does not return a value. LINUX SystemTap Tapset Reference November 2021 function::print_regs 3stap function::print_regs Print a register dump Synopsis print_regs() Arguments None Description This function prints a register dump. Does nothing if no registers are available for the probe point. LINUX SystemTap Tapset Reference November 2021 function::print_stack 3stap function::print_stack Print out kernel stack from string Synopsis print_stack(stk:string) Arguments stk String with list of hexadecimal addresses Description This function performs a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to backtrace. Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function. Return nothing. NOTE it is recommended to use print_syms instead of this function. LINUX SystemTap Tapset Reference November 2021 function::print_syms 3stap function::print_syms Print out kernel stack from string Synopsis print_syms(callers:string) Arguments callers String with list of hexadecimal (kernel) addresses Description This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to stack, callers, and similar functions. Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by symdata. Returns nothing. LINUX SystemTap Tapset Reference November 2021 function::print_ubacktrace 3stap function::print_ubacktrace Print stack back trace for current user-space task. Synopsis 1) print_ubacktrace() 2) print_ubacktrace(pc:long,sp:long,fp:long) Arguments pc override PC sp override SP fp override FP Description 1) 2) Equivalent to print_ustack(ubacktrace), except that deeper stack nesting may be supported. Returns nothing. See print_backtrace for kernel backtrace. Equivalent to print_ubacktrace, but it performs the backtrace using the pc, sp, and fp provided. Useful Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::print_ubacktrace_brief 3stap function::print_ubacktrace_brief Print stack back trace for current user-space task. Synopsis print_ubacktrace_brief() Arguments None Description Equivalent to print_ubacktrace, but output for each symbol is shorter (just name and offset, or just the hex address of no symbol could be found). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::print_ubacktrace_fileline 3stap function::print_ubacktrace_fileline Print stack back trace for current user-space task. Synopsis 1) print_ubacktrace_fileline() 2) print_ubacktrace_fileline(pc:long,sp:long,fp:long) Arguments pc override PC sp override SP fp override FP Description 1) 2) Equivalent toprint_ubacktrace, but output for each symbol is longer including file names and line numbers. Equivalent to print_ubacktrace_fileline, but it performs the backtrace using the pc, sp, and fp passed in. Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::print_ustack 3stap function::print_ustack Print out stack for the current task from string. Synopsis print_ustack(stk:string) Arguments stk String with list of hexadecimal addresses for the current task. Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to ubacktrace for the current task. Print one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function. Return nothing. NOTE it is recommended to use print_usyms instead of this function. LINUX SystemTap Tapset Reference November 2021 function::print_usyms 3stap function::print_usyms Print out user stack from string Synopsis print_usyms(callers:string) Arguments callers String with list of hexadecimal (user) addresses Description This function performs a symbolic lookup of the addresses in the given string, which are assumed to be the result of prior calls to ustack, ucallers, and similar functions. Prints one line per address, including the address, the name of the function containing the address, and an estimate of its position within that function, as obtained by usymdata. Returns nothing. LINUX SystemTap Tapset Reference November 2021 function::probe_type 3stap function::probe_type The low level probe handler type of the current probe. Synopsis probe_type:string() Arguments None Description Returns a short string describing the low level probe handler type for the current probe point. This is for informational purposes only. Depending on the low level probe handler different context functions can or cannot provide information about the current event (for example some probe handlers only trigger in user space and have no associated kernel context). High-level probes might map to the same or different low-level probes (depending on systemtap version and/or kernel used). LINUX SystemTap Tapset Reference November 2021 function::probefunc 3stap function::probefunc Return the probe point's function name, if known Synopsis probefunc:string() Arguments None Description This function returns the name of the function being probed based on the current address, as computed by symname(addr) or usymname(uaddr) depending on probe context (whether the probe is a user probe or a kernel probe). Please note this function's behaviour differs between SystemTap 2.0 and earlier versions. Prior to 2.0, probefunc obtained the function name from the probe point string as returned by pp, and used the current address as a fallback. Consider using ppfunc instead. LINUX SystemTap Tapset Reference November 2021 function::probemod 3stap function::probemod Return the probe point's kernel module name Synopsis probemod:string() Arguments None Description This function returns the name of the kernel module containing the probe point, if known. LINUX SystemTap Tapset Reference November 2021 function::pstrace 3stap function::pstrace Chain of processes and pids back to init(1) Synopsis pstrace:string(task:long) Arguments task Pointer to task struct of process Description This function returns a string listing execname and pid for each process starting from task back to the process ancestor that init(1) spawned. LINUX SystemTap Tapset Reference November 2021 function::register 3stap function::register Return the signed value of the named CPU register Synopsis register:long(name:string) Arguments name Name of the register to return Description Return the value of the named CPU register, as it was saved when the current probe point was hit. If the register is 32 bits, it is sign-extended to 64 bits. For the i386 architecture, the following names are recognized. (name1/name2 indicates that name1 and name2 are alternative names for the same register.) eax/ax, ebp/bp, ebx/bx, ecx/cx, edi/di, edx/dx, eflags/flags, eip/ip, esi/si, esp/sp, orig_eax/orig_ax, xcs/cs, xds/ds, xes/es, xfs/fs, xss/ss. For the x86_64 architecture, the following names are recognized: 64-bit registers: r8, r9, r10, r11, r12, r13, r14, r15, rax/ax, rbp/bp, rbx/bx, rcx/cx, rdi/di, rdx/dx, rip/ip, rsi/si, rsp/sp; 32-bit registers: eax, ebp, ebx, ecx, edx, edi, edx, eip, esi, esp, flags/eflags, orig_eax; segment registers: xcs/cs, xss/ss. For powerpc, the following names are recognized: r0, r1, ... r31, nip, msr, orig_gpr3, ctr, link, xer, ccr, softe, trap, dar, dsisr, result. For s390x, the following names are recognized: r0, r1, ... r15, args, psw.mask, psw.addr, orig_gpr2, ilc, trap. For AArch64, the following names are recognized: x0, x1, ... x30, fp, lr, sp, pc, and orig_x0. LINUX SystemTap Tapset Reference November 2021 function::registers_valid 3stap function::registers_valid Determines validity of register and u_register in current context Synopsis registers_valid:long() Arguments None Description This function returns 1 if register and u_register can be used in the current context, or 0 otherwise. For example, registers_valid returns 0 when called from a begin or end probe. LINUX SystemTap Tapset Reference November 2021 function::regparm 3stap function::regparm Specify regparm value used to compile function Synopsis regparm(n:long) Arguments n original regparm value Description Call this function with argument n before accessing function arguments using the *_arg function is the function was build with the gcc -mregparm=n option. (The i386 kernel is built with \-mregparm=3, so systemtap considers regparm(3) the default for kernel functions on that architecture.) Only valid on i386 and x86_64 (when probing 32bit applications). Produces an error on other architectures. LINUX SystemTap Tapset Reference November 2021 function::remote_id 3stap function::remote_id The index of this instance in a remote execution. Synopsis remote_id:long() Arguments None Description This function returns a number 0..N, which is the unique index of this particular script execution from a swarm of stap --remote A --remote B ... runs, and is the same number stap --remote-prefix would print. The function returns -1 if the script was not launched with stap --remote, or if the remote staprun/stapsh are older than version 1.7. LINUX SystemTap Tapset Reference November 2021 function::remote_uri 3stap function::remote_uri The name of this instance in a remote execution. Synopsis remote_uri:string() Arguments None Description This function returns the remote host used to invoke this particular script execution from a swarm of stap --remote runs. It may not be unique among the swarm. The function returns an empty string if the script was not launched with stap --remote. LINUX SystemTap Tapset Reference November 2021 function::s32_arg 3stap function::s32_arg Return function argument as signed 32-bit value Synopsis s32_arg:long(n:long) Arguments n index of argument to return Description Return the signed 32-bit value of argument n, same as int_arg. LINUX SystemTap Tapset Reference November 2021 function::s64_arg 3stap function::s64_arg Return function argument as signed 64-bit value Synopsis s64_arg:long(n:long) Arguments n index of argument to return Description Return the signed 64-bit value of argument n, same as longlong_arg. LINUX SystemTap Tapset Reference November 2021 function::set_int_arg 3stap function::set_int_arg Set function argument as signed int Synopsis set_int_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the value of argument n as a signed int (i.e., a 32-bit integer sign-extended to 64 bits). LINUX SystemTap Tapset Reference November 2021 function::set_long_arg 3stap function::set_long_arg Set argument as signed long Synopsis set_long_arg(n:long,v:long) Arguments n index of argument to set v value to set Description Set the value of argument n as a signed long. On architectures where a long is 32 bits, the value is sign-extended to 64 bits. LINUX SystemTap Tapset Reference November 2021 function::set_longlong_arg 3stap function::set_longlong_arg Set function argument as 64-bit value Synopsis set_longlong_arg:long(n:long,v:long) Arguments n index of argument to return v value to set Description Set the value of argument n as a 64-bit value. LINUX SystemTap Tapset Reference November 2021 function::set_pointer_arg 3stap function::set_pointer_arg Set function argument as pointer value Synopsis set_pointer_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the unsigned value of argument n, same as ulong_arg. Can be used with any type of pointer. LINUX SystemTap Tapset Reference November 2021 function::set_s32_arg 3stap function::set_s32_arg Set function argument as signed 32-bit value Synopsis set_s32_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the signed 32-bit value of argument n, same as int_arg. LINUX SystemTap Tapset Reference November 2021 function::set_s64_arg 3stap function::set_s64_arg Set function argument as signed 64-bit value Synopsis set_s64_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the signed 64-bit value of argument n, same as longlong_arg. LINUX SystemTap Tapset Reference November 2021 function::set_u32_arg 3stap function::set_u32_arg Set function argument as unsigned 32-bit value Synopsis set_u32_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the unsigned 32-bit value of argument n, same as uint_arg. LINUX SystemTap Tapset Reference November 2021 function::set_u64_arg 3stap function::set_u64_arg Set function argument as unsigned 64-bit value Synopsis set_u64_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the unsigned 64-bit value of argument n, same as ulonglong_arg. LINUX SystemTap Tapset Reference November 2021 function::set_uint_arg 3stap function::set_uint_arg Set argument as unsigned int Synopsis set_uint_arg:long(n:long,v:long) Arguments n index of argument to set v value to set Description Set the value of argument n as an unsigned int (i.e., a 32-bit integer zero-extended to 64 bits). LINUX SystemTap Tapset Reference November 2021 function::set_ulong_arg 3stap function::set_ulong_arg Set function argument as unsigned long Synopsis set_ulong_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the value of argument n as an unsigned long. On architectures where a long is 32 bits, the value is zero-extended to 64 bits. LINUX SystemTap Tapset Reference November 2021 function::set_ulonglong_arg 3stap function::set_ulonglong_arg Set function argument as 64-bit value Synopsis set_ulonglong_arg(n:long,v:long) Arguments n index of argument to return v value to set Description Set the value of argument n as a 64-bit value. (Same as longlong_arg.) LINUX SystemTap Tapset Reference November 2021 function::sid 3stap function::sid Returns the session ID of the current process Synopsis sid:long() Arguments None Description The session ID of a process is the process group ID of the session leader. Session ID is stored in the signal_struct since Kernel 2.6.0. LINUX SystemTap Tapset Reference November 2021 function::sprint_backtrace 3stap function::sprint_backtrace Return stack back trace as string Synopsis sprint_backtrace:string() Arguments None Description Returns a simple (kernel) backtrace. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_backtrace. Equivalent to sprint_stack(backtrace), but more efficient (no need to translate between hex strings and final backtrace string). LINUX SystemTap Tapset Reference November 2021 function::sprint_stack 3stap function::sprint_stack Return stack for kernel addresses from string Synopsis sprint_stack:string(stk:string) Arguments stk String with list of hexadecimal (kernel) addresses Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to backtrace. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_stack. NOTE it is recommended to use sprint_syms instead of this function. LINUX SystemTap Tapset Reference November 2021 function::sprint_syms 3stap function::sprint_syms Return stack for kernel addresses from string Synopsis sprint_syms(callers:string) Arguments callers String with list of hexadecimal (kernel) addresses Description Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to stack, callers, and similar functions. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found), as obtained from symdata. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_syms. LINUX SystemTap Tapset Reference November 2021 function::sprint_ubacktrace 3stap function::sprint_ubacktrace Return stack back trace for current user-space task as string. Synopsis sprint_ubacktrace:string() Arguments None Description Returns a simple backtrace for the current task. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ubacktrace. Equivalent to sprint_ustack(ubacktrace), but more efficient (no need to translate between hex strings and final backtrace string). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::sprint_ustack 3stap function::sprint_ustack Return stack for the current task from string. Synopsis sprint_ustack:string(stk:string) Arguments stk String with list of hexadecimal addresses for the current task. Description Perform a symbolic lookup of the addresses in the given string, which is assumed to be the result of a prior call to ubacktrace for the current task. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found). Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_ustack. NOTE it is recommended to use sprint_usyms instead of this function. LINUX SystemTap Tapset Reference November 2021 function::sprint_usyms 3stap function::sprint_usyms Return stack for user addresses from string Synopsis sprint_usyms(callers:string) Arguments callers String with list of hexadecimal (user) addresses Description Perform a symbolic lookup of the addresses in the given string, which are assumed to be the result of a prior calls to ustack, ucallers, and similar functions. Returns a simple backtrace from the given hex string. One line per address. Includes the symbol name (or hex address if symbol couldn't be resolved) and module name (if found), as obtained from usymdata. Includes the offset from the start of the function if found, otherwise the offset will be added to the module (if found, between brackets). Returns the backtrace as string (each line terminated by a newline character). Note that the returned stack will be truncated to MAXSTRINGLEN, to print fuller and richer stacks use print_usyms. LINUX SystemTap Tapset Reference November 2021 function::stack 3stap function::stack Return address at given depth of kernel stack backtrace Synopsis stack:long(n:long) Arguments n number of levels to descend in the stack. Description Performs a simple (kernel) backtrace, and returns the element at the specified position. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times stack is called, or in what order. LINUX SystemTap Tapset Reference November 2021 function::stack_size 3stap function::stack_size Return the size of the kernel stack Synopsis stack_size:long() Arguments None Description This function returns the size of the kernel stack. LINUX SystemTap Tapset Reference November 2021 function::stack_unused 3stap function::stack_unused Returns the amount of kernel stack currently available Synopsis stack_unused:long() Arguments None Description This function determines how many bytes are currently available in the kernel stack. LINUX SystemTap Tapset Reference November 2021 function::stack_used 3stap function::stack_used Returns the amount of kernel stack used Synopsis stack_used:long() Arguments None Description This function determines how many bytes are currently used in the kernel stack. LINUX SystemTap Tapset Reference November 2021 function::stp_pid 3stap function::stp_pid The process id of the stapio process Synopsis stp_pid:long() Arguments None Description This function returns the process id of the stapio process that launched this script. There could be other SystemTap scripts and stapio processes running on the system. LINUX SystemTap Tapset Reference November 2021 function::symdata 3stap function::symdata Return the kernel symbol and module offset for the address Synopsis symdata:string(addr:long) Arguments addr The address to translate Description Returns the (function) symbol name associated with the given address if known, the offset from the start and size of the symbol, plus module name (between brackets). If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address. LINUX SystemTap Tapset Reference November 2021 function::symfile 3stap function::symfile Return the file name of a given address. Synopsis symfile:string(addr:long) Arguments addr The address to translate. Description Returns the file name of the given address, if known. If the file name cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::symfileline 3stap function::symfileline Return the file name and line number of an address. Synopsis symfileline:string(addr:long) Arguments addr The address to translate. Description Returns the file name and the (approximate) line number of the given address, if known. If the file name or the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::symline 3stap function::symline Return the line number of an address. Synopsis symline:string(addr:long) Arguments addr The address to translate. Description Returns the (approximate) line number of the given address, if known. If the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::symname 3stap function::symname Return the kernel symbol associated with the given address Synopsis symname:string(addr:long) Arguments addr The address to translate Description Returns the (function) symbol name associated with the given address if known. If not known it will return the hex string representation of addr. LINUX SystemTap Tapset Reference November 2021 function::target 3stap function::target Return the process ID of the target process Synopsis target:long() Arguments None Description This function returns the process ID of the target process. This is useful in conjunction with the -x PID or -c CMD command-line options to stap. An example of its use is to create scripts that filter on a specific process. -x <pid> target returns the pid specified by -x -c target returns the pid for the executed command specified by -c LINUX SystemTap Tapset Reference November 2021 function::task_ancestry 3stap function::task_ancestry The ancestry of the given task Synopsis task_ancestry:string(task:long,with_time:long) Arguments task task_struct pointer with_time set to 1 to also print the start time of processes (given as a delta from boot time) Description Return the ancestry of the given task in the form of grandparent_process=>parent_process=>process. LINUX SystemTap Tapset Reference November 2021 function::task_backtrace 3stap function::task_backtrace Hex backtrace of an arbitrary task Synopsis task_backtrace:string(task:long) Arguments task pointer to task_struct Description This function returns a string of hex addresses that are a backtrace of the stack of a particular task Output may be truncated as per maximum string length. Deprecated in SystemTap 1.6. LINUX SystemTap Tapset Reference November 2021 function::task_cpu 3stap function::task_cpu The scheduled cpu of the task Synopsis task_cpu:long(task:long) Arguments task task_struct pointer Description This function returns the scheduled cpu for the given task. LINUX SystemTap Tapset Reference November 2021 function::task_current 3stap function::task_current The current task_struct of the current task Synopsis task_current:long() Arguments None Description This function returns the task_struct representing the current process. This address can be passed to the various task_*() functions to extract more task-specific data. LINUX SystemTap Tapset Reference November 2021 function::task_cwd_path 3stap function::task_cwd_path get the path struct pointer for a task's current working directory Synopsis task_cwd_path:long(task:long) Arguments task task_struct pointer. LINUX SystemTap Tapset Reference November 2021 function::task_egid 3stap function::task_egid The effective group identifier of the task Synopsis task_egid:long(task:long) Arguments task task_struct pointer Description This function returns the effective group id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_euid 3stap function::task_euid The effective user identifier of the task Synopsis task_euid:long(task:long) Arguments task task_struct pointer Description This function returns the effective user id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_exe_file 3stap function::task_exe_file get the file struct pointer for a task's executable file Synopsis task_exe_file:long(task:long) Arguments task task_struct pointer. LINUX SystemTap Tapset Reference November 2021 function::task_execname 3stap function::task_execname The name of the task Synopsis task_execname:string(task:long) Arguments task task_struct pointer Description Return the name of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_fd_lookup 3stap function::task_fd_lookup get the file struct for a task's fd Synopsis task_fd_lookup:long(task:long,fd:long) Arguments task task_struct pointer. fd file descriptor number. Description Returns the file struct pointer for a task's file descriptor. LINUX SystemTap Tapset Reference November 2021 function::task_gid 3stap function::task_gid The group identifier of the task Synopsis task_gid:long(task:long) Arguments task task_struct pointer Description This function returns the group id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_max_file_handles 3stap function::task_max_file_handles The max number of open files for the task Synopsis task_max_file_handles:long(task:long) Arguments task task_struct pointer Description This function returns the maximum number of file handlers for the given task. LINUX SystemTap Tapset Reference November 2021 function::task_nice 3stap function::task_nice The nice value of the task Synopsis task_nice:long(task:long) Arguments task task_struct pointer Description This function returns the nice value of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_ns_egid 3stap function::task_ns_egid The effective group identifier of the task Synopsis task_ns_egid:long(task:long) Arguments task task_struct pointer Description This function returns the effective group id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_ns_euid 3stap function::task_ns_euid The effective user identifier of the task Synopsis task_ns_euid:long(task:long) Arguments task task_struct pointer Description This function returns the effective user id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_ns_gid 3stap function::task_ns_gid The group identifier of the task as seen in a namespace Synopsis task_ns_gid:long(task:long) Arguments task task_struct pointer Description This function returns the group id of the given task as seen in in the given user namespace. LINUX SystemTap Tapset Reference November 2021 function::task_ns_pid 3stap function::task_ns_pid The process identifier of the task Synopsis task_ns_pid:long(task:long) Arguments task task_struct pointer Description This fucntion returns the process id of the given task based on the specified pid namespace.. LINUX SystemTap Tapset Reference November 2021 function::task_ns_tid 3stap function::task_ns_tid The thread identifier of the task as seen in a namespace Synopsis task_ns_tid:long(task:long) Arguments task task_struct pointer Description This function returns the thread id of the given task as seen in the pid namespace. LINUX SystemTap Tapset Reference November 2021 function::task_ns_uid 3stap function::task_ns_uid The user identifier of the task Synopsis task_ns_uid:long(task:long) Arguments task task_struct pointer Description This function returns the user id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_open_file_handles 3stap function::task_open_file_handles The number of open files of the task Synopsis task_open_file_handles:long(task:long) Arguments task task_struct pointer Description This function returns the number of open file handlers for the given task. LINUX SystemTap Tapset Reference November 2021 function::task_parent 3stap function::task_parent The task_struct of the parent task Synopsis task_parent:long(task:long) Arguments task task_struct pointer Description This function returns the parent task_struct of the given task. This address can be passed to the various task_*() functions to extract more task-specific data. LINUX SystemTap Tapset Reference November 2021 function::task_pid 3stap function::task_pid The process identifier of the task Synopsis task_pid:long(task:long) Arguments task task_struct pointer Description This fucntion returns the process id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_prio 3stap function::task_prio The priority value of the task Synopsis task_prio:long(task:long) Arguments task task_struct pointer Description This function returns the priority value of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_state 3stap function::task_state The state of the task Synopsis task_state:long(task:long) Arguments task task_struct pointer Description Return the state of the given task, one of: TASK_RUNNING (0), TASK_INTERRUPTIBLE (1), TASK_UNINTERRUPTIBLE (2), TASK_STOPPED (4), TASK_TRACED (8), EXIT_ZOMBIE (16), or EXIT_DEAD (32). LINUX SystemTap Tapset Reference November 2021 function::task_tid 3stap function::task_tid The thread identifier of the task Synopsis task_tid:long(task:long) Arguments task task_struct pointer Description This function returns the thread id of the given task. LINUX SystemTap Tapset Reference November 2021 function::task_uid 3stap function::task_uid The user identifier of the task Synopsis task_uid:long(task:long) Arguments task task_struct pointer Description This function returns the user id of the given task. LINUX SystemTap Tapset Reference November 2021 function::tid 3stap function::tid Returns the thread ID of a target process Synopsis tid:long() Arguments None Description This function returns the thread ID of the target process. LINUX SystemTap Tapset Reference November 2021 function::u32_arg 3stap function::u32_arg Return function argument as unsigned 32-bit value Synopsis u32_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned 32-bit value of argument n, same as uint_arg. LINUX SystemTap Tapset Reference November 2021 function::u64_arg 3stap function::u64_arg Return function argument as unsigned 64-bit value Synopsis u64_arg:long(n:long) Arguments n index of argument to return Description Return the unsigned 64-bit value of argument n, same as ulonglong_arg. LINUX SystemTap Tapset Reference November 2021 function::u_register 3stap function::u_register Return the unsigned value of the named CPU register Synopsis u_register:long(name:string) Arguments name Name of the register to return Description Same as register(name), except that if the register is 32 bits wide, it is zero-extended to 64 bits. LINUX SystemTap Tapset Reference November 2021 function::uaddr 3stap function::uaddr User space address of current running task Synopsis uaddr:long() Arguments None Description Returns the address in userspace that the current task was at when the probe occurred. When the current running task isn't a user space thread, or the address cannot be found, zero is returned. Can be used to see where the current task is combined with usymname or usymdata. Often the task will be in the VDSO where it entered the kernel. LINUX SystemTap Tapset Reference November 2021 function::ubacktrace 3stap function::ubacktrace Hex backtrace of current user-space task stack. Synopsis ubacktrace:string() Arguments None Description Return a string of hex addresses that are a backtrace of the stack of the current task. Output may be truncated as per maximum string length. Returns empty string when current probe point cannot determine user backtrace. See backtrace for kernel traceback. Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::ucallers 3stap function::ucallers Return first n elements of user stack backtrace Synopsis ucallers:string(n:long) Arguments n number of levels to descend in the stack (not counting the top level). If n is -1, print the entire stack. Description This function returns a string of the first n hex addresses from the backtrace of the user stack. Output may be truncated as per maximum string length (MAXSTRINGLEN). Note To get (full) backtraces for user space applications and shared shared libraries not mentioned in the current script run stap with -d /path/to/exe-or-so and/or add --ldd to load all needed unwind data. LINUX SystemTap Tapset Reference November 2021 function::uid 3stap function::uid Returns the user ID of a target process Synopsis uid:long() Arguments None Description This function returns the user ID of the target process. LINUX SystemTap Tapset Reference November 2021 function::uint_arg 3stap function::uint_arg Return function argument as unsigned int Synopsis uint_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as an unsigned int (i.e., a 32-bit integer zero-extended to 64 bits). LINUX SystemTap Tapset Reference November 2021 function::ulong_arg 3stap function::ulong_arg Return function argument as unsigned long Synopsis ulong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as an unsigned long. On architectures where a long is 32 bits, the value is zero-extended to 64 bits. LINUX SystemTap Tapset Reference November 2021 function::ulonglong_arg 3stap function::ulonglong_arg Return function argument as 64-bit value Synopsis ulonglong_arg:long(n:long) Arguments n index of argument to return Description Return the value of argument n as a 64-bit value. (Same as longlong_arg.) LINUX SystemTap Tapset Reference November 2021 function::umodname 3stap function::umodname Returns the (short) name of the user module. Synopsis umodname:string(addr:long) Arguments addr User-space address Description Returns the short name of the user space module for the current task that that the given address is part of. Reports an error when the address isn't in a (mapped in) module, or the module cannot be found for some reason. LINUX SystemTap Tapset Reference November 2021 function::user_mode 3stap function::user_mode Determines if probe point occurs in user-mode Synopsis user_mode:long() Arguments None Description Return 1 if the probe point occurred in user-mode. LINUX SystemTap Tapset Reference November 2021 function::ustack 3stap function::ustack Return address at given depth of user stack backtrace Synopsis ustack:long(n:long) Arguments n number of levels to descend in the stack. Description Performs a simple (user space) backtrace, and returns the element at the specified position. The results of the backtrace itself are cached, so that the backtrace computation is performed at most once no matter how many times ustack is called, or in what order. LINUX SystemTap Tapset Reference November 2021 function::usymdata 3stap function::usymdata Return the symbol and module offset of an address. Synopsis usymdata:string(addr:long) Arguments addr The address to translate. Description Returns the (function) symbol name associated with the given address in the current task if known, the offset from the start and the size of the symbol, plus the module name (between brackets). If symbol is unknown, but module is known, the offset inside the module, plus the size of the module is added. If any element is not known it will be omitted and if the symbol name is unknown it will return the hex string for the given address. LINUX SystemTap Tapset Reference November 2021 function::usymfile 3stap function::usymfile Return the file name of a given address. Synopsis usymfile:string(addr:long) Arguments addr The address to translate. Description Returns the file name of the given address, if known. If the file name cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::usymfileline 3stap function::usymfileline Return the file name and line number of an address. Synopsis usymfileline:string(addr:long) Arguments addr The address to translate. Description Returns the file name and the (approximate) line number of the given address, if known. If the file name or the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::usymline 3stap function::usymline Return the line number of an address. Synopsis usymline:string(addr:long) Arguments addr The address to translate. Description Returns the (approximate) line number of the given address, if known. If the line number cannot be found, the hex string representation of the address will be returned. LINUX SystemTap Tapset Reference November 2021 function::usymname 3stap function::usymname Return the symbol of an address in the current task. Synopsis usymname:string(addr:long) Arguments addr The address to translate. Description Returns the (function) symbol name associated with the given address if known. If not known it will return the hex string representation of addr. Timestamp Functions Each timestamp function returns a value to indicate when a function is executed. These returned values can then be used to indicate when an event occurred, provide an ordering for events, or compute the amount of time elapsed between two time stamps. LINUX SystemTap Tapset Reference November 2021 function::HZ 3stap function::HZ Kernel HZ Synopsis HZ:long() Arguments None Description This function returns the value of the kernel HZ macro, which corresponds to the rate of increase of the jiffies value. LINUX SystemTap Tapset Reference November 2021 function::cpu_clock_ms 3stap function::cpu_clock_ms Number of milliseconds on the given cpu's clock Synopsis cpu_clock_ms:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of milliseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::cpu_clock_ns 3stap function::cpu_clock_ns Number of nanoseconds on the given cpu's clock Synopsis cpu_clock_ns:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of nanoseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::cpu_clock_s 3stap function::cpu_clock_s Number of seconds on the given cpu's clock Synopsis cpu_clock_s:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of seconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::cpu_clock_us 3stap function::cpu_clock_us Number of microseconds on the given cpu's clock Synopsis cpu_clock_us:long(cpu:long) Arguments cpu Which processor's clock to read Description This function returns the number of microseconds on the given cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::delete_stopwatch 3stap function::delete_stopwatch Remove an existing stopwatch Synopsis delete_stopwatch(name:string) Arguments name the stopwatch name Description Remove stopwatch name. LINUX SystemTap Tapset Reference November 2021 function::get_cycles 3stap function::get_cycles Processor cycle count Synopsis get_cycles:long() Arguments None Description This function returns the processor cycle counter value if available, else it returns zero. The cycle counter is free running and unsynchronized on each processor. Thus, the order of events cannot determined by comparing the results of the get_cycles function on different processors. LINUX SystemTap Tapset Reference November 2021 function::gettimeofday_ms 3stap function::gettimeofday_ms Number of milliseconds since UNIX epoch Synopsis gettimeofday_ms:long() Arguments None Description This function returns the number of milliseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2021 function::gettimeofday_ns 3stap function::gettimeofday_ns Number of nanoseconds since UNIX epoch Synopsis gettimeofday_ns:long() Arguments None Description This function returns the number of nanoseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2021 function::gettimeofday_s 3stap function::gettimeofday_s Number of seconds since UNIX epoch Synopsis gettimeofday_s:long() Arguments None Description This function returns the number of seconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2021 function::gettimeofday_us 3stap function::gettimeofday_us Number of microseconds since UNIX epoch Synopsis gettimeofday_us:long() Arguments None Description This function returns the number of microseconds since the UNIX epoch. LINUX SystemTap Tapset Reference November 2021 function::jiffies 3stap function::jiffies Kernel jiffies count Synopsis jiffies:long() Arguments None Description This function returns the value of the kernel jiffies variable. This value is incremented periodically by timer interrupts, and may wrap around a 32-bit or 64-bit boundary. See HZ. LINUX SystemTap Tapset Reference November 2021 function::ktime_get_ns 3stap function::ktime_get_ns Number of nanoseconds since boot Synopsis ktime_get_ns:long() Arguments None Description This function returns the system ktime. LINUX SystemTap Tapset Reference November 2021 function::local_clock_ms 3stap function::local_clock_ms Number of milliseconds on the local cpu's clock Synopsis local_clock_ms:long() Arguments None Description This function returns the number of milliseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::local_clock_ns 3stap function::local_clock_ns Number of nanoseconds on the local cpu's clock Synopsis local_clock_ns:long() Arguments None Description This function returns the number of nanoseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::local_clock_s 3stap function::local_clock_s Number of seconds on the local cpu's clock Synopsis local_clock_s:long() Arguments None Description This function returns the number of seconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::local_clock_us 3stap function::local_clock_us Number of microseconds on the local cpu's clock Synopsis local_clock_us:long() Arguments None Description This function returns the number of microseconds on the local cpu's clock. This is always monotonic comparing on the same cpu, but may have some drift between cpus (within about a jiffy). LINUX SystemTap Tapset Reference November 2021 function::read_stopwatch_ms 3stap function::read_stopwatch_ms Reads the time in milliseconds for a stopwatch Synopsis read_stopwatch_ms:long(name:string) Arguments name stopwatch name Description Returns time in milliseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2021 function::read_stopwatch_ns 3stap function::read_stopwatch_ns Reads the time in nanoseconds for a stopwatch Synopsis read_stopwatch_ns:long(name:string) Arguments name stopwatch name Description Returns time in nanoseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2021 function::read_stopwatch_s 3stap function::read_stopwatch_s Reads the time in seconds for a stopwatch Synopsis read_stopwatch_s:long(name:string) Arguments name stopwatch name Description Returns time in seconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2021 function::read_stopwatch_us 3stap function::read_stopwatch_us Reads the time in microseconds for a stopwatch Synopsis read_stopwatch_us:long(name:string) Arguments name stopwatch name Description Returns time in microseconds for stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2021 function::start_stopwatch 3stap function::start_stopwatch Start a stopwatch Synopsis start_stopwatch(name:string) Arguments name the stopwatch name Description Start stopwatch name. Creates stopwatch name if it does not currently exist. LINUX SystemTap Tapset Reference November 2021 function::stop_stopwatch 3stap function::stop_stopwatch Stop a stopwatch Synopsis stop_stopwatch(name:string) Arguments name the stopwatch name Description Stop stopwatch name. Creates stopwatch name if it does not currently exist. Time utility functions Utility functions to turn seconds since the epoch (as returned by the timestamp function gettimeofday_s()) into a human readable date/time strings. LINUX SystemTap Tapset Reference November 2021 function::ctime 3stap function::ctime Convert seconds since epoch into human readable date/time string Synopsis 1) ctime:string(epochsecs:long) 2) ctime:string() Arguments epochsecs Number of seconds since epoch (as returned by gettimeofday_s) Description 1) Takes an argument of seconds since the epoch as returned bygettimeofday_s. Returns a string of the form 2) Wed Jun 30 21:49:08 1993 The string will always be exactly 24 characters. If the time would be unreasonable far in the past (before what can be represented with a 32 bit offset in seconds from the epoch) an error will occur (which can be avoided with try/catch). If the time would be unreasonable far in the future, an error will also occur. Note that the epoch (zero) corresponds to Thu Jan 1 00:00:00 1970 The earliest full date given by ctime, corresponding to epochsecs -2147483648 is Fri Dec 13 20:45:52 1901. The latest full date given by ctime, corresponding to epochsecs 2147483647 is Tue Jan 19 03:14:07 2038. The abbreviations for the days of the week are ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, and ‘Sat’. The abbreviations for the months are ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’, and ‘Dec’. Note that the real C library ctime function puts a newline ('\n') character at the end of the string that this function does not. Also note that since the kernel has no concept of timezones, the returned time is always in GMT. LINUX SystemTap Tapset Reference November 2021 function::tz_ctime 3stap function::tz_ctime Convert seconds since epoch into human readable date/time string, with local time zone Synopsis tz_ctime(epochsecs:) Arguments epochsecs number of seconds since epoch (as returned by gettimeofday_s) Description Takes an argument of seconds since the epoch as returned by gettimeofday_s. Returns a string of the same form as ctime, but offsets the epoch time for the local time zone, and appends the name of the local time zone. The string length may vary. The time zone information is passed by staprun at script startup only. LINUX SystemTap Tapset Reference November 2021 function::tz_gmtoff 3stap function::tz_gmtoff Return local time zone offset Synopsis tz_gmtoff() Arguments None Description Returns the local time zone offset (seconds west of UTC), as passed by staprun at script startup only. LINUX SystemTap Tapset Reference November 2021 function::tz_name 3stap function::tz_name Return local time zone name Synopsis tz_name() Arguments None Description Returns the local time zone name, as passed by staprun at script startup only. Shell command functions Utility functions to enqueue shell commands. LINUX SystemTap Tapset Reference November 2021 function::system 3stap function::system Issue a command to the system Synopsis system(cmd:string) Arguments cmd the command to issue to the system Description This function runs a command on the system. The command is started in the background some time after the current probe completes. The command is run with the same UID as the user running the stap or staprun command. The runtime may impose a relatively short length limit on the command string. Exceeding it may print a warning. Memory Tapset This family of probe points is used to probe memory-related events or query the memory usage of the current process. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 function::addr_to_node 3stap function::addr_to_node Returns which node a given address belongs to within a NUMA system Synopsis addr_to_node:long(addr:long) Arguments addr the address of the faulting memory access Description This function accepts an address, and returns the node that the given address belongs to in a NUMA system. LINUX SystemTap Tapset Reference November 2021 function::bytes_to_string 3stap function::bytes_to_string Human readable string for given bytes Synopsis bytes_to_string:string(bytes:long) Arguments bytes Number of bytes to translate. Description Returns a string representing the number of bytes (up to 1024 bytes), the number of kilobytes (when less than 1024K) postfixed by 'K', the number of megabytes (when less than 1024M) postfixed by 'M' or the number of gigabytes postfixed by 'G'. If representing K, M or G, and the number is amount is less than 100, it includes a '.' plus the remainer. The returned string will be 5 characters wide (padding with whitespace at the front) unless negative or representing more than 9999G bytes. LINUX SystemTap Tapset Reference November 2021 function::mem_page_size 3stap function::mem_page_size Number of bytes in a page for this architecture Synopsis mem_page_size:long() Arguments None LINUX SystemTap Tapset Reference November 2021 function::pages_to_string 3stap function::pages_to_string Turns pages into a human readable string Synopsis pages_to_string:string(pages:long) Arguments pages Number of pages to translate. Description Multiplies pages by page_size to get the number of bytes and returns the result of bytes_to_string. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_data 3stap function::proc_mem_data Program data size (data + stack) in pages Synopsis 1) proc_mem_data:long() 2) proc_mem_data:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the current process data size (data + stack) in pages, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the given process data size (data + stack) in pages, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_rss 3stap function::proc_mem_rss Program resident set size in pages Synopsis 1) proc_mem_rss:long() 2) proc_mem_rss:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the resident set size in pages of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the resident set size in pages of the given process, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_shr 3stap function::proc_mem_shr Program shared pages (from shared mappings) Synopsis 1) proc_mem_shr:long() 2) proc_mem_shr:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the shared pages (from shared mappings) of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the shared pages (from shared mappings) of the given process, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_size 3stap function::proc_mem_size Total program virtual memory size in pages Synopsis 1) proc_mem_size:long() 2) proc_mem_size:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the total virtual memory size in pages of the current process, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the total virtual memory size in pages of the given process, or zero when that process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_string 3stap function::proc_mem_string Human readable string of process memory usage Synopsis 1) proc_mem_string:string() 2) proc_mem_string:string(pid:long) Arguments pid The pid of process to examine Description 1) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the current process. For examplesize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k. 2) Returns a human readable string showing the size, rss, shr, txt and data of the memory used by the given process. For examplesize: 301m, rss: 11m, shr: 8m, txt: 52k, data: 2248k. LINUX SystemTap Tapset Reference November 2021 function::proc_mem_txt 3stap function::proc_mem_txt Program text (code) size in pages Synopsis 1) proc_mem_txt:long() 2) proc_mem_txt:long(pid:long) Arguments pid The pid of process to examine Description 1) Returns the current process text (code) size in pages, or zero when there is no current process or the number of pages couldn't be retrieved. 2) Returns the given process text (code) size in pages, or zero when the process doesn't exist or the number of pages couldn't be retrieved. LINUX SystemTap Tapset Reference November 2021 function::vm_fault_contains 3stap function::vm_fault_contains Test return value for page fault reason Synopsis vm_fault_contains:long(value:long,test:long) Arguments value the fault_type returned by vm.page_fault.return test the type of fault to test for (VM_FAULT_OOM or similar) LINUX SystemTap Tapset Reference November 2021 probe::vm.brk 3stap probe::vm.brk Fires when a brk is requested (i.e. the heap will be resized) Synopsis vm.brk Values name name of the probe point address the requested address length the length of the memory segment Context The process calling brk. LINUX SystemTap Tapset Reference November 2021 probe::vm.kfree 3stap probe::vm.kfree Fires when kfree is requested Synopsis vm.kfree Values ptr pointer to the kmemory allocated which is returned by kmalloc caller_function name of the caller function. call_site address of the function calling this kmemory function name name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::vm.kmalloc 3stap probe::vm.kmalloc Fires when kmalloc is requested Synopsis vm.kmalloc Values gfp_flag_name type of kmemory to allocate (in String format) bytes_alloc allocated Bytes ptr pointer to the kmemory allocated caller_function name of the caller function call_site address of the kmemory function name name of the probe point gfp_flags type of kmemory to allocate bytes_req requested Bytes LINUX SystemTap Tapset Reference November 2021 probe::vm.kmalloc_node 3stap probe::vm.kmalloc_node Fires when kmalloc_node is requested Synopsis vm.kmalloc_node Values gfp_flag_name type of kmemory to allocate(in string format) bytes_alloc allocated Bytes ptr pointer to the kmemory allocated name name of the probe point call_site address of the function caling this kmemory function caller_function name of the caller function bytes_req requested Bytes gfp_flags type of kmemory to allocate LINUX SystemTap Tapset Reference November 2021 probe::vm.kmem_cache_alloc 3stap probe::vm.kmem_cache_alloc Fires when kmem_cache_alloc is requested Synopsis vm.kmem_cache_alloc Values gfp_flags type of kmemory to allocate bytes_req requested Bytes caller_function name of the caller function. call_site address of the function calling this kmemory function. name name of the probe point ptr pointer to the kmemory allocated bytes_alloc allocated Bytes gfp_flag_name type of kmemory to allocate(in string format) LINUX SystemTap Tapset Reference November 2021 probe::vm.kmem_cache_alloc_node 3stap probe::vm.kmem_cache_alloc_node Fires when kmem_cache_alloc_node is requested Synopsis vm.kmem_cache_alloc_node Values gfp_flag_name type of kmemory to allocate(in string format) bytes_alloc allocated Bytes ptr pointer to the kmemory allocated call_site address of the function calling this kmemory function name name of the probe point caller_function name of the caller function bytes_req requested Bytes gfp_flags type of kmemory to allocate LINUX SystemTap Tapset Reference November 2021 probe::vm.kmem_cache_free 3stap probe::vm.kmem_cache_free Fires when kmem_cache_free is requested Synopsis vm.kmem_cache_free Values caller_function Name of the caller function. name Name of the probe point call_site Address of the function calling this kmemory function ptr Pointer to the kmemory allocated which is returned by kmem_cache LINUX SystemTap Tapset Reference November 2021 probe::vm.mmap 3stap probe::vm.mmap Fires when an mmap is requested Synopsis vm.mmap Values length the length of the memory segment address the requested address name name of the probe point Context The process calling mmap. LINUX SystemTap Tapset Reference November 2021 probe::vm.munmap 3stap probe::vm.munmap Fires when an munmap is requested Synopsis vm.munmap Values address the requested address name name of the probe point length the length of the memory segment Context The process calling munmap. LINUX SystemTap Tapset Reference November 2021 probe::vm.oom_kill 3stap probe::vm.oom_kill Fires when a thread is selected for termination by the OOM killer Synopsis vm.oom_kill Values task the task being killed name name of the probe point Context The process that tried to consume excessive memory, and thus triggered the OOM. LINUX SystemTap Tapset Reference November 2021 probe::vm.pagefault 3stap probe::vm.pagefault Records that a page fault occurred Synopsis vm.pagefault Values address the address of the faulting memory access; i.e. the address that caused the page fault name name of the probe point write_access indicates whether this was a write or read access; 1 indicates a write, while 0 indicates a read Context The process which triggered the fault LINUX SystemTap Tapset Reference November 2021 probe::vm.pagefault.return 3stap probe::vm.pagefault.return Indicates what type of fault occurred Synopsis vm.pagefault.return Values name name of the probe point fault_type returns either 0 (VM_FAULT_OOM) for out of memory faults, 2 (VM_FAULT_MINOR) for minor faults, 3 (VM_FAULT_MAJOR) for major faults, or 1 (VM_FAULT_SIGBUS) if the fault was neither OOM, minor fault, nor major fault. LINUX SystemTap Tapset Reference November 2021 probe::vm.write_shared 3stap probe::vm.write_shared Attempts at writing to a shared page Synopsis vm.write_shared Values name name of the probe point address the address of the shared write Context The context is the process attempting the write. Description Fires when a process attempts to write to a shared page. If a copy is necessary, this will be followed by a vm.write_shared_copy. LINUX SystemTap Tapset Reference November 2021 probe::vm.write_shared_copy 3stap probe::vm.write_shared_copy Page copy for shared page write Synopsis vm.write_shared_copy Values zero boolean indicating whether it is a zero page (can do a clear instead of a copy) name Name of the probe point address The address of the shared write Context The process attempting the write. Description Fires when a write to a shared page requires a page copy. This is always preceded by a vm.write_shared. Task Time Tapset This tapset defines utility functions to query time related properties of the current tasks, translate those in miliseconds and human readable strings. LINUX SystemTap Tapset Reference November 2021 function::cputime_to_msecs 3stap function::cputime_to_msecs Translates the given cputime into milliseconds Synopsis cputime_to_msecs:long(cputime:long) Arguments cputime Time to convert to milliseconds. LINUX SystemTap Tapset Reference November 2021 function::cputime_to_string 3stap function::cputime_to_string Human readable string for given cputime Synopsis cputime_to_string:string(cputime:long) Arguments cputime Time to translate. Description Equivalent to calling: msec_to_string (cputime_to_msecs (cputime). LINUX SystemTap Tapset Reference November 2021 function::cputime_to_usecs 3stap function::cputime_to_usecs Translates the given cputime into microseconds Synopsis cputime_to_usecs:long(cputime:long) Arguments cputime Time to convert to microseconds. LINUX SystemTap Tapset Reference November 2021 function::msecs_to_string 3stap function::msecs_to_string Human readable string for given milliseconds Synopsis msecs_to_string:string(msecs:long) Arguments msecs Number of milliseconds to translate. Description Returns a string representing the number of milliseconds as a human readable string consisting of XmY.ZZZs, where X is the number of minutes, Y is the number of seconds and ZZZ is the number of milliseconds. LINUX SystemTap Tapset Reference November 2021 function::nsecs_to_string 3stap function::nsecs_to_string Human readable string for given nanoseconds Synopsis nsecs_to_string:string(nsecs:long) Arguments nsecs Number of nanoseconds to translate. Description Returns a string representing the number of nanoseconds as a human readable string consisting of XmY.ZZZZZZs, where X is the number of minutes, Y is the number of seconds and ZZZZZZZZZ is the number of nanoseconds. LINUX SystemTap Tapset Reference November 2021 function::task_start_time 3stap function::task_start_time Start time of the given task Synopsis task_start_time:long(tid:long) Arguments tid Thread id of the given task Description Returns the start time of the given task in nanoseconds since boot time or 0 if the task does not exist. LINUX SystemTap Tapset Reference November 2021 function::task_stime 3stap function::task_stime System time of the task Synopsis 1) task_stime:long() 2) task_stime:long(tid:long) Arguments tid Thread id of the given task Description 1) Returns the system time of the current task in cputime. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. 2) Returns the system time of the given task in cputime, or zero if the task doesn't exist. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. LINUX SystemTap Tapset Reference November 2021 function::task_time_string 3stap function::task_time_string Human readable string of task time usage Synopsis task_time_string:string() Arguments None Description Returns a human readable string showing the user and system time the current task has used up to now. For example usr: 0m12.908s, sys: 1m6.851s. LINUX SystemTap Tapset Reference November 2021 function::task_time_string_tid 3stap function::task_time_string_tid Human readable string of task time usage Synopsis task_time_string_tid:string(tid:long) Arguments tid Thread id of the given task Description Returns a human readable string showing the user and system time the given task has used up to now. For example usr: 0m12.908s, sys: 1m6.851s. LINUX SystemTap Tapset Reference November 2021 function::task_utime 3stap function::task_utime User time of the task Synopsis 1) task_utime:long() 2) task_utime:long(tid:long) Arguments tid Thread id of the given task Description 1) Returns the user time of the current task in cputime. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. 2) Returns the user time of the given task in cputime, or zero if the task doesn't exist. Does not include any time used by other tasks in this process, nor does it include any time of the children of this task. LINUX SystemTap Tapset Reference November 2021 function::usecs_to_string 3stap function::usecs_to_string Human readable string for given microseconds Synopsis usecs_to_string:string(usecs:long) Arguments usecs Number of microseconds to translate. Description Returns a string representing the number of microseconds as a human readable string consisting of XmY.ZZZZZZs, where X is the number of minutes, Y is the number of seconds and ZZZZZZ is the number of microseconds. Scheduler Tapset This family of probe points is used to probe the task scheduler activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::scheduler.balance 3stap probe::scheduler.balance A cpu attempting to find more work. Synopsis scheduler.balance Values name name of the probe point Context The cpu looking for more work. LINUX SystemTap Tapset Reference November 2021 probe::scheduler.cpu_off 3stap probe::scheduler.cpu_off Process is about to stop running on a cpu Synopsis scheduler.cpu_off Values idle boolean indicating whether current is the idle process task_prev the process leaving the cpu (same as current) task_next the process replacing current name name of the probe point Context The process leaving the cpu. LINUX SystemTap Tapset Reference November 2021 probe::scheduler.cpu_on 3stap probe::scheduler.cpu_on Process is beginning execution on a cpu Synopsis scheduler.cpu_on Values idle - boolean indicating whether current is the idle process task_prev the process that was previously running on this cpu name name of the probe point Context The resuming process. LINUX SystemTap Tapset Reference November 2021 probe::scheduler.ctxswitch 3stap probe::scheduler.ctxswitch A context switch is occuring. Synopsis scheduler.ctxswitch Values prev_tid The TID of the process to be switched out prev_pid The PID of the process to be switched out nexttsk_state the state of the process to be switched in next_priority The priority of the process to be switched in next_task_name The name of the process to be switched in next_tid The TID of the process to be switched in next_pid The PID of the process to be switched in prev_priority The priority of the process to be switched out prev_task_name The name of the process to be switched out prevtsk_state the state of the process to be switched out name name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::scheduler.kthread_stop 3stap probe::scheduler.kthread_stop A thread created by kthread_create is being stopped Synopsis scheduler.kthread_stop Values thread_priority priority of the thread thread_pid PID of the thread being stopped LINUX SystemTap Tapset Reference November 2021 probe::scheduler.kthread_stop.return 3stap probe::scheduler.kthread_stop.return A kthread is stopped and gets the return value Synopsis scheduler.kthread_stop.return Values name name of the probe point return_value return value after stopping the thread LINUX SystemTap Tapset Reference November 2021 probe::scheduler.migrate 3stap probe::scheduler.migrate Task migrating across cpus Synopsis scheduler.migrate Values name name of the probe point task the process that is being migrated cpu_from the original cpu priority priority of the task being migrated pid PID of the task being migrated cpu_to the destination cpu LINUX SystemTap Tapset Reference November 2021 probe::scheduler.process_exit 3stap probe::scheduler.process_exit Process exiting Synopsis scheduler.process_exit Values name name of the probe point priority priority of the process exiting pid PID of the process exiting LINUX SystemTap Tapset Reference November 2021 probe::scheduler.process_fork 3stap probe::scheduler.process_fork Process forked Synopsis scheduler.process_fork Values parent_pid PID of the parent process child_pid PID of the child process name name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::scheduler.process_free 3stap probe::scheduler.process_free Scheduler freeing a data structure for a process Synopsis scheduler.process_free Values name name of the probe point pid PID of the process getting freed priority priority of the process getting freed LINUX SystemTap Tapset Reference November 2021 probe::scheduler.process_wait 3stap probe::scheduler.process_wait Scheduler starting to wait on a process Synopsis scheduler.process_wait Values pid PID of the process scheduler is waiting on name name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::scheduler.signal_send 3stap probe::scheduler.signal_send Sending a signal Synopsis scheduler.signal_send Values pid pid of the process sending signal signal_number signal number name name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::scheduler.tick 3stap probe::scheduler.tick Schedulers internal tick, a processes timeslice accounting is updated Synopsis scheduler.tick Values name name of the probe point idle boolean indicating whether current is the idle process Context The process whose accounting will be updated. LINUX SystemTap Tapset Reference November 2021 probe::scheduler.wait_task 3stap probe::scheduler.wait_task Waiting on a task to unschedule (become inactive) Synopsis scheduler.wait_task Values task_pid PID of the task the scheduler is waiting on name name of the probe point task_priority priority of the task LINUX SystemTap Tapset Reference November 2021 probe::scheduler.wakeup 3stap probe::scheduler.wakeup Task is woken up Synopsis scheduler.wakeup Values task_priority priority of the task being woken up task_state state of the task being woken up name name of the probe point task_cpu cpu of the task being woken up task_tid tid of the task being woken up task_pid PID of the task being woken up LINUX SystemTap Tapset Reference November 2021 probe::scheduler.wakeup_new 3stap probe::scheduler.wakeup_new Newly created task is woken up for the first time Synopsis scheduler.wakeup_new Values task_pid PID of the new task woken up task_tid TID of the new task woken up name name of the probe point task_priority priority of the new task task_state state of the task woken up task_cpu cpu of the task woken up IO Scheduler and block IO Tapset This family of probe points is used to probe block IO layer and IO scheduler activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::ioblock.end 3stap probe::ioblock.end Fires whenever a block I/O transfer is complete. Synopsis ioblock.end Values hw_segments number of segments after physical and DMA remapping hardware coalescing is performed name name of the probe point flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported devname block device name bytes_done number of bytes transferred idx offset into the bio vector array opf operations and flags phys_segments number of segments in this bio after physical address coalescing is performed. vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request size total size in bytes sector beginning sector for the entire bio rw binary trace for read/write request ino i-node number of the mapped file error 0 on success Context The process signals the transfer is done. LINUX SystemTap Tapset Reference November 2021 probe::ioblock.request 3stap probe::ioblock.request Fires whenever making a generic block I/O request. Synopsis ioblock.request Values rw binary trace for read/write request bdev_contains points to the device object which contains the partition (when bio structure represents a partition) ino i-node number of the mapped file sector beginning sector for the entire bio p_start_sect points to the start sector of the partition structure of the device size total size in bytes vcnt bio vector count which represents number of array element (page, offset, length) which make up this I/O request phys_segments number of segments in this bio after physical address coalescing is performed opf operations and flags idx offset into the bio vector array devname block device name flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported name name of the probe point bdev target block device hw_segments number of segments after physical and DMA remapping hardware coalescing is performed Context The process makes block I/O request LINUX SystemTap Tapset Reference November 2021 probe::ioblock_trace.bounce 3stap probe::ioblock_trace.bounce Fires whenever a buffer bounce is needed for at least one page of a block IO request. Synopsis ioblock_trace.bounce Values size total size in bytes p_start_sect points to the start sector of the partition structure of the device vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request opf operations and flags bdev_contains points to the device object which contains the partition (when bio structure represents a partition) ino i-node number of the mapped file rw binary trace for read/write request sector beginning sector for the entire bio name name of the probe point q request queue on which this bio was queued. bdev target block device idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. bytes_done number of bytes transferred devname device for which a buffer bounce was needed. flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported Context The process creating a block IO request. LINUX SystemTap Tapset Reference November 2021 probe::ioblock_trace.end 3stap probe::ioblock_trace.end Fires whenever a block I/O transfer is complete. Synopsis ioblock_trace.end Values size total size in bytes p_start_sect points to the start sector of the partition structure of the device vcnt bio vector count which represents number of array element (page, offset, length) which makes up this I/O request opf operations and flags bdev_contains points to the device object which contains the partition (when bio structure represents a partition) ino i-node number of the mapped file rw binary trace for read/write request sector beginning sector for the entire bio name name of the probe point q request queue on which this bio was queued. bdev target block device idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. bytes_done number of bytes transferred devname block device name flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported Context The process signals the transfer is done. LINUX SystemTap Tapset Reference November 2021 probe::ioblock_trace.request 3stap probe::ioblock_trace.request Fires just as a generic block I/O request is created for a bio. Synopsis ioblock_trace.request Values size total size in bytes p_start_sect points to the start sector of the partition structure of the device vcnt bio vector count which represents number of array element (page, offset, length) which make up this I/O request opf operations and flags bdev_contains points to the device object which contains the partition (when bio structure represents a partition) rw binary trace for read/write request ino i-node number of the mapped file sector beginning sector for the entire bio bdev target block device name name of the probe point q request queue on which this bio was queued. bytes_done number of bytes transferred devname block device name flags see below BIO_UPTODATE 0 ok after I/O completion BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block BIO_EOF 2 out-out-bounds error BIO_SEG_VALID 3 nr_hw_seg valid BIO_CLONED 4 doesn't own data BIO_BOUNCED 5 bio is a bounce bio BIO_USER_MAPPED 6 contains user pages BIO_EOPNOTSUPP 7 not supported idx offset into the bio vector array phys_segments - number of segments in this bio after physical address coalescing is performed. Context The process makes block I/O request LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_add_request 3stap probe::ioscheduler.elv_add_request probe to indicate request is added to the request queue. Synopsis ioscheduler.elv_add_request Values rq_flags Request flags. disk_minor Disk minor number of request. elevator_name The type of I/O elevator currently enabled. disk_major Disk major no of request. q Pointer to request queue. rq Address of request. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_add_request.kp 3stap probe::ioscheduler.elv_add_request.kp kprobe based probe to indicate that a request was added to the request queue Synopsis ioscheduler.elv_add_request.kp Values disk_minor Disk minor number of the request rq_flags Request flags disk_major Disk major number of the request q pointer to request queue name Name of the probe point elevator_name The type of I/O elevator currently enabled rq Address of the request LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_add_request.tp 3stap probe::ioscheduler.elv_add_request.tp tracepoint based probe to indicate a request is added to the request queue. Synopsis ioscheduler.elv_add_request.tp Values elevator_name The type of I/O elevator currently enabled. name Name of the probe point disk_major Disk major no of request. q Pointer to request queue. rq_flags Request flags. disk_minor Disk minor number of request. rq Address of request. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_completed_request 3stap probe::ioscheduler.elv_completed_request Fires when a request is completed Synopsis ioscheduler.elv_completed_request Values rq Address of the request disk_minor Disk minor number of the request rq_flags Request flags disk_major Disk major number of the request name Name of the probe point elevator_name The type of I/O elevator currently enabled LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_next_request 3stap probe::ioscheduler.elv_next_request Fires when a request is retrieved from the request queue Synopsis ioscheduler.elv_next_request Values name Name of the probe point elevator_name The type of I/O elevator currently enabled LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler.elv_next_request.return 3stap probe::ioscheduler.elv_next_request.return Fires when a request retrieval issues a return signal Synopsis ioscheduler.elv_next_request.return Values disk_major Disk major number of the request name Name of the probe point rq Address of the request disk_minor Disk minor number of the request rq_flags Request flags LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.elv_abort_request 3stap probe::ioscheduler_trace.elv_abort_request Fires when a request is aborted. Synopsis ioscheduler_trace.elv_abort_request Values disk_minor Disk minor number of request. rq_flags Request flags. disk_major Disk major no of request. elevator_name The type of I/O elevator currently enabled. name Name of the probe point rq Address of request. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.elv_completed_request 3stap probe::ioscheduler_trace.elv_completed_request Fires when a request is Synopsis ioscheduler_trace.elv_completed_request Values rq Address of request. name Name of the probe point elevator_name The type of I/O elevator currently enabled. disk_major Disk major no of request. rq_flags Request flags. disk_minor Disk minor number of request. Description completed. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.elv_issue_request 3stap probe::ioscheduler_trace.elv_issue_request Fires when a request is Synopsis ioscheduler_trace.elv_issue_request Values rq Address of request. disk_major Disk major no of request. name Name of the probe point elevator_name The type of I/O elevator currently enabled. disk_minor Disk minor number of request. rq_flags Request flags. Description scheduled. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.elv_requeue_request 3stap probe::ioscheduler_trace.elv_requeue_request Fires when a request is Synopsis ioscheduler_trace.elv_requeue_request Values rq_flags Request flags. disk_minor Disk minor number of request. elevator_name The type of I/O elevator currently enabled. name Name of the probe point disk_major Disk major no of request. rq Address of request. Description put back on the queue, when the hadware cannot accept more requests. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.plug 3stap probe::ioscheduler_trace.plug Fires when a request queue is plugged; Synopsis ioscheduler_trace.plug Values name Name of the probe point rq_queue request queue Description ie, requests in the queue cannot be serviced by block driver. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.unplug_io 3stap probe::ioscheduler_trace.unplug_io Fires when a request queue is unplugged; Synopsis ioscheduler_trace.unplug_io Values rq_queue request queue name Name of the probe point Description Either, when number of pending requests in the queue exceeds threshold or, upon expiration of timer that was activated when queue was plugged. LINUX SystemTap Tapset Reference November 2021 probe::ioscheduler_trace.unplug_timer 3stap probe::ioscheduler_trace.unplug_timer Fires when unplug timer associated Synopsis ioscheduler_trace.unplug_timer Values rq_queue request queue name Name of the probe point Description with a request queue expires. SCSI Tapset This family of probe points is used to probe SCSI activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::scsi.iocompleted 3stap probe::scsi.iocompleted SCSI mid-layer running the completion processing for block device I/O requests Synopsis scsi.iocompleted Values data_direction The data_direction specifies whether this command is from/to the device goodbytes The bytes completed host_no The host number device_state The current state of the device req_addr The current struct request pointer, as a number lun The lun number data_direction_str Data direction, as a string device_state_str The current state of the device, as a string channel The channel number dev_id The scsi device id LINUX SystemTap Tapset Reference November 2021 probe::scsi.iodispatching 3stap probe::scsi.iodispatching SCSI mid-layer dispatched low-level SCSI command Synopsis scsi.iodispatching Values data_direction The data_direction specifies whether this command is from/to the device 0 (DMA_BIDIRECTIONAL), 1 (DMA_TO_DEVICE), 2 (DMA_FROM_DEVICE), 3 (DMA_NONE) host_no The host number device_state The current state of the device req_addr The current struct request pointer, as a number lun The lun number data_direction_str Data direction, as a string device_state_str The current state of the device, as a string request_bufflen The request buffer length channel The channel number request_buffer The request buffer address dev_id The scsi device id LINUX SystemTap Tapset Reference November 2021 probe::scsi.iodone 3stap probe::scsi.iodone SCSI command completed by low level driver and enqueued into the done queue. Synopsis scsi.iodone Values dev_id The scsi device id scsi_timer_pending 1 if a timer is pending on this request data_direction_str Data direction, as a string device_state_str The current state of the device, as a string channel The channel number device_state The current state of the device lun The lun number req_addr The current struct request pointer, as a number data_direction The data_direction specifies whether this command is from/to the device. host_no The host number LINUX SystemTap Tapset Reference November 2021 probe::scsi.ioentry 3stap probe::scsi.ioentry Prepares a SCSI mid-layer request Synopsis scsi.ioentry Values disk_major The major number of the disk (-1 if no information) device_state The current state of the device disk_minor The minor number of the disk (-1 if no information) device_state_str The current state of the device, as a string req_addr The current struct request pointer, as a number LINUX SystemTap Tapset Reference November 2021 probe::scsi.ioexecute 3stap probe::scsi.ioexecute Create mid-layer SCSI request and wait for the result Synopsis scsi.ioexecute Values data_direction The data_direction specifies whether this command is from/to the device. timeout Request timeout in seconds host_no The host number device_state The current state of the device lun The lun number data_direction_str Data direction, as a string request_buffer The data buffer address channel The channel number device_state_str The current state of the device, as a string request_bufflen The data buffer buffer length retries Number of times to retry request dev_id The scsi device id LINUX SystemTap Tapset Reference November 2021 probe::scsi.set_state 3stap probe::scsi.set_state Order SCSI device state change Synopsis scsi.set_state Values old_state_str The current state of the device, as a string channel The channel number old_state The current state of the device dev_id The scsi device id host_no The host number state_str The new state of the device, as a string lun The lun number state The new state of the device TTY Tapset This family of probe points is used to probe TTY (Teletype) activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::tty.init 3stap probe::tty.init Called when a tty is being initalized Synopsis tty.init Values driver_name the driver name module the module name name the driver .dev_name name LINUX SystemTap Tapset Reference November 2021 probe::tty.ioctl 3stap probe::tty.ioctl called when a ioctl is request to the tty Synopsis tty.ioctl Values cmd the ioctl command arg the ioctl argument name the file name LINUX SystemTap Tapset Reference November 2021 probe::tty.open 3stap probe::tty.open Called when a tty is opened Synopsis tty.open Values file_flags the file flags inode_state the inode state file_mode the file mode inode_flags the inode flags file_name the file name inode_number the inode number LINUX SystemTap Tapset Reference November 2021 probe::tty.poll 3stap probe::tty.poll Called when a tty device is being polled Synopsis tty.poll Values wait_key the wait queue key file_name the tty file name LINUX SystemTap Tapset Reference November 2021 probe::tty.read 3stap probe::tty.read called when a tty line will be read Synopsis tty.read Values file_name the file name lreated to the tty driver_name the driver name nr The amount of characters to be read buffer the buffer that will receive the characters LINUX SystemTap Tapset Reference November 2021 probe::tty.receive 3stap probe::tty.receive called when a tty receives a message Synopsis tty.receive Values driver_name the driver name count The amount of characters received name the name of the module file id the tty id fp The flag buffer cp the buffer that was received index The tty Index LINUX SystemTap Tapset Reference November 2021 probe::tty.register 3stap probe::tty.register Called when a tty device is registred Synopsis tty.register Values index the tty index requested name the driver .dev_name name module the module name driver_name the driver name LINUX SystemTap Tapset Reference November 2021 probe::tty.release 3stap probe::tty.release Called when the tty is closed Synopsis tty.release Values inode_number the inode number file_name the file name inode_flags the inode flags file_mode the file mode inode_state the inode state file_flags the file flags LINUX SystemTap Tapset Reference November 2021 probe::tty.resize 3stap probe::tty.resize Called when a terminal resize happens Synopsis tty.resize Values old_ypixel the old ypixel new_xpixel the new xpixel value old_row the old row value old_col the old col value name the tty name new_col the new col value new_row the new row value old_xpixel the old xpixel new_ypixel the new ypixel value LINUX SystemTap Tapset Reference November 2021 probe::tty.unregister 3stap probe::tty.unregister Called when a tty device is being unregistered Synopsis tty.unregister Values module the module name name the driver .dev_name name index the tty index requested driver_name the driver name LINUX SystemTap Tapset Reference November 2021 probe::tty.write 3stap probe::tty.write write to the tty line Synopsis tty.write Values driver_name the driver name file_name the file name lreated to the tty buffer the buffer that will be written nr The amount of characters Interrupt Request (IRQ) Tapset This family of probe points is used to probe interrupt request (IRQ) activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::irq_handler.entry 3stap probe::irq_handler.entry Execution of interrupt handler starting Synopsis irq_handler.entry Values next_irqaction pointer to next irqaction for shared interrupts handler interrupt handler function flags Flags for IRQ handler thread_flags Flags related to thread irq irq number thread_fn interrupt handler function for threaded interrupts thread thread pointer for threaded interrupts action struct irqaction* for this interrupt num dir pointer to the proc/irq/NN/name entry dev_name name of device flags_str symbolic string representation of IRQ flags dev_id Cookie to identify device LINUX SystemTap Tapset Reference November 2021 probe::irq_handler.exit 3stap probe::irq_handler.exit Execution of interrupt handler completed Synopsis irq_handler.exit Values dev_name name of device dev_id Cookie to identify device flags_str symbolic string representation of IRQ flags action struct irqaction* ret return value of the handler dir pointer to the proc/irq/NN/name entry thread_fn interrupt handler function for threaded interrupts thread thread pointer for threaded interrupts handler interrupt handler function that was executed next_irqaction pointer to next irqaction for shared interrupts thread_flags Flags related to thread flags flags for IRQ handler irq interrupt number LINUX SystemTap Tapset Reference November 2021 probe::softirq.entry 3stap probe::softirq.entry Execution of handler for a pending softirq starting Synopsis softirq.entry Values vec softirq_action vector vec_nr softirq vector number h struct softirq_action* for current pending softirq action pointer to softirq handler just about to execute LINUX SystemTap Tapset Reference November 2021 probe::softirq.exit 3stap probe::softirq.exit Execution of handler for a pending softirq completed Synopsis softirq.exit Values action pointer to softirq handler that just finished execution h struct softirq_action* for just executed softirq vec_nr softirq vector number vec softirq_action vector LINUX SystemTap Tapset Reference November 2021 probe::workqueue.create 3stap probe::workqueue.create Creating a new workqueue Synopsis workqueue.create Values cpu cpu for which the worker thread is created wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2021 probe::workqueue.destroy 3stap probe::workqueue.destroy Destroying workqueue Synopsis workqueue.destroy Values wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2021 probe::workqueue.execute 3stap probe::workqueue.execute Executing deferred work Synopsis workqueue.execute Values work_func pointer to handler function work work_struct* being executed wq_thread task_struct of the workqueue thread LINUX SystemTap Tapset Reference November 2021 probe::workqueue.insert 3stap probe::workqueue.insert Queuing work on a workqueue Synopsis workqueue.insert Values wq_thread task_struct of the workqueue thread work_func pointer to handler function work work_struct* being queued Networking Tapset This family of probe points is used to probe the activities of the network device and protocol layers. LINUX SystemTap Tapset Reference November 2021 function::format_ipaddr 3stap function::format_ipaddr Returns a string representation for an IP address Synopsis format_ipaddr:string(addr:long,family:long) Arguments addr the IP address family the IP address family (either AF_INET or AF_INET6) LINUX SystemTap Tapset Reference November 2021 function::htonl 3stap function::htonl Convert 32-bit long from host to network order Synopsis htonl:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 function::htonll 3stap function::htonll Convert 64-bit long long from host to network order Synopsis htonll:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 function::htons 3stap function::htons Convert 16-bit short from host to network order Synopsis htons:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 function::ip_ntop 3stap function::ip_ntop Returns a string representation for an IPv4 address Synopsis ip_ntop:string(addr:long) Arguments addr the IPv4 address represented as an integer LINUX SystemTap Tapset Reference November 2021 function::ntohl 3stap function::ntohl Convert 32-bit long from network to host order Synopsis ntohl:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 function::ntohll 3stap function::ntohll Convert 64-bit long long from network to host order Synopsis ntohll:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 function::ntohs 3stap function::ntohs Convert 16-bit short from network to host order Synopsis ntohs:long(x:long) Arguments x Value to convert LINUX SystemTap Tapset Reference November 2021 probe::netdev.change_mac 3stap probe::netdev.change_mac Called when the netdev_name has the MAC changed Synopsis netdev.change_mac Values old_mac The current MAC address mac_len The MAC length new_mac The new MAC address dev_name The device that will have the MAC changed LINUX SystemTap Tapset Reference November 2021 probe::netdev.change_mtu 3stap probe::netdev.change_mtu Called when the netdev MTU is changed Synopsis netdev.change_mtu Values new_mtu The new MTU dev_name The device that will have the MTU changed old_mtu The current MTU LINUX SystemTap Tapset Reference November 2021 probe::netdev.change_rx_flag 3stap probe::netdev.change_rx_flag Called when the device RX flag will be changed Synopsis netdev.change_rx_flag Values flags The new flags dev_name The device that will be changed LINUX SystemTap Tapset Reference November 2021 probe::netdev.close 3stap probe::netdev.close Called when the device is closed Synopsis netdev.close Values dev_name The device that is going to be closed LINUX SystemTap Tapset Reference November 2021 probe::netdev.get_stats 3stap probe::netdev.get_stats Called when someone asks the device statistics Synopsis netdev.get_stats Values dev_name The device that is going to provide the statistics LINUX SystemTap Tapset Reference November 2021 probe::netdev.hard_transmit 3stap probe::netdev.hard_transmit Called when the devices is going to TX (hard) Synopsis netdev.hard_transmit Values truesize The size of the data to be transmitted. length The length of the transmit buffer. dev_name The device scheduled to transmit protocol The protocol used in the transmission LINUX SystemTap Tapset Reference November 2021 probe::netdev.ioctl 3stap probe::netdev.ioctl Called when the device suffers an IOCTL Synopsis netdev.ioctl Values cmd The IOCTL request arg The IOCTL argument (usually the netdev interface) LINUX SystemTap Tapset Reference November 2021 probe::netdev.open 3stap probe::netdev.open Called when the device is opened Synopsis netdev.open Values dev_name The device that is going to be opened LINUX SystemTap Tapset Reference November 2021 probe::netdev.receive 3stap probe::netdev.receive Data received from network device. Synopsis netdev.receive Values length The length of the receiving buffer. protocol Protocol of received packet. dev_name The name of the device. e.g: eth0, ath1. LINUX SystemTap Tapset Reference November 2021 probe::netdev.register 3stap probe::netdev.register Called when the device is registered Synopsis netdev.register Values dev_name The device that is going to be registered LINUX SystemTap Tapset Reference November 2021 probe::netdev.rx 3stap probe::netdev.rx Called when the device is going to receive a packet Synopsis netdev.rx Values dev_name The device received the packet protocol The packet protocol LINUX SystemTap Tapset Reference November 2021 probe::netdev.set_promiscuity 3stap probe::netdev.set_promiscuity Called when the device enters/leaves promiscuity Synopsis netdev.set_promiscuity Values inc Count the number of promiscuity openers enable If the device is entering promiscuity mode dev_name The device that is entering/leaving promiscuity mode disable If the device is leaving promiscuity mode LINUX SystemTap Tapset Reference November 2021 probe::netdev.transmit 3stap probe::netdev.transmit Network device transmitting buffer Synopsis netdev.transmit Values length The length of the transmit buffer. truesize The size of the data to be transmitted. protocol The protocol of this packet(defined in include/linux/if_ether.h). dev_name The name of the device. e.g: eth0, ath1. LINUX SystemTap Tapset Reference November 2021 probe::netdev.unregister 3stap probe::netdev.unregister Called when the device is being unregistered Synopsis netdev.unregister Values dev_name The device that is going to be unregistered LINUX SystemTap Tapset Reference November 2021 probe::netfilter.arp.forward 3stap probe::netfilter.arp.forward - Called for each ARP packet to be forwarded Synopsis netfilter.arp.forward Values data_str A string representing the packet buffer contents ar_pln Length of protocol address outdev_name Name of network device packet will be routed to (if known) length The length of the packet buffer contents, in bytes ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address nf_repeat Constant used to signify a 'repeat' verdict outdev Address of net_device representing output device, 0 if unknown nf_accept Constant used to signify an 'accept' verdict nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) nf_drop Constant used to signify a 'drop' verdict ar_op ARP opcode (command) arphdr Address of ARP header ar_data Address of ARP packet data region (after the header) ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address nf_stop Constant used to signify a 'stop' verdict ar_hrd Format of hardware address ar_pro Format of protocol address ar_sip Ethernet+IP only (ar_pro==0x800): source IP address pf Protocol family -- always arp indev Address of net_device representing input device, 0 if unknown data_hex A hexadecimal string representing the packet buffer contents nf_stolen Constant used to signify a 'stolen' verdict ar_tip Ethernet+IP only (ar_pro==0x800): target IP address ar_hln Length of hardware address LINUX SystemTap Tapset Reference November 2021 probe::netfilter.arp.in 3stap probe::netfilter.arp.in - Called for each incoming ARP packet Synopsis netfilter.arp.in Values ar_sip Ethernet+IP only (ar_pro==0x800): source IP address ar_hrd Format of hardware address ar_pro Format of protocol address nf_stop Constant used to signify a 'stop' verdict ar_tip Ethernet+IP only (ar_pro==0x800): target IP address nf_stolen Constant used to signify a 'stolen' verdict ar_hln Length of hardware address indev Address of net_device representing input device, 0 if unknown data_hex A hexadecimal string representing the packet buffer contents pf Protocol family -- always arp ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address nf_repeat Constant used to signify a 'repeat' verdict length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents ar_pln Length of protocol address outdev_name Name of network device packet will be routed to (if known) arphdr Address of ARP header ar_data Address of ARP packet data region (after the header) ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address nf_drop Constant used to signify a 'drop' verdict ar_op ARP opcode (command) nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) outdev Address of net_device representing output device, 0 if unknown nf_accept Constant used to signify an 'accept' verdict LINUX SystemTap Tapset Reference November 2021 probe::netfilter.arp.out 3stap probe::netfilter.arp.out - Called for each outgoing ARP packet Synopsis netfilter.arp.out Values nf_stop Constant used to signify a 'stop' verdict ar_pro Format of protocol address ar_hrd Format of hardware address ar_sip Ethernet+IP only (ar_pro==0x800): source IP address pf Protocol family -- always arp data_hex A hexadecimal string representing the packet buffer contents indev Address of net_device representing input device, 0 if unknown ar_hln Length of hardware address nf_stolen Constant used to signify a 'stolen' verdict ar_tip Ethernet+IP only (ar_pro==0x800): target IP address ar_pln Length of protocol address outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents length The length of the packet buffer contents, in bytes nf_repeat Constant used to signify a 'repeat' verdict ar_sha Ethernet+IP only (ar_pro==0x800): source hardware (MAC) address nf_accept Constant used to signify an 'accept' verdict outdev Address of net_device representing output device, 0 if unknown nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) ar_op ARP opcode (command) nf_drop Constant used to signify a 'drop' verdict arphdr Address of ARP header ar_tha Ethernet+IP only (ar_pro==0x800): target hardware (MAC) address ar_data Address of ARP packet data region (after the header) LINUX SystemTap Tapset Reference November 2021 probe::netfilter.bridge.forward 3stap probe::netfilter.bridge.forward Called on an incoming bridging packet destined for some other computer Synopsis netfilter.bridge.forward Values nf_accept Constant used to signify an 'accept' verdict outdev Address of net_device representing output device, 0 if unknown br_rmac Root bridge MAC address protocol Packet protocol nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) br_fd Forward delay in 1/256 secs brhdr Address of bridge header nf_drop Constant used to signify a 'drop' verdict br_mac Bridge MAC address outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents length The length of the packet buffer contents, in bytes nf_repeat Constant used to signify a 'repeat' verdict br_type BPDU type br_bid Identity of bridge br_vid Protocol version identifier br_msg Message age in 1/256 secs br_flags BPDU flags pf Protocol family -- always bridge br_htime Hello time in 1/256 secs br_max Max age in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents br_poid Port identifier indev Address of net_device representing input device, 0 if unknown nf_stolen Constant used to signify a 'stolen' verdict llcpdu Address of LLC Protocol Data Unit br_prid Protocol identifier nf_stop Constant used to signify a 'stop' verdict br_cost Total cost from transmitting bridge to root llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_rid Identity of root bridge LINUX SystemTap Tapset Reference November 2021 probe::netfilter.bridge.local_in 3stap probe::netfilter.bridge.local_in Called on a bridging packet destined for the local computer Synopsis netfilter.bridge.local_in Values indev Address of net_device representing input device, 0 if unknown br_max Max age in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents br_poid Port identifier br_htime Hello time in 1/256 secs pf Protocol family -- always bridge llcpdu Address of LLC Protocol Data Unit nf_stolen Constant used to signify a 'stolen' verdict llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_cost Total cost from transmitting bridge to root nf_stop Constant used to signify a 'stop' verdict br_prid Protocol identifier br_rid Identity of root bridge br_fd Forward delay in 1/256 secs protocol Packet protocol nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) outdev Address of net_device representing output device, 0 if unknown br_rmac Root bridge MAC address nf_accept Constant used to signify an 'accept' verdict nf_drop Constant used to signify a 'drop' verdict brhdr Address of bridge header length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents br_mac Bridge MAC address outdev_name Name of network device packet will be routed to (if known) br_vid Protocol version identifier br_bid Identity of bridge br_flags BPDU flags br_msg Message age in 1/256 secs nf_repeat Constant used to signify a 'repeat' verdict br_type BPDU type LINUX SystemTap Tapset Reference November 2021 probe::netfilter.bridge.local_out 3stap probe::netfilter.bridge.local_out Called on a bridging packet coming from a local process Synopsis netfilter.bridge.local_out Values length The length of the packet buffer contents, in bytes br_mac Bridge MAC address outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents nf_repeat Constant used to signify a 'repeat' verdict br_type BPDU type br_vid Protocol version identifier br_bid Identity of bridge br_flags BPDU flags br_msg Message age in 1/256 secs nf_queue Constant used to signify a 'queue' verdict protocol Packet protocol indev_name Name of network device packet was received on (if known) br_fd Forward delay in 1/256 secs nf_accept Constant used to signify an 'accept' verdict outdev Address of net_device representing output device, 0 if unknown br_rmac Root bridge MAC address brhdr Address of bridge header nf_drop Constant used to signify a 'drop' verdict llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_prid Protocol identifier nf_stop Constant used to signify a 'stop' verdict br_cost Total cost from transmitting bridge to root br_rid Identity of root bridge br_max Max age in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents br_poid Port identifier indev Address of net_device representing input device, 0 if unknown pf Protocol family -- always bridge br_htime Hello time in 1/256 secs llcpdu Address of LLC Protocol Data Unit nf_stolen Constant used to signify a 'stolen' verdict LINUX SystemTap Tapset Reference November 2021 probe::netfilter.bridge.post_routing 3stap probe::netfilter.bridge.post_routing - Called before a bridging packet hits the wire Synopsis netfilter.bridge.post_routing Values br_type BPDU type nf_repeat Constant used to signify a 'repeat' verdict br_flags BPDU flags br_msg Message age in 1/256 secs br_bid Identity of bridge br_vid Protocol version identifier length The length of the packet buffer contents, in bytes outdev_name Name of network device packet will be routed to (if known) br_mac Bridge MAC address data_str A string representing the packet buffer contents brhdr Address of bridge header nf_drop Constant used to signify a 'drop' verdict indev_name Name of network device packet was received on (if known) protocol Packet protocol nf_queue Constant used to signify a 'queue' verdict br_fd Forward delay in 1/256 secs nf_accept Constant used to signify an 'accept' verdict br_rmac Root bridge MAC address outdev Address of net_device representing output device, 0 if unknown br_rid Identity of root bridge llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_prid Protocol identifier nf_stop Constant used to signify a 'stop' verdict br_cost Total cost from transmitting bridge to root llcpdu Address of LLC Protocol Data Unit nf_stolen Constant used to signify a 'stolen' verdict data_hex A hexadecimal string representing the packet buffer contents br_poid Port identifier br_max Max age in 1/256 secs indev Address of net_device representing input device, 0 if unknown pf Protocol family -- always bridge br_htime Hello time in 1/256 secs LINUX SystemTap Tapset Reference November 2021 probe::netfilter.bridge.pre_routing 3stap probe::netfilter.bridge.pre_routing - Called before a bridging packet is routed Synopsis netfilter.bridge.pre_routing Values length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents br_mac Bridge MAC address outdev_name Name of network device packet will be routed to (if known) br_vid Protocol version identifier br_bid Identity of bridge br_msg Message age in 1/256 secs br_flags BPDU flags nf_repeat Constant used to signify a 'repeat' verdict br_type BPDU type br_fd Forward delay in 1/256 secs nf_queue Constant used to signify a 'queue' verdict protocol Packet protocol indev_name Name of network device packet was received on (if known) outdev Address of net_device representing output device, 0 if unknown br_rmac Root bridge MAC address nf_accept Constant used to signify an 'accept' verdict nf_drop Constant used to signify a 'drop' verdict brhdr Address of bridge header llcproto_stp Constant used to signify Bridge Spanning Tree Protocol packet br_cost Total cost from transmitting bridge to root nf_stop Constant used to signify a 'stop' verdict br_prid Protocol identifier br_rid Identity of root bridge indev Address of net_device representing input device, 0 if unknown br_max Max age in 1/256 secs data_hex A hexadecimal string representing the packet buffer contents br_poid Port identifier br_htime Hello time in 1/256 secs pf Protocol family -- always bridge llcpdu Address of LLC Protocol Data Unit nf_stolen Constant used to signify a 'stolen' verdict LINUX SystemTap Tapset Reference November 2021 probe::netfilter.ip.forward 3stap probe::netfilter.ip.forward Called on an incoming IP packet addressed to some other computer Synopsis netfilter.ip.forward Values nf_stolen Constant used to signify a 'stolen' verdict psh TCP PSH flag (if protocol is TCP; ipv4 only) dport TCP or UDP destination port (ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) syn TCP SYN flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown ack TCP ACK flag (if protocol is TCP; ipv4 only) data_hex A hexadecimal string representing the packet buffer contents pf Protocol family -- either ipv4 or ipv6 saddr A string representing the source IP address ipproto_tcp Constant used to signify that the packet protocol is TCP ipproto_udp Constant used to signify that the packet protocol is UDP rst TCP RST flag (if protocol is TCP; ipv4 only) iphdr Address of IP header nf_stop Constant used to signify a 'stop' verdict daddr A string representing the destination IP address nf_drop Constant used to signify a 'drop' verdict sport TCP or UDP source port (ipv4 only) indev_name Name of network device packet was received on (if known) nf_queue Constant used to signify a 'queue' verdict protocol Packet protocol from driver (ipv4 only) urg TCP URG flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown nf_accept Constant used to signify an 'accept' verdict nf_repeat Constant used to signify a 'repeat' verdict family IP address family length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) LINUX SystemTap Tapset Reference November 2021 probe::netfilter.ip.local_in 3stap probe::netfilter.ip.local_in Called on an incoming IP packet addressed to the local computer Synopsis netfilter.ip.local_in Values fin TCP FIN flag (if protocol is TCP; ipv4 only) psh TCP PSH flag (if protocol is TCP; ipv4 only) dport TCP or UDP destination port (ipv4 only) nf_stolen Constant used to signify a 'stolen' verdict syn TCP SYN flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown data_hex A hexadecimal string representing the packet buffer contents saddr A string representing the source IP address pf Protocol family -- either ipv4 or ipv6 ipproto_tcp Constant used to signify that the packet protocol is TCP ipproto_udp Constant used to signify that the packet protocol is UDP rst TCP RST flag (if protocol is TCP; ipv4 only) iphdr Address of IP header nf_stop Constant used to signify a 'stop' verdict daddr A string representing the destination IP address nf_drop Constant used to signify a 'drop' verdict sport TCP or UDP source port (ipv4 only) nf_queue Constant used to signify a 'queue' verdict protocol Packet protocol from driver (ipv4 only) indev_name Name of network device packet was received on (if known) outdev Address of net_device representing output device, 0 if unknown urg TCP URG flag (if protocol is TCP; ipv4 only) nf_accept Constant used to signify an 'accept' verdict nf_repeat Constant used to signify a 'repeat' verdict family IP address family length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) LINUX SystemTap Tapset Reference November 2021 probe::netfilter.ip.local_out 3stap probe::netfilter.ip.local_out Called on an outgoing IP packet Synopsis netfilter.ip.local_out Values nf_stolen Constant used to signify a 'stolen' verdict psh TCP PSH flag (if protocol is TCP; ipv4 only) dport TCP or UDP destination port (ipv4 only) fin TCP FIN flag (if protocol is TCP; ipv4 only) pf Protocol family -- either ipv4 or ipv6 saddr A string representing the source IP address data_hex A hexadecimal string representing the packet buffer contents syn TCP SYN flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown ipproto_tcp Constant used to signify that the packet protocol is TCP ipproto_udp Constant used to signify that the packet protocol is UDP nf_stop Constant used to signify a 'stop' verdict iphdr Address of IP header rst TCP RST flag (if protocol is TCP; ipv4 only) nf_drop Constant used to signify a 'drop' verdict daddr A string representing the destination IP address nf_accept Constant used to signify an 'accept' verdict urg TCP URG flag (if protocol is TCP; ipv4 only) outdev Address of net_device representing output device, 0 if unknown indev_name Name of network device packet was received on (if known) protocol Packet protocol from driver (ipv4 only) nf_queue Constant used to signify a 'queue' verdict sport TCP or UDP source port (ipv4 only) family IP address family nf_repeat Constant used to signify a 'repeat' verdict outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents length The length of the packet buffer contents, in bytes LINUX SystemTap Tapset Reference November 2021 probe::netfilter.ip.post_routing 3stap probe::netfilter.ip.post_routing Called immediately before an outgoing IP packet leaves the computer Synopsis netfilter.ip.post_routing Values daddr A string representing the destination IP address nf_drop Constant used to signify a 'drop' verdict sport TCP or UDP source port (ipv4 only) protocol Packet protocol from driver (ipv4 only) nf_queue Constant used to signify a 'queue' verdict indev_name Name of network device packet was received on (if known) outdev Address of net_device representing output device, 0 if unknown urg TCP URG flag (if protocol is TCP; ipv4 only) nf_accept Constant used to signify an 'accept' verdict nf_repeat Constant used to signify a 'repeat' verdict family IP address family length The length of the packet buffer contents, in bytes data_str A string representing the packet buffer contents outdev_name Name of network device packet will be routed to (if known) fin TCP FIN flag (if protocol is TCP; ipv4 only) psh TCP PSH flag (if protocol is TCP; ipv4 only) dport TCP or UDP destination port (ipv4 only) nf_stolen Constant used to signify a 'stolen' verdict syn TCP SYN flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown ack TCP ACK flag (if protocol is TCP; ipv4 only) data_hex A hexadecimal string representing the packet buffer contents saddr A string representing the source IP address pf Protocol family -- either ipv4 or ipv6 ipproto_tcp Constant used to signify that the packet protocol is TCP ipproto_udp Constant used to signify that the packet protocol is UDP rst TCP RST flag (if protocol is TCP; ipv4 only) iphdr Address of IP header nf_stop Constant used to signify a 'stop' verdict LINUX SystemTap Tapset Reference November 2021 probe::netfilter.ip.pre_routing 3stap probe::netfilter.ip.pre_routing Called before an IP packet is routed Synopsis netfilter.ip.pre_routing Values length The length of the packet buffer contents, in bytes outdev_name Name of network device packet will be routed to (if known) data_str A string representing the packet buffer contents family IP address family nf_repeat Constant used to signify a 'repeat' verdict nf_queue Constant used to signify a 'queue' verdict protocol Packet protocol from driver (ipv4 only) indev_name Name of network device packet was received on (if known) sport TCP or UDP source port (ipv4 only) nf_accept Constant used to signify an 'accept' verdict outdev Address of net_device representing output device, 0 if unknown urg TCP URG flag (if protocol is TCP; ipv4 only) daddr A string representing the destination IP address nf_drop Constant used to signify a 'drop' verdict rst TCP RST flag (if protocol is TCP; ipv4 only) nf_stop Constant used to signify a 'stop' verdict iphdr Address of IP header ipproto_udp Constant used to signify that the packet protocol is UDP ipproto_tcp Constant used to signify that the packet protocol is TCP data_hex A hexadecimal string representing the packet buffer contents syn TCP SYN flag (if protocol is TCP; ipv4 only) ack TCP ACK flag (if protocol is TCP; ipv4 only) indev Address of net_device representing input device, 0 if unknown saddr A string representing the source IP address pf Protocol family - either 'ipv4' or 'ipv6' fin TCP FIN flag (if protocol is TCP; ipv4 only) psh TCP PSH flag (if protocol is TCP; ipv4 only) dport TCP or UDP destination port (ipv4 only) nf_stolen Constant used to signify a 'stolen' verdict LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.bind_new_program 3stap probe::sunrpc.clnt.bind_new_program Bind a new RPC program to an existing client Synopsis sunrpc.clnt.bind_new_program Values prog the number of new RPC program old_progname the name of old RPC program progname the name of new RPC program old_vers the version of old RPC program vers the version of new RPC program old_prog the number of old RPC program servername the server machine name LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.call_async 3stap probe::sunrpc.clnt.call_async Make an asynchronous RPC call Synopsis sunrpc.clnt.call_async Values port the port number prog the RPC program number progname the RPC program name procname the procedure name in this RPC call flags flags proc the procedure number in this RPC call dead whether this client is abandoned xid current transmission id vers the RPC program version number prot the IP protocol number servername the server machine name LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.call_sync 3stap probe::sunrpc.clnt.call_sync Make a synchronous RPC call Synopsis sunrpc.clnt.call_sync Values dead whether this client is abandoned proc the procedure number in this RPC call xid current transmission id flags flags procname the procedure name in this RPC call vers the RPC program version number servername the server machine name prot the IP protocol number port the port number progname the RPC program name prog the RPC program number LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.clone_client 3stap probe::sunrpc.clnt.clone_client Clone an RPC client structure Synopsis sunrpc.clnt.clone_client Values port the port number authflavor the authentication flavor vers the RPC program version number servername the server machine name progname the RPC program name prot the IP protocol number prog the RPC program number LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.create_client 3stap probe::sunrpc.clnt.create_client Create an RPC client Synopsis sunrpc.clnt.create_client Values servername the server machine name prot the IP protocol number progname the RPC program name vers the RPC program version number authflavor the authentication flavor prog the RPC program number port the port number LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.restart_call 3stap probe::sunrpc.clnt.restart_call Restart an asynchronous RPC call Synopsis sunrpc.clnt.restart_call Values xid the transmission id servername the server machine name tk_runstate the task run status tk_priority the task priority tk_pid the debugging aid of task prog the RPC program number tk_flags the task flags LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.clnt.shutdown_client 3stap probe::sunrpc.clnt.shutdown_client Shutdown an RPC client Synopsis sunrpc.clnt.shutdown_client Values om_ntrans the count of RPC transmissions vers the RPC program version number prot the IP protocol number servername the server machine name om_bytes_recv the count of bytes in rpccnt the count of RPC calls tasks the number of references prog the RPC program number om_queue the jiffies queued for xmit netreconn the count of reconnections clones the number of clones authflavor the authentication flavor progname the RPC program name om_ops the count of operations om_execute the RPC execution jiffies om_bytes_sent the count of bytes out om_rtt the RPC RTT jiffies port the port number LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.sched.delay 3stap probe::sunrpc.sched.delay Delay an RPC task Synopsis sunrpc.sched.delay Values tk_flags the flags of the task tk_pid the debugging id of the task prog the program number in the RPC call xid the transmission id in the RPC call vers the program version in the RPC call delay the time delayed prot the IP protocol in the RPC call LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.sched.execute 3stap probe::sunrpc.sched.execute Execute the RPC `scheduler' Synopsis sunrpc.sched.execute Values vers the program version in the RPC call prot the IP protocol in the RPC call xid the transmission id in the RPC call tk_pid the debugging id of the task prog the program number in the RPC call tk_flags the flags of the task LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.sched.new_task 3stap probe::sunrpc.sched.new_task Create new task for the specified client Synopsis sunrpc.sched.new_task Values vers the program version in the RPC call prot the IP protocol in the RPC call xid the transmission id in the RPC call tk_flags the flags of the task prog the program number in the RPC call LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.sched.release_task 3stap probe::sunrpc.sched.release_task Release all resources associated with a task Synopsis sunrpc.sched.release_task Values prot the IP protocol in the RPC call vers the program version in the RPC call xid the transmission id in the RPC call prog the program number in the RPC call tk_flags the flags of the task Description rpc_release_task function might not be found for a particular kernel. So, if we can't find it, just return '-1' for everything. LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.create 3stap probe::sunrpc.svc.create Create an RPC service Synopsis sunrpc.svc.create Values prog the number of the program bufsize the buffer size progname the name of the program pg_nvers the number of supported versions LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.destroy 3stap probe::sunrpc.svc.destroy Destroy an RPC service Synopsis sunrpc.svc.destroy Values sv_prog the number of the program netcnt the count of received RPC requests rpcbadfmt the count of requests dropped for bad formats rpcbadauth the count of requests drooped for authentication failure nettcpconn the count of accepted TCP connections rpccnt the count of valid RPC requests sv_nrthreads the number of concurrent threads sv_name the service name sv_progname the name of the program LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.drop 3stap probe::sunrpc.svc.drop Drop RPC request Synopsis sunrpc.svc.drop Values rq_prot the IP protocol of the reqeust rq_vers the program version in the request peer_ip the peer address where the request is from rq_prog the program number in the request rq_proc the procedure number in the request rq_xid the transmission id in the request sv_name the service name LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.process 3stap probe::sunrpc.svc.process Process an RPC request Synopsis sunrpc.svc.process Values sv_name the service name sv_nrthreads the number of concurrent threads rq_xid the transmission id in the request rq_proc the procedure number in the request rq_prog the program number in the request rq_vers the program version in the request peer_ip the peer address where the request is from rq_prot the IP protocol of the reqeust sv_prog the number of the program LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.recv 3stap probe::sunrpc.svc.recv Listen for the next RPC request on any socket Synopsis sunrpc.svc.recv Values sv_name the service name sv_nrthreads the number of concurrent threads sv_prog the number of the program timeout the timeout of waiting for data LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.register 3stap probe::sunrpc.svc.register Register an RPC service with the local portmapper Synopsis sunrpc.svc.register Values prog the number of the program progname the name of the program sv_name the service name port the port number prot the IP protocol number Description If proto and port are both 0, then unregister a service. LINUX SystemTap Tapset Reference November 2021 probe::sunrpc.svc.send 3stap probe::sunrpc.svc.send Return reply to RPC client Synopsis sunrpc.svc.send Values rq_prot the IP protocol of the reqeust rq_prog the program number in the request peer_ip the peer address where the request is from rq_vers the program version in the request rq_xid the transmission id in the request rq_proc the procedure number in the request sv_name the service name LINUX SystemTap Tapset Reference November 2021 probe::tcp.disconnect 3stap probe::tcp.disconnect TCP socket disconnection Synopsis tcp.disconnect Values saddr A string representing the source IP address dport TCP destination port sock Network socket daddr A string representing the destination IP address flags TCP flags (e.g. FIN, etc) family IP address family name Name of this probe sport TCP source port Context The process which disconnects tcp LINUX SystemTap Tapset Reference November 2021 probe::tcp.disconnect.return 3stap probe::tcp.disconnect.return TCP socket disconnection complete Synopsis tcp.disconnect.return Values ret Error code (0: no error) name Name of this probe Context The process which disconnects tcp LINUX SystemTap Tapset Reference November 2021 probe::tcp.receive 3stap probe::tcp.receive Called when a TCP packet is received Synopsis tcp.receive Values psh TCP PSH flag name Name of the probe point sport TCP source port saddr A string representing the source IP address urg TCP URG flag fin TCP FIN flag protocol Packet protocol from driver iphdr IP header address daddr A string representing the destination IP address ack TCP ACK flag family IP address family rst TCP RST flag syn TCP SYN flag dport TCP destination port LINUX SystemTap Tapset Reference November 2021 probe::tcp.recvmsg 3stap probe::tcp.recvmsg Receiving TCP message Synopsis tcp.recvmsg Values sock Network socket daddr A string representing the destination IP address sport TCP source port family IP address family name Name of this probe saddr A string representing the source IP address dport TCP destination port size Number of bytes to be received Context The process which receives a tcp message LINUX SystemTap Tapset Reference November 2021 probe::tcp.recvmsg.return 3stap probe::tcp.recvmsg.return Receiving TCP message complete Synopsis tcp.recvmsg.return Values daddr A string representing the destination IP address sport TCP source port family IP address family name Name of this probe saddr A string representing the source IP address size Number of bytes received or error code if an error occurred. dport TCP destination port Context The process which receives a tcp message LINUX SystemTap Tapset Reference November 2021 probe::tcp.sendmsg 3stap probe::tcp.sendmsg Sending a tcp message Synopsis tcp.sendmsg Values size Number of bytes to send family IP address family name Name of this probe sock Network socket Context The process which sends a tcp message LINUX SystemTap Tapset Reference November 2021 probe::tcp.sendmsg.return 3stap probe::tcp.sendmsg.return Sending TCP message is done Synopsis tcp.sendmsg.return Values name Name of this probe size Number of bytes sent or error code if an error occurred. Context The process which sends a tcp message LINUX SystemTap Tapset Reference November 2021 probe::tcp.setsockopt 3stap probe::tcp.setsockopt Call to setsockopt Synopsis tcp.setsockopt Values level The level at which the socket options will be manipulated optstr Resolves optname to a human-readable format sock Network socket name Name of this probe family IP address family optname TCP socket options (e.g. TCP_NODELAY, TCP_MAXSEG, etc) optlen Used to access values for setsockopt Context The process which calls setsockopt LINUX SystemTap Tapset Reference November 2021 probe::tcp.setsockopt.return 3stap probe::tcp.setsockopt.return Return from setsockopt Synopsis tcp.setsockopt.return Values ret Error code (0: no error) name Name of this probe Context The process which calls setsockopt LINUX SystemTap Tapset Reference November 2021 probe::udp.disconnect 3stap probe::udp.disconnect Fires when a process requests for a UDP disconnection Synopsis udp.disconnect Values sport UDP source port dport UDP destination port saddr A string representing the source IP address sock Network socket used by the process daddr A string representing the destination IP address flags Flags (e.g. FIN, etc) name The name of this probe family IP address family Context The process which requests a UDP disconnection LINUX SystemTap Tapset Reference November 2021 probe::udp.disconnect.return 3stap probe::udp.disconnect.return UDP has been disconnected successfully Synopsis udp.disconnect.return Values name The name of this probe family IP address family daddr A string representing the destination IP address saddr A string representing the source IP address dport UDP destination port sport UDP source port ret Error code (0: no error) Context The process which requested a UDP disconnection LINUX SystemTap Tapset Reference November 2021 probe::udp.recvmsg 3stap probe::udp.recvmsg Fires whenever a UDP message is received Synopsis udp.recvmsg Values sport UDP source port dport UDP destination port family IP address family name The name of this probe size Number of bytes received by the process sock Network socket used by the process saddr A string representing the source IP address daddr A string representing the destination IP address Context The process which received a UDP message LINUX SystemTap Tapset Reference November 2021 probe::udp.recvmsg.return 3stap probe::udp.recvmsg.return Fires whenever an attempt to receive a UDP message received is completed Synopsis udp.recvmsg.return Values saddr A string representing the source IP address daddr A string representing the destination IP address size Number of bytes received by the process name The name of this probe family IP address family sport UDP source port dport UDP destination port Context The process which received a UDP message LINUX SystemTap Tapset Reference November 2021 probe::udp.sendmsg 3stap probe::udp.sendmsg Fires whenever a process sends a UDP message Synopsis udp.sendmsg Values sport UDP source port dport UDP destination port sock Network socket used by the process saddr A string representing the source IP address daddr A string representing the destination IP address family IP address family size Number of bytes sent by the process name The name of this probe Context The process which sent a UDP message LINUX SystemTap Tapset Reference November 2021 probe::udp.sendmsg.return 3stap probe::udp.sendmsg.return Fires whenever an attempt to send a UDP message is completed Synopsis udp.sendmsg.return Values size Number of bytes sent by the process name The name of this probe Context The process which sent a UDP message Socket Tapset This family of probe points is used to probe socket activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 function::inet_get_ip_source 3stap function::inet_get_ip_source Provide IP source address string for a kernel socket Synopsis inet_get_ip_source:string(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference November 2021 function::inet_get_local_port 3stap function::inet_get_local_port Provide local port number for a kernel socket Synopsis inet_get_local_port:long(sock:long) Arguments sock pointer to the kernel socket LINUX SystemTap Tapset Reference November 2021 function::sock_fam_num2str 3stap function::sock_fam_num2str Given a protocol family number, return a string representation Synopsis sock_fam_num2str:string(family:long) Arguments family The family number LINUX SystemTap Tapset Reference November 2021 function::sock_fam_str2num 3stap function::sock_fam_str2num Given a protocol family name (string), return the corresponding protocol family number Synopsis sock_fam_str2num:long(family:string) Arguments family The family name LINUX SystemTap Tapset Reference November 2021 function::sock_prot_num2str 3stap function::sock_prot_num2str Given a protocol number, return a string representation Synopsis sock_prot_num2str:string(proto:long) Arguments proto The protocol number LINUX SystemTap Tapset Reference November 2021 function::sock_prot_str2num 3stap function::sock_prot_str2num Given a protocol name (string), return the corresponding protocol number Synopsis sock_prot_str2num:long(proto:string) Arguments proto The protocol name LINUX SystemTap Tapset Reference November 2021 function::sock_state_num2str 3stap function::sock_state_num2str Given a socket state number, return a string representation Synopsis sock_state_num2str:string(state:long) Arguments state The state number LINUX SystemTap Tapset Reference November 2021 function::sock_state_str2num 3stap function::sock_state_str2num Given a socket state string, return the corresponding state number Synopsis sock_state_str2num:long(state:string) Arguments state The state name LINUX SystemTap Tapset Reference November 2021 probe::socket.aio_read 3stap probe::socket.aio_read Receiving message via sock_aio_read Synopsis socket.aio_read Values type Socket type value size Message size in bytes protocol Protocol value family Protocol family value name Name of this probe flags Socket flags value state Socket state value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_aio_read function LINUX SystemTap Tapset Reference November 2021 probe::socket.aio_read.return 3stap probe::socket.aio_read.return Conclusion of message received via sock_aio_read Synopsis socket.aio_read.return Values protocol Protocol value size Size of message received (in bytes) or error code if success = 0 type Socket type value name Name of this probe family Protocol family value success Was receive successful? (1 = yes, 0 = no) flags Socket flags value state Socket state value Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_aio_read function LINUX SystemTap Tapset Reference November 2021 probe::socket.aio_write 3stap probe::socket.aio_write Message send via sock_aio_write Synopsis socket.aio_write Values flags Socket flags value state Socket state value name Name of this probe family Protocol family value protocol Protocol value size Message size in bytes type Socket type value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_aio_write function LINUX SystemTap Tapset Reference November 2021 probe::socket.aio_write.return 3stap probe::socket.aio_write.return Conclusion of message send via sock_aio_write Synopsis socket.aio_write.return Values flags Socket flags value state Socket state value name Name of this probe family Protocol family value success Was receive successful? (1 = yes, 0 = no) protocol Protocol value type Socket type value size Size of message received (in bytes) or error code if success = 0 Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_aio_write function LINUX SystemTap Tapset Reference November 2021 probe::socket.close 3stap probe::socket.close Close a socket Synopsis socket.close Values name Name of this probe family Protocol family value flags Socket flags value state Socket state value protocol Protocol value type Socket type value Context The requester (user process or kernel) Description Fires at the beginning of closing a socket. LINUX SystemTap Tapset Reference November 2021 probe::socket.close.return 3stap probe::socket.close.return Return from closing a socket Synopsis socket.close.return Values name Name of this probe Context The requester (user process or kernel) Description Fires at the conclusion of closing a socket. LINUX SystemTap Tapset Reference November 2021 probe::socket.create 3stap probe::socket.create Creation of a socket Synopsis socket.create Values type Socket type value protocol Protocol value requester Requested by user process or the kernel (1 = kernel, 0 = user) family Protocol family value name Name of this probe Context The requester (see requester variable) Description Fires at the beginning of creating a socket. LINUX SystemTap Tapset Reference November 2021 probe::socket.create.return 3stap probe::socket.create.return Return from Creation of a socket Synopsis socket.create.return Values protocol Protocol value type Socket type value name Name of this probe family Protocol family value success Was socket creation successful? (1 = yes, 0 = no) err Error code if success == 0 requester Requested by user process or the kernel (1 = kernel, 0 = user) Context The requester (user process or kernel) Description Fires at the conclusion of creating a socket. LINUX SystemTap Tapset Reference November 2021 probe::socket.read_iter 3stap probe::socket.read_iter Receiving message via sock_read_iter Synopsis socket.read_iter Values family Protocol family value name Name of this probe state Socket state value flags Socket flags value type Socket type value size Message size in bytes protocol Protocol value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_read_iter function LINUX SystemTap Tapset Reference November 2021 probe::socket.read_iter.return 3stap probe::socket.read_iter.return Conclusion of message received via sock_read_iter Synopsis socket.read_iter.return Values protocol Protocol value size Size of message received (in bytes) or error code if success = 0 type Socket type value name Name of this probe family Protocol family value success Was receive successful? (1 = yes, 0 = no) state Socket state value flags Socket flags value Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_read_iter function LINUX SystemTap Tapset Reference November 2021 probe::socket.readv 3stap probe::socket.readv Receiving a message via sock_readv Synopsis socket.readv Values family Protocol family value name Name of this probe state Socket state value flags Socket flags value type Socket type value size Message size in bytes protocol Protocol value Context The message sender Description Fires at the beginning of receiving a message on a socket via the sock_readv function LINUX SystemTap Tapset Reference November 2021 probe::socket.readv.return 3stap probe::socket.readv.return Conclusion of receiving a message via sock_readv Synopsis socket.readv.return Values name Name of this probe family Protocol family value success Was receive successful? (1 = yes, 0 = no) flags Socket flags value state Socket state value protocol Protocol value type Socket type value size Size of message received (in bytes) or error code if success = 0 Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_readv function LINUX SystemTap Tapset Reference November 2021 probe::socket.receive 3stap probe::socket.receive Message received on a socket. Synopsis socket.receive Values protocol Protocol value size Size of message received (in bytes) or error code if success = 0 type Socket type value name Name of this probe family Protocol family value success Was send successful? (1 = yes, 0 = no) state Socket state value flags Socket flags value Context The message receiver LINUX SystemTap Tapset Reference November 2021 probe::socket.recvmsg 3stap probe::socket.recvmsg Message being received on socket Synopsis socket.recvmsg Values state Socket state value flags Socket flags value family Protocol family value name Name of this probe type Socket type value size Message size in bytes protocol Protocol value Context The message receiver. Description Fires at the beginning of receiving a message on a socket via the sock_recvmsg function LINUX SystemTap Tapset Reference November 2021 probe::socket.recvmsg.return 3stap probe::socket.recvmsg.return Return from Message being received on socket Synopsis socket.recvmsg.return Values success Was receive successful? (1 = yes, 0 = no) family Protocol family value name Name of this probe state Socket state value flags Socket flags value type Socket type value size Size of message received (in bytes) or error code if success = 0 protocol Protocol value Context The message receiver. Description Fires at the conclusion of receiving a message on a socket via the sock_recvmsg function. LINUX SystemTap Tapset Reference November 2021 probe::socket.send 3stap probe::socket.send Message sent on a socket. Synopsis socket.send Values success Was send successful? (1 = yes, 0 = no) family Protocol family value name Name of this probe flags Socket flags value state Socket state value size Size of message sent (in bytes) or error code if success = 0 type Socket type value protocol Protocol value Context The message sender LINUX SystemTap Tapset Reference November 2021 probe::socket.sendmsg 3stap probe::socket.sendmsg Message is currently being sent on a socket. Synopsis socket.sendmsg Values type Socket type value size Message size in bytes protocol Protocol value family Protocol family value name Name of this probe flags Socket flags value state Socket state value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_sendmsg function LINUX SystemTap Tapset Reference November 2021 probe::socket.sendmsg.return 3stap probe::socket.sendmsg.return Return from socket.sendmsg. Synopsis socket.sendmsg.return Values size Size of message sent (in bytes) or error code if success = 0 type Socket type value protocol Protocol value success Was send successful? (1 = yes, 0 = no) family Protocol family value name Name of this probe state Socket state value flags Socket flags value Context The message sender. Description Fires at the conclusion of sending a message on a socket via the sock_sendmsg function LINUX SystemTap Tapset Reference November 2021 probe::socket.write_iter 3stap probe::socket.write_iter Message send via sock_write_iter Synopsis socket.write_iter Values family Protocol family value name Name of this probe flags Socket flags value state Socket state value type Socket type value size Message size in bytes protocol Protocol value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_write_iter function LINUX SystemTap Tapset Reference November 2021 probe::socket.write_iter.return 3stap probe::socket.write_iter.return Conclusion of message send via sock_write_iter Synopsis socket.write_iter.return Values type Socket type value size Size of message received (in bytes) or error code if success = 0 protocol Protocol value state Socket state value flags Socket flags value success Was receive successful? (1 = yes, 0 = no) family Protocol family value name Name of this probe Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_write_iter function LINUX SystemTap Tapset Reference November 2021 probe::socket.writev 3stap probe::socket.writev Message sent via socket_writev Synopsis socket.writev Values protocol Protocol value size Message size in bytes type Socket type value flags Socket flags value state Socket state value name Name of this probe family Protocol family value Context The message sender Description Fires at the beginning of sending a message on a socket via the sock_writev function LINUX SystemTap Tapset Reference November 2021 probe::socket.writev.return 3stap probe::socket.writev.return Conclusion of message sent via socket_writev Synopsis socket.writev.return Values protocol Protocol value size Size of message sent (in bytes) or error code if success = 0 type Socket type value flags Socket flags value state Socket state value name Name of this probe family Protocol family value success Was send successful? (1 = yes, 0 = no) Context The message receiver. Description Fires at the conclusion of sending a message on a socket via the sock_writev function SNMP Information Tapset This family of probe points is used to probe socket activities to provide SNMP type information. It contains the following functions and probe points: LINUX SystemTap Tapset Reference November 2021 function::ipmib_filter_key 3stap function::ipmib_filter_key Default filter function for ipmib.* probes Synopsis ipmib_filter_key:long(skb:long,op:long,SourceIsLocal:long) Arguments skb pointer to the struct sk_buff op value to be counted if skb passes the filter SourceIsLocal 1 is local operation and 0 is non-local operation Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in skb. A return value of 0 means this particular skb should be not be counted. LINUX SystemTap Tapset Reference November 2021 function::ipmib_get_proto 3stap function::ipmib_get_proto Get the protocol value Synopsis ipmib_get_proto:long(skb:long) Arguments skb pointer to a struct sk_buff Description Returns the protocol value from skb. LINUX SystemTap Tapset Reference November 2021 function::ipmib_local_addr 3stap function::ipmib_local_addr Get the local ip address Synopsis ipmib_local_addr:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the local ip address skb. LINUX SystemTap Tapset Reference November 2021 function::ipmib_remote_addr 3stap function::ipmib_remote_addr Get the remote ip address Synopsis ipmib_remote_addr:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the remote ip address from skb. LINUX SystemTap Tapset Reference November 2021 function::ipmib_tcp_local_port 3stap function::ipmib_tcp_local_port Get the local tcp port Synopsis ipmib_tcp_local_port:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the local tcp port from skb. LINUX SystemTap Tapset Reference November 2021 function::ipmib_tcp_remote_port 3stap function::ipmib_tcp_remote_port Get the remote tcp port Synopsis ipmib_tcp_remote_port:long(skb:long,SourceIsLocal:long) Arguments skb pointer to a struct sk_buff SourceIsLocal flag to indicate whether local operation Description Returns the remote tcp port from skb. LINUX SystemTap Tapset Reference November 2021 function::linuxmib_filter_key 3stap function::linuxmib_filter_key Default filter function for linuxmib.* probes Synopsis linuxmib_filter_key:long(sk:long,op:long) Arguments sk pointer to the struct sock op value to be counted if sk passes the filter Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in sk. A return value of 0 means this particular sk should be not be counted. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_filter_key 3stap function::tcpmib_filter_key Default filter function for tcpmib.* probes Synopsis tcpmib_filter_key:long(sk:long,op:long) Arguments sk pointer to the struct sock being acted on op value to be counted if sk passes the filter Description This function is a default filter function. The user can replace this function with their own. The user-supplied filter function returns an index key based on the values in sk. A return value of 0 means this particular sk should be not be counted. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_get_state 3stap function::tcpmib_get_state Get a socket's state Synopsis tcpmib_get_state:long(sk:long) Arguments sk pointer to a struct sock Description Returns the sk_state from a struct sock. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_local_addr 3stap function::tcpmib_local_addr Get the source address Synopsis tcpmib_local_addr:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the saddr from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_local_port 3stap function::tcpmib_local_port Get the local port Synopsis tcpmib_local_port:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the sport from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_remote_addr 3stap function::tcpmib_remote_addr Get the remote address Synopsis tcpmib_remote_addr:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the daddr from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2021 function::tcpmib_remote_port 3stap function::tcpmib_remote_port Get the remote port Synopsis tcpmib_remote_port:long(sk:long) Arguments sk pointer to a struct inet_sock Description Returns the dport from a struct inet_sock in host order. LINUX SystemTap Tapset Reference November 2021 probe::ipmib.ForwDatagrams 3stap probe::ipmib.ForwDatagrams Count forwarded packet Synopsis ipmib.ForwDatagrams Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ForwDatagrams (equivalent to SNMP's MIB IPSTATS_MIB_OUTFORWDATAGRAMS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.FragFails 3stap probe::ipmib.FragFails Count datagram fragmented unsuccessfully Synopsis ipmib.FragFails Values op Value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global FragFails (equivalent to SNMP's MIB IPSTATS_MIB_FRAGFAILS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.FragOKs 3stap probe::ipmib.FragOKs Count datagram fragmented successfully Synopsis ipmib.FragOKs Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global FragOKs (equivalent to SNMP's MIB IPSTATS_MIB_FRAGOKS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.InAddrErrors 3stap probe::ipmib.InAddrErrors Count arriving packets with an incorrect address Synopsis ipmib.InAddrErrors Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InAddrErrors (equivalent to SNMP's MIB IPSTATS_MIB_INADDRERRORS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.InDiscards 3stap probe::ipmib.InDiscards Count discarded inbound packets Synopsis ipmib.InDiscards Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InDiscards (equivalent to SNMP's MIB STATS_MIB_INDISCARDS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.InNoRoutes 3stap probe::ipmib.InNoRoutes Count an arriving packet with no matching socket Synopsis ipmib.InNoRoutes Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InNoRoutes (equivalent to SNMP's MIB IPSTATS_MIB_INNOROUTES) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.InReceives 3stap probe::ipmib.InReceives Count an arriving packet Synopsis ipmib.InReceives Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InReceives (equivalent to SNMP's MIB IPSTATS_MIB_INRECEIVES) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.InUnknownProtos 3stap probe::ipmib.InUnknownProtos Count arriving packets with an unbound proto Synopsis ipmib.InUnknownProtos Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global InUnknownProtos (equivalent to SNMP's MIB IPSTATS_MIB_INUNKNOWNPROTOS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.OutRequests 3stap probe::ipmib.OutRequests Count a request to send a packet Synopsis ipmib.OutRequests Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global OutRequests (equivalent to SNMP's MIB IPSTATS_MIB_OUTREQUESTS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.ReasmReqds 3stap probe::ipmib.ReasmReqds Count number of packet fragments reassembly requests Synopsis ipmib.ReasmReqds Values skb pointer to the struct sk_buff being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ReasmReqds (equivalent to SNMP's MIB IPSTATS_MIB_REASMREQDS) LINUX SystemTap Tapset Reference November 2021 probe::ipmib.ReasmTimeout 3stap probe::ipmib.ReasmTimeout Count Reassembly Timeouts Synopsis ipmib.ReasmTimeout Values op value to be added to the counter (default value of 1) skb pointer to the struct sk_buff being acted on Description The packet pointed to by skb is filtered by the function ipmib_filter_key. If the packet passes the filter is is counted in the global ReasmTimeout (equivalent to SNMP's MIB IPSTATS_MIB_REASMTIMEOUT) LINUX SystemTap Tapset Reference November 2021 probe::linuxmib.DelayedACKs 3stap probe::linuxmib.DelayedACKs Count of delayed acks Synopsis linuxmib.DelayedACKs Values sk Pointer to the struct sock being acted on op Value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global DelayedACKs (equivalent to SNMP's MIB LINUX_MIB_DELAYEDACKS) LINUX SystemTap Tapset Reference November 2021 probe::linuxmib.ListenDrops 3stap probe::linuxmib.ListenDrops Count of times conn request that were dropped Synopsis linuxmib.ListenDrops Values sk Pointer to the struct sock being acted on op Value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global ListenDrops (equivalent to SNMP's MIB LINUX_MIB_LISTENDROPS) LINUX SystemTap Tapset Reference November 2021 probe::linuxmib.ListenOverflows 3stap probe::linuxmib.ListenOverflows Count of times a listen queue overflowed Synopsis linuxmib.ListenOverflows Values op Value to be added to the counter (default value of 1) sk Pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global ListenOverflows (equivalent to SNMP's MIB LINUX_MIB_LISTENOVERFLOWS) LINUX SystemTap Tapset Reference November 2021 probe::linuxmib.TCPMemoryPressures 3stap probe::linuxmib.TCPMemoryPressures Count of times memory pressure was used Synopsis linuxmib.TCPMemoryPressures Values op Value to be added to the counter (default value of 1) sk Pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function linuxmib_filter_key. If the packet passes the filter is is counted in the global TCPMemoryPressures (equivalent to SNMP's MIB LINUX_MIB_TCPMEMORYPRESSURES) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.ActiveOpens 3stap probe::tcpmib.ActiveOpens Count an active opening of a socket Synopsis tcpmib.ActiveOpens Values op value to be added to the counter (default value of 1) sk pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global ActiveOpens (equivalent to SNMP's MIB TCP_MIB_ACTIVEOPENS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.AttemptFails 3stap probe::tcpmib.AttemptFails Count a failed attempt to open a socket Synopsis tcpmib.AttemptFails Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global AttemptFails (equivalent to SNMP's MIB TCP_MIB_ATTEMPTFAILS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.CurrEstab 3stap probe::tcpmib.CurrEstab Update the count of open sockets Synopsis tcpmib.CurrEstab Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global CurrEstab (equivalent to SNMP's MIB TCP_MIB_CURRESTAB) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.EstabResets 3stap probe::tcpmib.EstabResets Count the reset of a socket Synopsis tcpmib.EstabResets Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global EstabResets (equivalent to SNMP's MIB TCP_MIB_ESTABRESETS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.InSegs 3stap probe::tcpmib.InSegs Count an incoming tcp segment Synopsis tcpmib.InSegs Values op value to be added to the counter (default value of 1) sk pointer to the struct sock being acted on Description The packet pointed to by skb is filtered by the function tcpmib_filter_key (or ipmib_filter_key for tcp v4). If the packet passes the filter is is counted in the global InSegs (equivalent to SNMP's MIB TCP_MIB_INSEGS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.OutRsts 3stap probe::tcpmib.OutRsts Count the sending of a reset packet Synopsis tcpmib.OutRsts Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global OutRsts (equivalent to SNMP's MIB TCP_MIB_OUTRSTS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.OutSegs 3stap probe::tcpmib.OutSegs Count the sending of a TCP segment Synopsis tcpmib.OutSegs Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global OutSegs (equivalent to SNMP's MIB TCP_MIB_OUTSEGS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.PassiveOpens 3stap probe::tcpmib.PassiveOpens Count the passive creation of a socket Synopsis tcpmib.PassiveOpens Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global PassiveOpens (equivalent to SNMP's MIB TCP_MIB_PASSIVEOPENS) LINUX SystemTap Tapset Reference November 2021 probe::tcpmib.RetransSegs 3stap probe::tcpmib.RetransSegs Count the retransmission of a TCP segment Synopsis tcpmib.RetransSegs Values sk pointer to the struct sock being acted on op value to be added to the counter (default value of 1) Description The packet pointed to by skb is filtered by the function tcpmib_filter_key. If the packet passes the filter is is counted in the global RetransSegs (equivalent to SNMP's MIB TCP_MIB_RETRANSSEGS) Kernel Process Tapset This family of probe points is used to probe process-related activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 function::get_loadavg_index 3stap function::get_loadavg_index Get the load average for a specified interval Synopsis get_loadavg_index:long(indx:long) Arguments indx The load average interval to capture. Description This function returns the load average at a specified interval. The three load average values 1, 5 and 15 minute average corresponds to indexes 0, 1 and 2 of the avenrun array - see linux/sched.h. Please note that the truncated-integer portion of the load average is returned. If the specified index is out-of-bounds, then an error message and exception is thrown. LINUX SystemTap Tapset Reference November 2021 function::sprint_loadavg 3stap function::sprint_loadavg Report a pretty-printed load average Synopsis sprint_loadavg:string() Arguments None Description Returns the a string with three decimal numbers in the usual format for 1-, 5- and 15-minute load averages. LINUX SystemTap Tapset Reference November 2021 function::target_set_pid 3stap function::target_set_pid Does pid descend from target process? Synopsis target_set_pid(pid:) Arguments pid The pid of the process to query Description This function returns whether the given process-id is within the target set, that is whether it is a descendant of the top-level target process. LINUX SystemTap Tapset Reference November 2021 function::target_set_report 3stap function::target_set_report Print a report about the target set Synopsis target_set_report() Arguments None Description This function prints a report about the processes in the target set, and their ancestry. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.create 3stap probe::kprocess.create Fires whenever a new process or thread is successfully created Synopsis kprocess.create Values new_tid The TID of the newly created task new_pid The PID of the newly created process Context Parent of the created process. Description Fires whenever a new process is successfully created, either as a result of fork (or one of its syscall variants), or a new kernel thread. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.exec 3stap probe::kprocess.exec Attempt to exec to a new program Synopsis kprocess.exec Values filename The path to the new executable argstr A string containing the filename followed by the arguments to pass, excluding 0th arg (SystemTap v2.5+) args The arguments to pass to the new executable, including the 0th arg (SystemTap v2.5+) name Name of the system call (execve) (SystemTap v2.5+) Context The caller of exec. Description Fires whenever a process attempts to exec to a new program. Aliased to the syscall.execve probe in SystemTap v2.5+. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.exec_complete 3stap probe::kprocess.exec_complete Return from exec to a new program Synopsis kprocess.exec_complete Values retstr A string representation of errno (SystemTap v2.5+) name Name of the system call (execve) (SystemTap v2.5+) success A boolean indicating whether the exec was successful errno The error number resulting from the exec Context On success, the context of the new executable. On failure, remains in the context of the caller. Description Fires at the completion of an exec call. Aliased to the syscall.execve.return probe in SystemTap v2.5+. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.exit 3stap probe::kprocess.exit Exit from process Synopsis kprocess.exit Values code The exit code of the process Context The process which is terminating. Description Fires when a process terminates. This will always be followed by a kprocess.release, though the latter may be delayed if the process waits in a zombie state. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.release 3stap probe::kprocess.release Process released Synopsis kprocess.release Values task A task handle to the process being released pid Same as released_pid for compatibility (deprecated) released_tid TID of the task being released released_pid PID of the process being released Context The context of the parent, if it wanted notification of this process' termination, else the context of the process itself. Description Fires when a process is released from the kernel. This always follows a kprocess.exit, though it may be delayed somewhat if the process waits in a zombie state. LINUX SystemTap Tapset Reference November 2021 probe::kprocess.start 3stap probe::kprocess.start Starting new process Synopsis kprocess.start Values None Context Newly created process. Description Fires immediately before a new process begins execution. Signal Tapset This family of probe points is used to probe signal activities. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 function::get_sa_flags 3stap function::get_sa_flags Returns the numeric value of sa_flags Synopsis get_sa_flags:long(act:long) Arguments act address of the sigaction to query. LINUX SystemTap Tapset Reference November 2021 function::get_sa_handler 3stap function::get_sa_handler Returns the numeric value of sa_handler Synopsis get_sa_handler:long(act:long) Arguments act address of the sigaction to query. LINUX SystemTap Tapset Reference November 2021 function::is_sig_blocked 3stap function::is_sig_blocked Returns 1 if the signal is currently blocked, or 0 if it is not Synopsis is_sig_blocked:long(task:long,sig:long) Arguments task address of the task_struct to query. sig the signal number to test. LINUX SystemTap Tapset Reference November 2021 function::sa_flags_str 3stap function::sa_flags_str Returns the string representation of sa_flags Synopsis sa_flags_str:string(sa_flags:long) Arguments sa_flags the set of flags to convert to string. LINUX SystemTap Tapset Reference November 2021 function::sa_handler_str 3stap function::sa_handler_str Returns the string representation of an sa_handler Synopsis sa_handler_str(handler:) Arguments handler the sa_handler to convert to string. Description Returns the string representation of an sa_handler. If it is not SIG_DFL, SIG_IGN or SIG_ERR, it will return the address of the handler. LINUX SystemTap Tapset Reference November 2021 function::signal_str 3stap function::signal_str Returns the string representation of a signal number Synopsis signal_str(num:) Arguments num the signal number to convert to string. LINUX SystemTap Tapset Reference November 2021 function::sigset_mask_str 3stap function::sigset_mask_str Returns the string representation of a sigset Synopsis sigset_mask_str:string(mask:long) Arguments mask the sigset to convert to string. LINUX SystemTap Tapset Reference November 2021 probe::signal.check_ignored 3stap probe::signal.check_ignored Checking to see signal is ignored Synopsis signal.check_ignored Values sig The number of the signal pid_name Name of the process receiving the signal sig_pid The PID of the process receiving the signal sig_name A string representation of the signal LINUX SystemTap Tapset Reference November 2021 probe::signal.check_ignored.return 3stap probe::signal.check_ignored.return Check to see signal is ignored completed Synopsis signal.check_ignored.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.checkperm 3stap probe::signal.checkperm Check being performed on a sent signal Synopsis signal.checkperm Values sig_pid The PID of the process receiving the signal name Name of the probe point sig_name A string representation of the signal task A task handle to the signal recipient sig The number of the signal si_code Indicates the signal type sinfo The address of the siginfo structure pid_name Name of the process receiving the signal LINUX SystemTap Tapset Reference November 2021 probe::signal.checkperm.return 3stap probe::signal.checkperm.return Check performed on a sent signal completed Synopsis signal.checkperm.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2021 probe::signal.do_action 3stap probe::signal.do_action Examining or changing a signal action Synopsis signal.do_action Values name Name of the probe point sig_name A string representation of the signal sigact_addr The address of the new sigaction struct associated with the signal sa_mask The new mask of the signal oldsigact_addr The address of the old sigaction struct associated with the signal sig The signal to be examined/changed sa_handler The new handler of the signal LINUX SystemTap Tapset Reference November 2021 probe::signal.do_action.return 3stap probe::signal.do_action.return Examining or changing a signal action completed Synopsis signal.do_action.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2021 probe::signal.flush 3stap probe::signal.flush Flushing all pending signals for a task Synopsis signal.flush Values pid_name The name of the process associated with the task performing the flush task The task handler of the process performing the flush sig_pid The PID of the process associated with the task performing the flush name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.force_segv 3stap probe::signal.force_segv Forcing send of SIGSEGV Synopsis signal.force_segv Values sig The number of the signal pid_name Name of the process receiving the signal sig_pid The PID of the process receiving the signal name Name of the probe point sig_name A string representation of the signal LINUX SystemTap Tapset Reference November 2021 probe::signal.force_segv.return 3stap probe::signal.force_segv.return Forcing send of SIGSEGV complete Synopsis signal.force_segv.return Values retstr Return value as a string name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.handle 3stap probe::signal.handle Signal handler being invoked Synopsis signal.handle Values ka_addr The address of the k_sigaction table associated with the signal sinfo The address of the siginfo table regs The address of the kernel-mode stack area (deprecated in SystemTap 2.1) sig The signal number that invoked the signal handler sig_code The si_code value of the siginfo signal name Name of the probe point sig_mode Indicates whether the signal was a user-mode or kernel-mode signal sig_name A string representation of the signal oldset_addr The address of the bitmask array of blocked signals (deprecated in SystemTap 2.1) LINUX SystemTap Tapset Reference November 2021 probe::signal.handle.return 3stap probe::signal.handle.return Signal handler invocation completed Synopsis signal.handle.return Values name Name of the probe point retstr Return value as a string Description (deprecated in SystemTap 2.1) LINUX SystemTap Tapset Reference November 2021 probe::signal.pending 3stap probe::signal.pending Examining pending signal Synopsis signal.pending Values sigset_add The address of the user-space signal set (sigset_t) name Name of the probe point sigset_size The size of the user-space signal set Description This probe is used to examine a set of signals pending for delivery to a specific thread. This normally occurs when the do_sigpending kernel function is executed. LINUX SystemTap Tapset Reference November 2021 probe::signal.pending.return 3stap probe::signal.pending.return Examination of pending signal completed Synopsis signal.pending.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2021 probe::signal.procmask 3stap probe::signal.procmask Examining or changing blocked signals Synopsis signal.procmask Values sigset The actual value to be set for sigset_t (correct?) sigset_addr The address of the signal set (sigset_t) to be implemented oldsigset_addr The old address of the signal set (sigset_t) how Indicates how to change the blocked signals; possible values are SIG_BLOCK=0 (for blocking signals), SIG_UNBLOCK=1 (for unblocking signals), and SIG_SETMASK=2 for setting the signal mask. name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.procmask.return 3stap probe::signal.procmask.return Examining or changing blocked signals completed Synopsis signal.procmask.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2021 probe::signal.send 3stap probe::signal.send Signal being sent to a process Synopsis signal.send Values shared Indicates whether the signal is shared by the thread group si_code Indicates the signal type send2queue Indicates whether the signal is sent to an existing sigqueue (deprecated in SystemTap 2.1) sig The number of the signal pid_name The name of the signal recipient sinfo The address of siginfo struct task A task handle to the signal recipient sig_name A string representation of the signal sig_pid The PID of the process receiving the signal name The name of the function used to send out the signal Context The signal's sender. LINUX SystemTap Tapset Reference November 2021 probe::signal.send.return 3stap probe::signal.send.return Signal being sent to a process completed (deprecated in SystemTap 2.1) Synopsis signal.send.return Values retstr The return value to either __group_send_sig_info, specific_send_sig_info, or send_sigqueue name The name of the function used to send out the signal send2queue Indicates whether the sent signal was sent to an existing sigqueue shared Indicates whether the sent signal is shared by the thread group. Context The signal's sender. (correct?) Description Possible __group_send_sig_info and specific_send_sig_info return values are as follows; 0 -- The signal is successfully sent to a process, which means that, (1) the signal was ignored by the receiving process, (2) this is a non-RT signal and the system already has one queued, and (3) the signal was successfully added to the sigqueue of the receiving process. -EAGAIN -- The sigqueue of the receiving process is overflowing, the signal was RT, and the signal was sent by a user using something other than kill. Possible send_group_sigqueue and send_sigqueue return values are as follows; 0 -- The signal was either successfully added into the sigqueue of the receiving process, or a SI_TIMER entry is already queued (in which case, the overrun count will be simply incremented). 1 -- The signal was ignored by the receiving process. -1 -- (send_sigqueue only) The task was marked exiting, allowing * posix_timer_event to redirect it to the group leader. LINUX SystemTap Tapset Reference November 2021 probe::signal.send_sig_queue 3stap probe::signal.send_sig_queue Queuing a signal to a process Synopsis signal.send_sig_queue Values pid_name Name of the process to which the signal is queued sig The queued signal sig_name A string representation of the signal sigqueue_addr The address of the signal queue sig_pid The PID of the process to which the signal is queued name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.send_sig_queue.return 3stap probe::signal.send_sig_queue.return Queuing a signal to a process completed Synopsis signal.send_sig_queue.return Values name Name of the probe point retstr Return value as a string LINUX SystemTap Tapset Reference November 2021 probe::signal.sys_tgkill 3stap probe::signal.sys_tgkill Sending kill signal to a thread group Synopsis signal.sys_tgkill Values sig The specific kill signal sent to the process tgid The thread group ID of the thread receiving the kill signal pid_name The name of the signal recipient sig_pid The PID of the thread receiving the kill signal name Name of the probe point sig_name A string representation of the signal task A task handle to the signal recipient Description The tgkill call is similar to tkill, except that it also allows the caller to specify the thread group ID of the thread to be signalled. This protects against TID reuse. LINUX SystemTap Tapset Reference November 2021 probe::signal.sys_tgkill.return 3stap probe::signal.sys_tgkill.return Sending kill signal to a thread group completed Synopsis signal.sys_tgkill.return Values retstr The return value to either __group_send_sig_info, name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.sys_tkill 3stap probe::signal.sys_tkill Sending a kill signal to a thread Synopsis signal.sys_tkill Values sig The specific signal sent to the process pid_name The name of the signal recipient task A task handle to the signal recipient sig_name A string representation of the signal sig_pid The PID of the process receiving the kill signal name Name of the probe point Description The tkill call is analogous to kill(2), except that it also allows a process within a specific thread group to be targeted. Such processes are targeted through their unique thread IDs (TID). LINUX SystemTap Tapset Reference November 2021 probe::signal.syskill 3stap probe::signal.syskill Sending kill signal to a process Synopsis signal.syskill Values task A task handle to the signal recipient sig_name A string representation of the signal name Name of the probe point sig_pid The PID of the process receiving the signal sig The specific signal sent to the process pid_name The name of the signal recipient LINUX SystemTap Tapset Reference November 2021 probe::signal.syskill.return 3stap probe::signal.syskill.return Sending kill signal completed Synopsis signal.syskill.return Values None LINUX SystemTap Tapset Reference November 2021 probe::signal.systkill.return 3stap probe::signal.systkill.return Sending kill signal to a thread completed Synopsis signal.systkill.return Values retstr The return value to either __group_send_sig_info, name Name of the probe point LINUX SystemTap Tapset Reference November 2021 probe::signal.wakeup 3stap probe::signal.wakeup Sleeping process being wakened for signal Synopsis signal.wakeup Values sig_pid The PID of the process to wake resume Indicates whether to wake up a task in a STOPPED or TRACED state state_mask A string representation indicating the mask of task states to wake. Possible values are TASK_INTERRUPTIBLE, TASK_STOPPED, TASK_TRACED, TASK_WAKEKILL, and TASK_INTERRUPTIBLE. pid_name Name of the process to wake Errno Tapset This set of functions is used to handle errno number values. It contains the following functions: LINUX SystemTap Tapset Reference November 2021 function::errno_str 3stap function::errno_str Symbolic string associated with error code Synopsis errno_str:string(err:long) Arguments err The error number received Description This function returns the symbolic string associated with the giver error code, such as ENOENT for the number 2, or E#3333 for an out-of-range value such as 3333. LINUX SystemTap Tapset Reference November 2021 function::return_str 3stap function::return_str Formats the return value as a string Synopsis return_str:string(format:long,ret:long) Arguments format Variable to determine return type base value ret Return value (typically $return) Description This function is used by the syscall tapset, and returns a string. Set format equal to 1 for a decimal, 2 for hex, 3 for octal. Note that this function is preferred over returnstr. LINUX SystemTap Tapset Reference November 2021 function::returnstr 3stap function::returnstr Formats the return value as a string Synopsis returnstr:string(format:long) Arguments format Variable to determine return type base value Description This function is used by the nd_syscall tapset, and returns a string. Set format equal to 1 for a decimal, 2 for hex, 3 for octal. Note that this function should only be used in dwarfless probes (i.e. 'kprobe.function(foo)'). Other probes should use return_str. LINUX SystemTap Tapset Reference November 2021 function::returnval 3stap function::returnval Possible return value of probed function Synopsis returnval:long() Arguments None Description Return the value of the register in which function values are typically returned. Can be used in probes where $return isn't available. This is only a guess of the actual return value and can be totally wrong. Normally only used in dwarfless probes. RLIMIT Tapset This set of functions is used to handle string which defines resource limits (RLIMIT_*) and returns corresponding number of resource limit. It contains the following functions: LINUX SystemTap Tapset Reference November 2021 function::rlimit_from_str 3stap function::rlimit_from_str Symbolic string associated with resource limit code Synopsis rlimit_from_str:long(lim_str:string) Arguments lim_str The string representation of limit Description This function returns the number associated with the given string, such as 0 for the string RLIMIT_CPU, or -1 for an out-of-range value. Device Tapset This set of functions is used to handle kernel and userspace device numbers. It contains the following functions: LINUX SystemTap Tapset Reference November 2021 function::MAJOR 3stap function::MAJOR Extract major device number from a kernel device number (kdev_t) Synopsis MAJOR:long(dev:long) Arguments dev Kernel device number to query. LINUX SystemTap Tapset Reference November 2021 function::MINOR 3stap function::MINOR Extract minor device number from a kernel device number (kdev_t) Synopsis MINOR:long(dev:long) Arguments dev Kernel device number to query. LINUX SystemTap Tapset Reference November 2021 function::MKDEV 3stap function::MKDEV Creates a value that can be compared to a kernel device number (kdev_t) Synopsis MKDEV:long(major:long,minor:long) Arguments major Intended major device number. minor Intended minor device number. LINUX SystemTap Tapset Reference November 2021 function::usrdev2kerndev 3stap function::usrdev2kerndev Converts a user-space device number into the format used in the kernel Synopsis usrdev2kerndev:long(dev:long) Arguments dev Device number in user-space format. Directory-entry (dentry) Tapset This family of functions is used to map kernel VFS directory entry pointers to file or full path names. LINUX SystemTap Tapset Reference November 2021 function::d_name 3stap function::d_name get the dirent name Synopsis d_name:string(dentry:long) Arguments dentry Pointer to dentry. Description Returns the dirent name (path basename). LINUX SystemTap Tapset Reference November 2021 function::d_path 3stap function::d_path get the full nameidata path Synopsis d_path:string(nd:long) Arguments nd Pointer to nameidata. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2021 function::fullpath_struct_file 3stap function::fullpath_struct_file get the full path Synopsis fullpath_struct_file:string(task:long,file:long) Arguments task task_struct pointer. file Pointer to struct file. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2021 function::fullpath_struct_nameidata 3stap function::fullpath_struct_nameidata get the full nameidata path Synopsis fullpath_struct_nameidata(nd:) Arguments nd Pointer to struct nameidata. Description Returns the full dirent name (full path to the root), like the kernel (and systemtap-tapset) d_path function, with a /. LINUX SystemTap Tapset Reference November 2021 function::fullpath_struct_path 3stap function::fullpath_struct_path get the full path Synopsis fullpath_struct_path:string(path:long) Arguments path Pointer to struct path. Description Returns the full dirent name (full path to the root), like the kernel d_path function. LINUX SystemTap Tapset Reference November 2021 function::inode_name 3stap function::inode_name get the inode name Synopsis inode_name:string(inode:long) Arguments inode Pointer to inode. Description Returns the first path basename associated with the given inode. LINUX SystemTap Tapset Reference November 2021 function::inode_path 3stap function::inode_path get the path to an inode Synopsis inode_path:string(inode:long) Arguments inode Pointer to inode. Description Returns the full path associated with the given inode. LINUX SystemTap Tapset Reference November 2021 function::real_mount 3stap function::real_mount get the 'struct mount' pointer Synopsis real_mount:long(vfsmnt:long) Arguments vfsmnt Pointer to 'struct vfsmount' Description Returns the 'struct mount' pointer value for a 'struct vfsmount' pointer. LINUX SystemTap Tapset Reference November 2021 function::reverse_path_walk 3stap function::reverse_path_walk get the full dirent path Synopsis reverse_path_walk:string(dentry:long) Arguments dentry Pointer to dentry. Description Returns the path name (partial path to mount point). LINUX SystemTap Tapset Reference November 2021 function::task_dentry_path 3stap function::task_dentry_path get the full dentry path Synopsis task_dentry_path:string(task:long,dentry:long,vfsmnt:long) Arguments task task_struct pointer. dentry direntry pointer. vfsmnt vfsmnt pointer. Description Returns the full dirent name (full path to the root), like the kernel d_path function. Logging Tapset This family of functions is used to send simple message strings to various destinations. LINUX SystemTap Tapset Reference November 2021 function::abort 3stap function::abort Immediately shutting down probing script. Synopsis abort() Arguments None Description This is similar to exit but immediately aborts the current probe handler instead of waiting for its completion. Probe handlers already running on *other* CPU cores, however, will still continue to their completion. Unlike error, this function call cannot be caught by 'try ... catch'. LINUX SystemTap Tapset Reference November 2021 function::assert 3stap function::assert evaluate assertion Synopsis 1) assert(expression:long) 2) assert(expression:long,msg:string) Arguments expression The expression to evaluate msg The formatted message string Description 1) This function checks the expression and aborts the current running probe if expression evaluates to zero. Useserror and may be caught by try{} catch{}. A default message will be displayed. 2) This function checks the expression and aborts the current running probe if expression evaluates to zero. Useserror and may be caught by try{} catch{}. The specified message will be displayed. LINUX SystemTap Tapset Reference November 2021 function::dump_stack 3stap function::dump_stack Send the kernel backtrace to the kernel trace buffer Synopsis dump_stack() Arguments None Description Print the current kernel backtrace to the kernel trace buffer. not be safely called from all kernel probe contexts, so is restricted to guru mode only. Under the hood, it calls the kernel C API function dump_stack directly. LINUX SystemTap Tapset Reference November 2021 function::error 3stap function::error Send an error message Synopsis error(msg:string) Arguments msg The formatted message string Description An implicit end-of-line is added. staprun prepends the string ERROR:. Sending an error message aborts the currently running probe. Depending on the MAXERRORS parameter, it may trigger an exit. LINUX SystemTap Tapset Reference November 2021 function::exit 3stap function::exit Start shutting down probing script. Synopsis exit() Arguments None Description This only enqueues a request to start shutting down the script. New probes will not fire (except end probes), but all currently running ones may complete their work. LINUX SystemTap Tapset Reference November 2021 function::ftrace 3stap function::ftrace Send a message to the ftrace ring-buffer Synopsis ftrace(msg:string) Arguments msg The formatted message string Description If the ftrace ring-buffer is configured & available, see /debugfs/tracing/trace for the message. Otherwise, the message may be quietly dropped. An implicit end-of-line is added. LINUX SystemTap Tapset Reference November 2021 function::log 3stap function::log Send a line to the common trace buffer Synopsis log(msg:string) Arguments msg The formatted message string Description This function logs data. log sends the message immediately to staprun and to the bulk transport (relayfs) if it is being used. If the last character given is not a newline, then one is added. This function is not as efficient as printf and should be used only for urgent messages. LINUX SystemTap Tapset Reference November 2021 function::printk 3stap function::printk Send a message to the kernel trace buffer Synopsis printk(level:long,msg:string) Arguments level an integer for the severity level (0=KERN_EMERG ... 7=KERN_DEBUG) msg The formatted message string Description Print a line of text to the kernel dmesg/console with the given severity. An implicit end-of-line is added. This function may not be safely called from all kernel probe contexts, so is restricted to guru mode only. LINUX SystemTap Tapset Reference November 2021 function::warn 3stap function::warn Send a line to the warning stream Synopsis warn(msg:string) Arguments msg The formatted message string Description This function sends a warning message immediately to staprun. It is also sent over the bulk transport (relayfs) if it is being used. If the last characater is not a newline, the one is added. Queue Statistics Tapset This family of functions is used to track performance of queuing systems. LINUX SystemTap Tapset Reference November 2021 function::qs_done 3stap function::qs_done Function to record finishing request Synopsis qs_done(qname:string) Arguments qname the name of the service that finished Description This function records that a request originally from the given queue has completed being serviced. LINUX SystemTap Tapset Reference November 2021 function::qs_run 3stap function::qs_run Function to record being moved from wait queue to being serviced Synopsis qs_run(qname:string) Arguments qname the name of the service being moved and started Description This function records that the previous enqueued request was removed from the given wait queue and is now being serviced. LINUX SystemTap Tapset Reference November 2021 function::qs_wait 3stap function::qs_wait Function to record enqueue requests Synopsis qs_wait(qname:string) Arguments qname the name of the queue requesting enqueue Description This function records that a new request was enqueued for the given queue name. LINUX SystemTap Tapset Reference November 2021 function::qsq_blocked 3stap function::qsq_blocked Returns the time reqest was on the wait queue Synopsis qsq_blocked:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the fraction of elapsed time during which one or more requests were on the wait queue. LINUX SystemTap Tapset Reference November 2021 function::qsq_print 3stap function::qsq_print Prints a line of statistics for the given queue Synopsis qsq_print(qname:string) Arguments qname queue name Description This function prints a line containing the following statistics for the given queue the queue name, the average rate of requests per second, the average wait queue length, the average time on the wait queue, the average time to service a request, the percentage of time the wait queue was used, and the percentage of time request was being serviced. LINUX SystemTap Tapset Reference November 2021 function::qsq_service_time 3stap function::qsq_service_time Amount of time per request service Synopsis qsq_service_time:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds required to service a request once it is removed from the wait queue. LINUX SystemTap Tapset Reference November 2021 function::qsq_start 3stap function::qsq_start Function to reset the stats for a queue Synopsis qsq_start(qname:string) Arguments qname the name of the service that finished Description This function resets the statistics counters for the given queue, and restarts tracking from the moment the function was called. This function is also used to create intialize a queue. LINUX SystemTap Tapset Reference November 2021 function::qsq_throughput 3stap function::qsq_throughput Number of requests served per unit time Synopsis qsq_throughput:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average number or requests served per microsecond. LINUX SystemTap Tapset Reference November 2021 function::qsq_utilization 3stap function::qsq_utilization Fraction of time that any request was being serviced Synopsis qsq_utilization:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds that at least one request was being serviced. LINUX SystemTap Tapset Reference November 2021 function::qsq_wait_queue_length 3stap function::qsq_wait_queue_length length of wait queue Synopsis qsq_wait_queue_length:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average length of the wait queue LINUX SystemTap Tapset Reference November 2021 function::qsq_wait_time 3stap function::qsq_wait_time Amount of time in queue + service per request Synopsis qsq_wait_time:long(qname:string,scale:long) Arguments qname queue name scale scale variable to take account for interval fraction Description This function returns the average time in microseconds that it took for a request to be serviced (qs_wait to qa_done). Random functions Tapset These functions deal with random number generation. LINUX SystemTap Tapset Reference November 2021 function::randint 3stap function::randint Return a random number between [0,n) Synopsis randint:long(n:long) Arguments n Number past upper limit of range, not larger than 2**20. String and data retrieving functions Tapset Functions to retrieve strings and other primitive types from the kernel or a user space programs based on addresses. All strings are of a maximum length given by MAXSTRINGLEN. LINUX SystemTap Tapset Reference November 2021 function::atomic_long_read 3stap function::atomic_long_read Retrieves an atomic long variable from kernel memory Synopsis atomic_long_read:long(addr:long) Arguments addr pointer to atomic long variable Description Safely perform the read of an atomic long variable. This will be a NOP on kernels that do not have ATOMIC_LONG_INIT set on the kernel config. LINUX SystemTap Tapset Reference November 2021 function::atomic_read 3stap function::atomic_read Retrieves an atomic variable from kernel memory Synopsis atomic_read:long(addr:long) Arguments addr pointer to atomic variable Description Safely perform the read of an atomic variable. LINUX SystemTap Tapset Reference November 2021 function::kernel_buffer_quoted 3stap function::kernel_buffer_quoted Retrieves and quotes buffer from kernel space Synopsis 1) kernel_buffer_quoted:string(addr:long,inlen:long) 2) kernel_buffer_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the kernel space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description 1) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to MAXSTRINGLEN characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes. 2) Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2021 function::kernel_buffer_quoted_error 3stap function::kernel_buffer_quoted_error Retrieves and quotes buffer from kernel space Synopsis kernel_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) Arguments addr the kernel space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given kernel space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when kernel space data is not accessible at the given address, an error is thrown. LINUX SystemTap Tapset Reference November 2021 function::kernel_char 3stap function::kernel_char Retrieves a char value stored in kernel memory Synopsis kernel_char:long(addr:long) Arguments addr The kernel address to retrieve the char from Description Returns the char value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2021 function::kernel_int 3stap function::kernel_int Retrieves an int value stored in kernel memory Synopsis kernel_int:long(addr:long) Arguments addr The kernel address to retrieve the int from Description Returns the int value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2021 function::kernel_long 3stap function::kernel_long Retrieves a long value stored in kernel memory Synopsis kernel_long:long(addr:long) Arguments addr The kernel address to retrieve the long from Description Returns the long value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2021 function::kernel_pointer 3stap function::kernel_pointer Retrieves a pointer value stored in kernel memory Synopsis kernel_pointer:long(addr:long) Arguments addr The kernel address to retrieve the pointer from Description Returns the pointer value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2021 function::kernel_short 3stap function::kernel_short Retrieves a short value stored in kernel memory Synopsis kernel_short:long(addr:long) Arguments addr The kernel address to retrieve the short from Description Returns the short value from a given kernel memory address. Reports an error when reading from the given address fails. LINUX SystemTap Tapset Reference November 2021 function::kernel_string 3stap function::kernel_string Retrieves string from kernel memory Synopsis 1) kernel_string:string(addr:long) 2) kernel_string:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns the null terminated C string from a given kernel memory address. Reports an error on string copy fault. 2) This function returns the null terminated C string from a given kernel memory address. Reports the given error message on string copy fault. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_n 3stap function::kernel_string_n Retrieves string of given length from kernel memory Synopsis kernel_string_n:string(addr:long,n:long) Arguments addr The kernel address to retrieve the string from n The maximum length of the string (if not null terminated) Description Returns the C string of a maximum given length from a given kernel memory address. Reports an error on string copy fault. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_quoted 3stap function::kernel_string_quoted Retrieves and quotes string from kernel memory Synopsis kernel_string_quoted:string(addr:long) Arguments addr the kernel memory address to retrieve the string from Description Returns the null terminated C string from a given kernel memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. If the kernel memory data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_quoted_utf16 3stap function::kernel_string_quoted_utf16 Quote given kernel UTF-16 string. Synopsis kernel_string_quoted_utf16:string(addr:long) Arguments addr The kernel address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-16 decoding as per kernel_string_utf16. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_quoted_utf32 3stap function::kernel_string_quoted_utf32 Quote given UTF-32 kernel string. Synopsis kernel_string_quoted_utf32:string(addr:long) Arguments addr The kernel address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-32 decoding as per kernel_string_utf32. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_utf16 3stap function::kernel_string_utf16 Retrieves UTF-16 string from kernel memory Synopsis 1) kernel_string_utf16:string(addr:long) 2) kernel_string_utf16:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given kernel memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given kernel memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2021 function::kernel_string_utf32 3stap function::kernel_string_utf32 Retrieves UTF-32 string from kernel memory Synopsis 1) kernel_string_utf32:string(addr:long) 2) kernel_string_utf32:string(addr:long,err_msg:string) Arguments addr The kernel address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given kernel memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given kernel memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2021 function::user_buffer_quoted 3stap function::user_buffer_quoted Retrieves and quotes buffer from user space Synopsis user_buffer_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when user space data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2021 function::user_buffer_quoted_error 3stap function::user_buffer_quoted_error Retrieves and quotes buffer from user space Synopsis user_buffer_quoted_error:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the buffer from inlen the exact length of the buffer to read outlen the maximum length of the output string Description Reads inlen characters of a buffer from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when user space data is not accessible at the given address, an error is thrown. LINUX SystemTap Tapset Reference November 2021 function::user_char 3stap function::user_char Retrieves a char value stored in user space Synopsis user_char:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_char_error 3stap function::user_char_error Retrieves a char value stored in user space Synopsis user_char_error:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_char_warn 3stap function::user_char_warn Retrieves a char value stored in user space Synopsis user_char_warn:long(addr:long) Arguments addr the user space address to retrieve the char from Description Returns the char value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2021 function::user_int 3stap function::user_int Retrieves an int value stored in user space Synopsis user_int:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_int16 3stap function::user_int16 Retrieves a 16-bit integer value stored in user space Synopsis user_int16:long(addr:long) Arguments addr the user space address to retrieve the 16-bit integer from Description Returns the 16-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_int16_error 3stap function::user_int16_error Retrieves a 16-bit integer value stored in user space Synopsis user_int16_error:long(addr:long) Arguments addr the user space address to retrieve the 16-bit integer from Description Returns the 16-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_int32 3stap function::user_int32 Retrieves a 32-bit integer value stored in user space Synopsis user_int32:long(addr:long) Arguments addr the user space address to retrieve the 32-bit integer from Description Returns the 32-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_int32_error 3stap function::user_int32_error Retrieves a 32-bit integer value stored in user space Synopsis user_int32_error:long(addr:long) Arguments addr the user space address to retrieve the 32-bit integer from Description Returns the 32-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_int64 3stap function::user_int64 Retrieves a 64-bit integer value stored in user space Synopsis user_int64:long(addr:long) Arguments addr the user space address to retrieve the 64-bit integer from Description Returns the 64-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_int64_error 3stap function::user_int64_error Retrieves a 64-bit integer value stored in user space Synopsis user_int64_error:long(addr:long) Arguments addr the user space address to retrieve the 64-bit integer from Description Returns the 64-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_int8 3stap function::user_int8 Retrieves a 8-bit integer value stored in user space Synopsis user_int8:long(addr:long) Arguments addr the user space address to retrieve the 8-bit integer from Description Returns the 8-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_int8_error 3stap function::user_int8_error Retrieves a 8-bit integer value stored in user space Synopsis user_int8_error:long(addr:long) Arguments addr the user space address to retrieve the 8-bit integer from Description Returns the 8-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_int_error 3stap function::user_int_error Retrieves an int value stored in user space Synopsis user_int_error:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_int_warn 3stap function::user_int_warn Retrieves an int value stored in user space Synopsis user_int_warn:long(addr:long) Arguments addr the user space address to retrieve the int from Description Returns the int value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2021 function::user_long 3stap function::user_long Retrieves a long value stored in user space Synopsis user_long:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. Returns zero when user space data is not accessible. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_long_error 3stap function::user_long_error Retrieves a long value stored in user space Synopsis user_long_error:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. If the user space data is not accessible, an error will occur. Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_long_warn 3stap function::user_long_warn Retrieves a long value stored in user space Synopsis user_long_warn:long(addr:long) Arguments addr the user space address to retrieve the long from Description Returns the long value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). Note that the size of the long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_short 3stap function::user_short Retrieves a short value stored in user space Synopsis user_short:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_short_error 3stap function::user_short_error Retrieves a short value stored in user space Synopsis user_short_error:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_short_warn 3stap function::user_short_warn Retrieves a short value stored in user space Synopsis user_short_warn:long(addr:long) Arguments addr the user space address to retrieve the short from Description Returns the short value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). LINUX SystemTap Tapset Reference November 2021 function::user_string 3stap function::user_string Retrieves string from user space Synopsis 1) user_string:string(addr:long) 2) user_string:string(addr:long,err_msg:string) Arguments addr the user space address to retrieve the string from err_msg the error message to return when data isn't available Description 1) Returns the null terminated C string from a given user space memory address. Reports an error on the rare cases when userspace data is not accessible. 2) Returns the null terminated C string from a given user space memory address. Reports the given error message on the rare cases when userspace data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_string_n 3stap function::user_string_n Retrieves string of given length from user space Synopsis 1) user_string_n:string(addr:long,n:long) 2) user_string_n:string(addr:long,n:long,err_msg:string) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) err_msg the error message to return when data isn't available Description 1) Returns the C string of a maximum given length from a given user space address. Reports an error on the rare cases when userspace data is not accessible at the given address. 2) Returns the C string of a maximum given length from a given user space address. Returns the given error message string on the rare cases when userspace data is not accessible at the given address. LINUX SystemTap Tapset Reference November 2021 function::user_string_n_nofault 3stap function::user_string_n_nofault Retrieves string of given length from user space Synopsis user_string_n_nofault(addr:long,n:long) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) Description Returns the C string of a maximum given length from a given user space address. Returns the empty string when userspace data is not accessible at the given address. LINUX SystemTap Tapset Reference November 2021 function::user_string_n_quoted 3stap function::user_string_n_quoted Retrieves and quotes string from user space Synopsis 1) user_string_n_quoted:string(addr:long,n:long) 2) user_string_n_quoted:string(addr:long,inlen:long,outlen:long) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) inlen the maximum length of the string to read (if not null terminated) outlen the maximum length of the output string Description 1) Returns up to n characters of a C string from the given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. 2) Reads up to inlen characters of a C string from the given user space memory address, and returns up to outlen characters, where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2021 function::user_string_n_warn 3stap function::user_string_n_warn Retrieves string from user space Synopsis 1) user_string_n_warn:string(addr:long,n:long) 2) user_string_n_warn:string(addr:long,n:long,warn_msg:string) Arguments addr the user space address to retrieve the string from n the maximum length of the string (if not null terminated) warn_msg the warning message to return when data isn't available Description 1) Returns up to n characters of a C string from a given user space memory address. Reports<unknown> on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. 2) Returns up to n characters of a C string from a given user space memory address. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. LINUX SystemTap Tapset Reference November 2021 function::user_string_nofault 3stap function::user_string_nofault Retrieves string from user space Synopsis user_string_nofault:string(addr:long) Arguments addr the user space address to retrieve the string from Description Returns the null terminated C string from a given user space memory address. Returns the empty string if userspace data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_string_quoted 3stap function::user_string_quoted Retrieves and quotes string from user space Synopsis user_string_quoted:string(addr:long) Arguments addr the user space address to retrieve the string from Description Returns the null terminated C string from a given user space memory address where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. On the rare cases when userspace data is not accessible at the given address, the address itself is returned as a string, without double quotes. LINUX SystemTap Tapset Reference November 2021 function::user_string_quoted_utf16 3stap function::user_string_quoted_utf16 Quote given user UTF-16 string. Synopsis user_string_quoted_utf16:string(addr:long) Arguments addr The user address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-16 decoding as per user_string_utf16. LINUX SystemTap Tapset Reference November 2021 function::user_string_quoted_utf32 3stap function::user_string_quoted_utf32 Quote given user UTF-32 string. Synopsis user_string_quoted_utf32:string(addr:long) Arguments addr The user address to retrieve the string from Description This function combines quoting as per string_quoted and UTF-32 decoding as per user_string_utf32. LINUX SystemTap Tapset Reference November 2021 function::user_string_utf16 3stap function::user_string_utf16 Retrieves UTF-16 string from user memory Synopsis 1) user_string_utf16:string(addr:long) 2) user_string_utf16:string(addr:long,err_msg:string) Arguments addr The user address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given user memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-16 string at a given user memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2021 function::user_string_utf32 3stap function::user_string_utf32 Retrieves UTF-32 string from user memory Synopsis 1) user_string_utf32:string(addr:long) 2) user_string_utf32:string(addr:long,err_msg:string) Arguments addr The user address to retrieve the string from err_msg The error message to return when data isn't available Description 1) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given user memory address. Reports an error on string copy fault or conversion error. 2) This function returns a null terminated UTF-8 string converted from the UTF-32 string at a given user memory address. Reports the given error message on string copy fault or conversion error. LINUX SystemTap Tapset Reference November 2021 function::user_string_warn 3stap function::user_string_warn Retrieves string from user space Synopsis 1) user_string_warn:string(addr:long) 2) user_string_warn:string(addr:long,warn_msg:string) Arguments addr the user space address to retrieve the string from warn_msg the warning message to return when data isn't available Description 1) Returns the null terminated C string from a given user space memory address. Reports "" on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. 2) Returns the null terminated C string from a given user space memory address. Reports the given warning message on the rare cases when userspace data is not accessible and warns (but does not abort) about the failure. LINUX SystemTap Tapset Reference November 2021 function::user_uint16 3stap function::user_uint16 Retrieves an unsigned 16-bit integer value stored in user space Synopsis user_uint16:long(addr:long) Arguments addr the user space address to retrieve the unsigned 16-bit integer from Description Returns the unsigned 16-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_uint16_error 3stap function::user_uint16_error Retrieves an unsigned 16-bit integer value stored in user space Synopsis user_uint16_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 16-bit integer from Description Returns the unsigned 16-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_uint32 3stap function::user_uint32 Retrieves an unsigned 32-bit integer value stored in user space Synopsis user_uint32:long(addr:long) Arguments addr the user space address to retrieve the unsigned 32-bit integer from Description Returns the unsigned 32-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_uint32_error 3stap function::user_uint32_error Retrieves an unsigned 32-bit integer value stored in user space Synopsis user_uint32_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 32-bit integer from Description Returns the unsigned 32-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_uint64 3stap function::user_uint64 Retrieves an unsigned 64-bit integer value stored in user space Synopsis user_uint64:long(addr:long) Arguments addr the user space address to retrieve the unsigned 64-bit integer from Description Returns the unsigned 64-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_uint64_error 3stap function::user_uint64_error Retrieves an unsigned 64-bit integer value stored in user space Synopsis user_uint64_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 64-bit integer from Description Returns the unsigned 64-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_uint8 3stap function::user_uint8 Retrieves a unsigned 8-bit integer value stored in user space Synopsis user_uint8:long(addr:long) Arguments addr the user space address to retrieve the unsigned 8-bit integer from Description Returns the unsigned 8-bit integer value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_uint8_error 3stap function::user_uint8_error Retrieves a unsigned 8-bit integer value stored in user space Synopsis user_uint8_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned 8-bit integer from Description Returns the unsigned 8-bit integer value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_ulong 3stap function::user_ulong Retrieves an unsigned long value stored in user space Synopsis user_ulong:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. Returns zero when user space data is not accessible. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_ulong_error 3stap function::user_ulong_error Retrieves a unsigned long value stored in user space Synopsis user_ulong_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. If the user space data is not accessible, an error will occur. Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_ulong_warn 3stap function::user_ulong_warn Retrieves an unsigned long value stored in user space Synopsis user_ulong_warn:long(addr:long) Arguments addr the user space address to retrieve the unsigned long from Description Returns the unsigned long value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). Note that the size of the unsigned long depends on the architecture of the current user space task (for those architectures that support both 64/32 bit compat tasks). LINUX SystemTap Tapset Reference November 2021 function::user_ushort 3stap function::user_ushort Retrieves an unsigned short value stored in user space Synopsis user_ushort:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. Returns zero when user space data is not accessible. LINUX SystemTap Tapset Reference November 2021 function::user_ushort_error 3stap function::user_ushort_error Retrieves an unsigned short value stored in user space Synopsis user_ushort_error:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. If the user space data is not accessible, an error will occur. LINUX SystemTap Tapset Reference November 2021 function::user_ushort_warn 3stap function::user_ushort_warn Retrieves an unsigned short value stored in user space Synopsis user_ushort_warn:long(addr:long) Arguments addr the user space address to retrieve the unsigned short from Description Returns the unsigned short value from a given user space address. Returns zero when user space data is not accessible and warns about the failure (but does not error). String and data writing functions Tapset The SystemTap guru mode can be used to test error handling in kernel code by simulating faults. The functions in the this tapset provide standard methods of writing to primitive types in the kernel's memory. All the functions in this tapset require the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_char 3stap function::set_kernel_char Writes a char value to kernel memory Synopsis set_kernel_char(addr:long,val:long) Arguments addr The kernel address to write the char to val The char which is to be written Description Writes the char value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_int 3stap function::set_kernel_int Writes an int value to kernel memory Synopsis set_kernel_int(addr:long,val:long) Arguments addr The kernel address to write the int to val The int which is to be written Description Writes the int value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_long 3stap function::set_kernel_long Writes a long value to kernel memory Synopsis set_kernel_long(addr:long,val:long) Arguments addr The kernel address to write the long to val The long which is to be written Description Writes the long value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_pointer 3stap function::set_kernel_pointer Writes a pointer value to kernel memory. Synopsis set_kernel_pointer(addr:long,val:long) Arguments addr The kernel address to write the pointer to val The pointer which is to be written Description Writes the pointer value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_short 3stap function::set_kernel_short Writes a short value to kernel memory Synopsis set_kernel_short(addr:long,val:long) Arguments addr The kernel address to write the short to val The short which is to be written Description Writes the short value to a given kernel memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_string 3stap function::set_kernel_string Writes a string to kernel memory Synopsis set_kernel_string(addr:long,val:string) Arguments addr The kernel address to write the string to val The string which is to be written Description Writes the given string to a given kernel memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_kernel_string_n 3stap function::set_kernel_string_n Writes a string of given length to kernel memory Synopsis set_kernel_string_n(addr:long,n:long,val:string) Arguments addr The kernel address to write the string to n The maximum length of the string val The string which is to be written Description Writes the given string up to a maximum given length to a given kernel memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_char 3stap function::set_user_char Writes a char value to user memory Synopsis set_user_char(addr:long,val:long) Arguments addr The user address to write the char to val The char which is to be written Description Writes the char value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_int 3stap function::set_user_int Writes an int value to user memory Synopsis set_user_int(addr:long,val:long) Arguments addr The user address to write the int to val The int which is to be written Description Writes the int value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_long 3stap function::set_user_long Writes a long value to user memory Synopsis set_user_long(addr:long,val:long) Arguments addr The user address to write the long to val The long which is to be written Description Writes the long value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_pointer 3stap function::set_user_pointer Writes a pointer value to user memory. Synopsis set_user_pointer(addr:long,val:long) Arguments addr The user address to write the pointer to val The pointer which is to be written Description Writes the pointer value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_short 3stap function::set_user_short Writes a short value to user memory Synopsis set_user_short(addr:long,val:long) Arguments addr The user address to write the short to val The short which is to be written Description Writes the short value to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_string 3stap function::set_user_string Writes a string to user memory Synopsis set_user_string(addr:long,val:string) Arguments addr The user address to write the string to val The string which is to be written Description Writes the given string to a given user memory address. Reports an error when writing to the given address fails. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_string_arg 3stap function::set_user_string_arg Writes a string to user memory. Synopsis set_user_string_arg(addr:long,val:string) Arguments addr The user address to write the string to val The string which is to be written Description Writes the given string to a given user memory address. Reports a warning on string copy fault. Requires the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::set_user_string_n 3stap function::set_user_string_n Writes a string of given length to user memory Synopsis set_user_string_n(addr:long,n:long,val:string) Arguments addr The user address to write the string to n The maximum length of the string val The string which is to be written Description Writes the given string up to a maximum given length to a given user memory address. Reports an error on string copy fault. Requires the use of guru mode (-g). Guru tapsets Functions to deliberately interfere with the system's behavior, in order to inject faults or improve observability. All the functions in this tapset require the use of guru mode (-g). LINUX SystemTap Tapset Reference November 2021 function::mdelay 3stap function::mdelay millisecond delay Synopsis mdelay(ms:long) Arguments ms Number of milliseconds to delay. Description This function inserts a multi-millisecond busy-delay into a probe handler. It requires guru mode. LINUX SystemTap Tapset Reference November 2021 function::panic 3stap function::panic trigger a panic Synopsis panic(msg:string) Arguments msg message to pass to kernel's panic function Description This function triggers an immediate panic of the running kernel with a user-specified panic message. It requires guru mode. LINUX SystemTap Tapset Reference November 2021 function::raise 3stap function::raise raise a signal in the current thread Synopsis raise(signo:long) Arguments signo signal number Description This function calls the kernel send_sig routine on the current thread, with the given raw unchecked signal number. It may raise an error if send_sig failed. It requires guru mode. LINUX SystemTap Tapset Reference November 2021 function::udelay 3stap function::udelay microsecond delay Synopsis udelay(us:long) Arguments us Number of microseconds to delay. Description This function inserts a multi-microsecond busy-delay into a probe handler. It requires guru mode. A collection of standard string functions Functions to get the length, a substring, getting at individual characters, string seaching, escaping, tokenizing, and converting strings to longs. LINUX SystemTap Tapset Reference November 2021 function::isdigit 3stap function::isdigit Checks for a digit Synopsis isdigit:long(str:string) Arguments str string to check Description Checks for a digit (0 through 9) as the first character of a string. Returns non-zero if true, and a zero if false. LINUX SystemTap Tapset Reference November 2021 function::isinstr 3stap function::isinstr Returns whether a string is a substring of another string Synopsis isinstr:long(s1:string,s2:string) Arguments s1 string to search in s2 substring to find Description This function returns 1 if string s1 contains s2, otherwise zero. LINUX SystemTap Tapset Reference November 2021 function::matched 3stap function::matched Return a given matched subexpression. Synopsis matched:string(n:long) Arguments n index to the subexpression to return. 0 corresponds to the entire regular expression. Description returns the content of the n'th subexpression of the last successful use of the =~ regex matching operator. Returns an empty string if the n'th subexpression was not matched (e.g. due to alternation). Throws an error if the last use of =~ was a failed match, or if fewer than n subexpressions are present in the original regexp. LINUX SystemTap Tapset Reference November 2021 function::matched_str 3stap function::matched_str Return the last matched string. Synopsis matched_str:string() Arguments None Description returns the string matched by the last successful use of the =~ regexp matching operator. Returns an error if the last use of =~ led to a failed match. LINUX SystemTap Tapset Reference November 2021 function::ngroups 3stap function::ngroups Number of subexpressions in the last match. Synopsis ngroups:long() Arguments None Description returns the number of subexpressions from the last successful use of the =~ regex matching operator. Note that this number includes subexpressions which are present in the regex but did not match any string; for example, given the regex a|(b), the subexpressions will count the group for (b) regardless of whether it matched a string or not. Throws an error if the last use of =~ was a failed match. LINUX SystemTap Tapset Reference November 2021 function::str_replace 3stap function::str_replace str_replace Replaces all instances of a substring with another Synopsis str_replace:string(prnt_str:string,srch_str:string,rplc_str:string) Arguments prnt_str the string to search and replace in srch_str the substring which is used to search in prnt_str string rplc_str the substring which is used to replace srch_str Description This function returns the given string with substrings replaced. LINUX SystemTap Tapset Reference November 2021 function::string_quoted 3stap function::string_quoted Quotes a given string Synopsis string_quoted:string(str:string) Arguments str The kernel address to retrieve the string from Description Returns the quoted string version of the given string, with characters where any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. Note that the string will be surrounded by double quotes. LINUX SystemTap Tapset Reference November 2021 function::stringat 3stap function::stringat Returns the char at a given position in the string Synopsis stringat:long(str:string,pos:long) Arguments str the string to fetch the character from pos the position to get the character from (first character is 0) Description This function returns the character at a given position in the string or zero if the string doesn't have as many characters. Reports an error if pos is out of bounds. LINUX SystemTap Tapset Reference November 2021 function::strlen 3stap function::strlen Returns the length of a string Synopsis strlen:long(s:string) Arguments s the string Description This function returns the length of the string, which can be zero up to MAXSTRINGLEN. LINUX SystemTap Tapset Reference November 2021 function::strpos 3stap function::strpos Returns location of a substring within another string Synopsis strpos:long(s1:string,s2:string) Arguments s1 string to search in s2 substring to find Description This function returns location of the first occurence of string s2 within s1, namely the return value is 0 in case s2 is a prefix of s1. If s2 is not a substring of s1, then the return value is -1. LINUX SystemTap Tapset Reference November 2021 function::strtol 3stap function::strtol strtol - Convert a string to a long Synopsis strtol:long(str:string,base:long) Arguments str string to convert base the base to use Description This function converts the string representation of a number to an integer. The base parameter indicates the number base to assume for the string (eg. 16 for hex, 8 for octal, 2 for binary). LINUX SystemTap Tapset Reference November 2021 function::substr 3stap function::substr Returns a substring Synopsis substr:string(str:string,start:long,length:long) Arguments str the string to take a substring from start starting position of the extracted string (first character is 0) length length of string to return Description Returns the substring of the given string at the given start position with the given length (or smaller if the length of the original string is less than start + length, or length is bigger than MAXSTRINGLEN). LINUX SystemTap Tapset Reference November 2021 function::text_str 3stap function::text_str Escape any non-printable chars in a string Synopsis text_str:string(input:string) Arguments input the string to escape Description This function accepts a string argument, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. LINUX SystemTap Tapset Reference November 2021 function::text_strn 3stap function::text_strn Escape any non-printable chars in a string Synopsis text_strn:string(input:string,len:long,quoted:long) Arguments input the string to escape len maximum length of string to return (0 implies MAXSTRINGLEN) quoted put double quotes around the string. If input string is truncated it will have ... after the second quote Description This function accepts a string of designated length, and any ASCII characters that are not printable are replaced by the corresponding escape sequence in the returned string. LINUX SystemTap Tapset Reference November 2021 function::tokenize 3stap function::tokenize Return the next non-empty token in a string Synopsis 1) tokenize:string(delim:string) 2) tokenize:string(input:string,delim:string) Arguments delim set of characters that delimit the tokens input string to tokenize. If empty, returns the next non-empty token in the string passed in the previous call to tokenize. Description 1) This function returns the next token in the string passed in the previous call to tokenize. If no delimiter is found, the entire remaining input string is * returned. It returns empty when no more tokens are available. 2) This function returns the next non-empty token in the given input string, where the tokens are delimited by characters in the delim string. If the input string is non-empty, it returns the first token. If the input string is empty, it returns the next token in the string passed in the previous call to tokenize. If no delimiter is found, the entire remaining input string is returned. It returns empty when no more tokens are available. Utility functions for using ansi control chars in logs Utility functions for logging using ansi control characters. This lets you manipulate the cursor position and character color output and attributes of log messages. LINUX SystemTap Tapset Reference November 2021 function::ansi_clear_screen 3stap function::ansi_clear_screen Move cursor to top left and clear screen. Synopsis ansi_clear_screen() Arguments None Description Sends ansi code for moving cursor to top left and then the ansi code for clearing the screen from the cursor position to the end. LINUX SystemTap Tapset Reference November 2021 function::ansi_cursor_hide 3stap function::ansi_cursor_hide Hides the cursor. Synopsis ansi_cursor_hide() Arguments None Description Sends ansi code for hiding the cursor. LINUX SystemTap Tapset Reference November 2021 function::ansi_cursor_move 3stap function::ansi_cursor_move Move cursor to new coordinates. Synopsis ansi_cursor_move(x:long,y:long) Arguments x Row to move the cursor to. y Colomn to move the cursor to. Description Sends ansi code for positioning the cursor at row x and column y. Coordinates start at one, (1,1) is the top-left corner. LINUX SystemTap Tapset Reference November 2021 function::ansi_cursor_restore 3stap function::ansi_cursor_restore Restores a previously saved cursor position. Synopsis ansi_cursor_restore() Arguments None Description Sends ansi code for restoring the current cursor position previously saved with ansi_cursor_save. LINUX SystemTap Tapset Reference November 2021 function::ansi_cursor_save 3stap function::ansi_cursor_save Saves the cursor position. Synopsis ansi_cursor_save() Arguments None Description Sends ansi code for saving the current cursor position. LINUX SystemTap Tapset Reference November 2021 function::ansi_cursor_show 3stap function::ansi_cursor_show Shows the cursor. Synopsis ansi_cursor_show() Arguments None Description Sends ansi code for showing the cursor. LINUX SystemTap Tapset Reference November 2021 function::ansi_new_line 3stap function::ansi_new_line Move cursor to new line. Synopsis ansi_new_line() Arguments None Description Sends ansi code new line. LINUX SystemTap Tapset Reference November 2021 function::ansi_reset_color 3stap function::ansi_reset_color Resets Select Graphic Rendition mode. Synopsis ansi_reset_color() Arguments None Description Sends ansi code to reset foreground, background and color attribute to default values. LINUX SystemTap Tapset Reference November 2021 function::ansi_set_color 3stap function::ansi_set_color Set the ansi Select Graphic Rendition mode. Synopsis 1) ansi_set_color(fg:long) 2) ansi_set_color(fg:long,bg:long) 3) ansi_set_color(fg:long,bg:long,attr:long) Arguments fg Foreground color to set. bg Background color to set. attr Color attribute to set. Description 1) Sends ansi code for Select Graphic Rendition mode for the given forground color. Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37). 2) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37) and the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47). 3) Sends ansi code for Select Graphic Rendition mode for the given forground color, Black (30), Blue (34), Green (32), Cyan (36), Red (31), Purple (35), Brown (33), Light Gray (37), the given background color, Black (40), Red (41), Green (42), Yellow (43), Blue (44), Magenta (45), Cyan (46), White (47) and the color attribute All attributes off (0), Intensity Bold (1), Underline Single (4), Blink Slow (5), Blink Rapid (6), Image Negative (7). LINUX SystemTap Tapset Reference November 2021 function::indent 3stap function::indent returns an amount of space to indent Synopsis indent:string(delta:long) Arguments delta the amount of space added/removed for each call Description This function returns a string with appropriate indentation. Call it with a small positive or matching negative delta. Unlike the thread_indent function, the indent does not track individual indent values on a per thread basis. LINUX SystemTap Tapset Reference November 2021 function::indent_depth 3stap function::indent_depth returns the global nested-depth Synopsis indent_depth:long(delta:long) Arguments delta the amount of depth added/removed for each call Description This function returns a number for appropriate indentation, similar to indent. Call it with a small positive or matching negative delta. Unlike the thread_indent_depth function, the indent does not track individual indent values on a per thread basis. LINUX SystemTap Tapset Reference November 2021 function::thread_indent 3stap function::thread_indent returns an amount of space with the current task information Synopsis thread_indent:string(delta:long) Arguments delta the amount of space added/removed for each call Description This function returns a string with appropriate indentation for a thread. Call it with a small positive or matching negative delta. If this is the real outermost, initial level of indentation, then the function resets the relative timestamp base to zero. The timestamp is as per provided by the __indent_timestamp function, which by default measures microseconds. LINUX SystemTap Tapset Reference November 2021 function::thread_indent_depth 3stap function::thread_indent_depth returns the nested-depth of the current task Synopsis thread_indent_depth:long(delta:long) Arguments delta the amount of depth added/removed for each call Description This function returns an integer equal to the nested function-call depth starting from the outermost initial level. This function is useful for saving space (consumed by whitespace) in traces with long nested function calls. Use this function in a similar fashion to thread_indent, i.e., in call-probe, use thread_indent_depth(1) and in return-probe, use thread_indent_depth(-1) SystemTap Translator Tapset This family of user-space probe points is used to probe the operation of the SystemTap translator (stap) and run command (staprun). The tapset includes probes to watch the various phases of SystemTap and SystemTap's management of instrumentation cache. It contains the following probe points: LINUX SystemTap Tapset Reference November 2021 probe::stap.cache_add_mod 3stap probe::stap.cache_add_mod Adding kernel instrumentation module to cache Synopsis stap.cache_add_mod Values source_path the path the .ko file is coming from (incl filename) dest_path the path the .ko file is going to (incl filename) Description Fires just before the file is actually moved. Note: if moving fails, cache_add_src and cache_add_nss will not fire. LINUX SystemTap Tapset Reference November 2021 probe::stap.cache_add_nss 3stap probe::stap.cache_add_nss Add NSS (Network Security Services) information to cache Synopsis stap.cache_add_nss Values source_path the path the .sgn file is coming from (incl filename) dest_path the path the .sgn file is coming from (incl filename) Description Fires just before the file is actually moved. Note: stap must compiled with NSS support; if moving the kernel module fails, this probe will not fire. LINUX SystemTap Tapset Reference November 2021 probe::stap.cache_add_src 3stap probe::stap.cache_add_src Adding C code translation to cache Synopsis stap.cache_add_src Values dest_path the path the .c file is going to (incl filename) source_path the path the .c file is coming from (incl filename) Description Fires just before the file is actually moved. Note: if moving the kernel module fails, this probe will not fire. LINUX SystemTap Tapset Reference November 2021 probe::stap.cache_clean 3stap probe::stap.cache_clean Removing file from stap cache Synopsis stap.cache_clean Values path the path to the .ko/.c file being removed Description Fires just before the call to unlink the module/source file. LINUX SystemTap Tapset Reference November 2021 probe::stap.cache_get 3stap probe::stap.cache_get Found item in stap cache Synopsis stap.cache_get Values module_path the path of the .ko kernel module file source_path the path of the .c source file Description Fires just before the return of get_from_cache, when the cache grab is successful. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass0 3stap probe::stap.pass0 Starting stap pass0 (parsing command line arguments) Synopsis stap.pass0 Values session the systemtap_session variable s Description pass0 fires after command line arguments have been parsed. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass0.end 3stap probe::stap.pass0.end Finished stap pass0 (parsing command line arguments) Synopsis stap.pass0.end Values session the systemtap_session variable s Description pass0.end fires just before the gettimeofday call for pass1. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass1.end 3stap probe::stap.pass1.end Finished stap pass1 (parsing scripts) Synopsis stap.pass1.end Values session the systemtap_session variable s Description pass1.end fires just before the jump to cleanup if s.last_pass = 1. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass1a 3stap probe::stap.pass1a Starting stap pass1 (parsing user script) Synopsis stap.pass1a Values session the systemtap_session variable s Description pass1a fires just after the call to gettimeofday, before the user script is parsed. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass1b 3stap probe::stap.pass1b Starting stap pass1 (parsing library scripts) Synopsis stap.pass1b Values session the systemtap_session variable s Description pass1b fires just before the library scripts are parsed. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass2 3stap probe::stap.pass2 Starting stap pass2 (elaboration) Synopsis stap.pass2 Values session the systemtap_session variable s Description pass2 fires just after the call to gettimeofday, just before the call to semantic_pass. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass2.end 3stap probe::stap.pass2.end Finished stap pass2 (elaboration) Synopsis stap.pass2.end Values session the systemtap_session variable s Description pass2.end fires just before the jump to cleanup if s.last_pass = 2 LINUX SystemTap Tapset Reference November 2021 probe::stap.pass3 3stap probe::stap.pass3 Starting stap pass3 (translation to C) Synopsis stap.pass3 Values session the systemtap_session variable s Description pass3 fires just after the call to gettimeofday, just before the call to translate_pass. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass3.end 3stap probe::stap.pass3.end Finished stap pass3 (translation to C) Synopsis stap.pass3.end Values session the systemtap_session variable s Description pass3.end fires just before the jump to cleanup if s.last_pass = 3 LINUX SystemTap Tapset Reference November 2021 probe::stap.pass4 3stap probe::stap.pass4 Starting stap pass4 (compile C code into kernel module) Synopsis stap.pass4 Values session the systemtap_session variable s Description pass4 fires just after the call to gettimeofday, just before the call to compile_pass. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass4.end 3stap probe::stap.pass4.end Finished stap pass4 (compile C code into kernel module) Synopsis stap.pass4.end Values session the systemtap_session variable s Description pass4.end fires just before the jump to cleanup if s.last_pass = 4 LINUX SystemTap Tapset Reference November 2021 probe::stap.pass5 3stap probe::stap.pass5 Starting stap pass5 (running the instrumentation) Synopsis stap.pass5 Values session the systemtap_session variable s Description pass5 fires just after the call to gettimeofday, just before the call to run_pass. LINUX SystemTap Tapset Reference November 2021 probe::stap.pass5.end 3stap probe::stap.pass5.end Finished stap pass5 (running the instrumentation) Synopsis stap.pass5.end Values session the systemtap_session variable s Description pass5.end fires just before the cleanup label LINUX SystemTap Tapset Reference November 2021 probe::stap.pass6 3stap probe::stap.pass6 Starting stap pass6 (cleanup) Synopsis stap.pass6 Values session the systemtap_session variable s Description pass6 fires just after the cleanup label, essentially the same spot as pass5.end LINUX SystemTap Tapset Reference November 2021 probe::stap.pass6.end 3stap probe::stap.pass6.end Finished stap pass6 (cleanup) Synopsis stap.pass6.end Values session the systemtap_session variable s Description pass6.end fires just before main's return. LINUX SystemTap Tapset Reference November 2021 probe::stap.system 3stap probe::stap.system Starting a command from stap Synopsis stap.system Values command the command string to be run by posix_spawn (as sh -c <str>) Description Fires at the entry of the stap_system command. LINUX SystemTap Tapset Reference November 2021 probe::stap.system.return 3stap probe::stap.system.return Finished a command from stap Synopsis stap.system.return Values ret a return code associated with running waitpid on the spawned process; a non-zero value indicates error Description Fires just before the return of the stap_system function, after waitpid. LINUX SystemTap Tapset Reference November 2021 probe::stap.system.spawn 3stap probe::stap.system.spawn stap spawned new process Synopsis stap.system.spawn Values pid the pid of the spawned process ret the return value from posix_spawn Description Fires just after the call to posix_spawn. LINUX SystemTap Tapset Reference November 2021 probe::stapio.receive_control_message 3stap probe::stapio.receive_control_message Received a control message Synopsis stapio.receive_control_message Values data a ptr to a binary blob of data sent as the control message type type of message being send; defined in runtime/transport/transport_msgs.h len the length (in bytes) of the data blob Description Fires just after a message was receieved and before it's processed. LINUX SystemTap Tapset Reference November 2021 probe::staprun.insert_module 3stap probe::staprun.insert_module Inserting SystemTap instrumentation module Synopsis staprun.insert_module Values path the full path to the .ko kernel module about to be inserted Description Fires just before the call to insert the module. LINUX SystemTap Tapset Reference November 2021 probe::staprun.remove_module 3stap probe::staprun.remove_module Removing SystemTap instrumentation module Synopsis staprun.remove_module Values name the stap module name to be removed (without the .ko extension) Description Fires just before the call to remove the module. LINUX SystemTap Tapset Reference November 2021 probe::staprun.send_control_message 3stap probe::staprun.send_control_message Sending a control message Synopsis staprun.send_control_message Values type type of message being send; defined in runtime/transport/transport_msgs.h len the length (in bytes) of the data blob data a ptr to a binary blob of data sent as the control message Description Fires at the beginning of the send_request function. Network File Storage Tapsets This family of probe points is used to probe network file storage functions and operations. LINUX SystemTap Tapset Reference November 2021 function::nfsderror 3stap function::nfsderror Convert nfsd error number into string Synopsis nfsderror:string(err:long) Arguments err errnum Description This function returns a string for the error number passed into the function. LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.readpage 3stap probe::nfs.aop.readpage NFS client synchronously reading a page Synopsis nfs.aop.readpage Values dev device identifier file file argument ino inode number rsize read size (in bytes) i_size file length in bytes i_flag file flags page_index offset within mapping, can used a page identifier and position identifier in the page frame sb_flag super block flags __page the address of page size number of pages to be read in this execution Description Read the page over, only fires when a previous async read operation failed LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.readpages 3stap probe::nfs.aop.readpages NFS client reading multiple pages Synopsis nfs.aop.readpages Values dev device identifier nr_pages number of pages attempted to read in this execution rsize read size (in bytes) ino inode number file filp argument rpages read size (in pages) size number of pages attempted to read in this execution Description Fires when in readahead way, read several pages once LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.release_page 3stap probe::nfs.aop.release_page NFS client releasing page Synopsis nfs.aop.release_page Values dev device identifier ino inode number page_index offset within mapping, can used a page identifier and position identifier in the page frame __page the address of page size release pages Description Fires when do a release operation on NFS. LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.set_page_dirty 3stap probe::nfs.aop.set_page_dirty NFS client marking page as dirty Synopsis nfs.aop.set_page_dirty Values __page the address of page page_flag page flags Description This probe attaches to the generic __set_page_dirty_nobuffers function. Thus, this probe is going to fire on many other file systems in addition to the NFS client. LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.write_begin 3stap probe::nfs.aop.write_begin NFS client begin to write data Synopsis nfs.aop.write_begin Values ino inode number dev device identifier __page the address of page to end address of this write operation page_index offset within mapping, can used a page identifier and position identifier in the page frame offset start address of this write operation size write bytes Description Occurs when write operation occurs on nfs. It prepare a page for writing, look for a request corresponding to the page. If there is one, and it belongs to another file, it flush it out before it tries to copy anything into the page. Also do the same if it finds a request from an existing dropped page LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.write_end 3stap probe::nfs.aop.write_end NFS client complete writing data Synopsis nfs.aop.write_end Values dev device identifier ino inode number i_size file length in bytes i_flag file flags page_index offset within mapping, can used a page identifier and position identifier in the page frame to end address of this write operation __page the address of page sb_flag super block flags size write bytes offset start address of this write operation Description Fires when do a write operation on nfs, often after prepare_write Update and possibly write a cached page of an NFS file. LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.writepage 3stap probe::nfs.aop.writepage NFS client writing a mapped page to the NFS server Synopsis nfs.aop.writepage Values i_state inode state flags size number of pages to be written in this execution wsize write size dev device identifier i_size file length in bytes ino inode number for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback __page the address of page sb_flag super block flags i_flag file flags page_index offset within mapping, can used a page identifier and position identifier in the page frame for_reclaim a flag of writeback_control, indicates if it's invoked from the page allocator Description The priority of wb is decided by the flags for_reclaim and for_kupdate. LINUX SystemTap Tapset Reference November 2021 probe::nfs.aop.writepages 3stap probe::nfs.aop.writepages NFS client writing several dirty pages to the NFS server Synopsis nfs.aop.writepages Values wsize write size nr_to_write number of pages attempted to be written in this execution size number of pages attempted to be written in this execution wpages write size (in pages) for_reclaim a flag of writeback_control, indicates if it's invoked from the page allocator ino inode number dev device identifier for_kupdate a flag of writeback_control, indicates if it's a kupdate writeback Description The priority of wb is decided by the flags for_reclaim and for_kupdate. LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.aio_read 3stap probe::nfs.fop.aio_read NFS client aio_read file operation Synopsis nfs.fop.aio_read Values cache_time when we started read-caching this inode cache_valid cache related bit mask flag pos current position of file buf the address of buf in user space file_name file name attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. parent_name parent dir name count read bytes dev device identifier ino inode number LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.aio_write 3stap probe::nfs.fop.aio_write NFS client aio_write file operation Synopsis nfs.fop.aio_write Values dev device identifier ino inode number count read bytes parent_name parent dir name buf the address of buf in user space pos offset of the file file_name file name LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.check_flags 3stap probe::nfs.fop.check_flags NFS client checking flag operation Synopsis nfs.fop.check_flags Values flag file flag LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.flush 3stap probe::nfs.fop.flush NFS client flush file operation Synopsis nfs.fop.flush Values mode file mode ndirty number of dirty page ino inode number dev device identifier LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.fsync 3stap probe::nfs.fop.fsync NFS client fsync operation Synopsis nfs.fop.fsync Values ndirty number of dirty pages dev device identifier ino inode number LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.llseek 3stap probe::nfs.fop.llseek NFS client llseek operation Synopsis nfs.fop.llseek Values ino inode number whence_str symbolic string representation of the position to seek from whence the position to seek from dev device identifier offset the offset of the file will be repositioned LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.lock 3stap probe::nfs.fop.lock NFS client file lock operation Synopsis nfs.fop.lock Values ino inode number dev device identifier fl_flag lock flags i_mode file type and access rights cmd cmd arguments fl_start starting offset of locked region fl_end ending offset of locked region fl_type lock type LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.mmap 3stap probe::nfs.fop.mmap NFS client mmap operation Synopsis nfs.fop.mmap Values parent_name parent dir name vm_flag vm flags vm_start start address within vm_mm ino inode number vm_end the first byte after end address within vm_mm dev device identifier file_name file name cache_valid cache related bit mask flag buf the address of buf in user space cache_time when we started read-caching this inode attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.open 3stap probe::nfs.fop.open NFS client file open operation Synopsis nfs.fop.open Values file_name file name ino inode number i_size file length in bytes dev device identifier flag file flag LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.read 3stap probe::nfs.fop.read NFS client read operation Synopsis nfs.fop.read Values devname block device name Description SystemTap uses the vfs.do_sync_read probe to implement this probe and as a result will get operations other than the NFS client read operations. LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.read_iter 3stap probe::nfs.fop.read_iter NFS client read_iter file operation Synopsis nfs.fop.read_iter Values count read bytes dev device identifier ino inode number cache_time when we started read-caching this inode cache_valid cache related bit mask flag pos current position of file file_name file name attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. parent_name parent dir name LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.release 3stap probe::nfs.fop.release NFS client release page operation Synopsis nfs.fop.release Values mode file mode dev device identifier ino inode number LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.sendfile 3stap probe::nfs.fop.sendfile NFS client send file operation Synopsis nfs.fop.sendfile Values dev device identifier ino inode number count read bytes ppos current position of file attrtimeo how long the cached information is assumed to be valid. We need to revalidate the cached attrs for this inode if jiffies - read_cache_jiffies > attrtimeo. cache_valid cache related bit mask flag cache_time when we started read-caching this inode LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.write 3stap probe::nfs.fop.write NFS client write operation Synopsis nfs.fop.write Values devname block device name Description SystemTap uses the vfs.do_sync_write probe to implement this probe and as a result will get operations other than the NFS client write operations. LINUX SystemTap Tapset Reference November 2021 probe::nfs.fop.write_iter 3stap probe::nfs.fop.write_iter NFS client write_iter file operation Synopsis nfs.fop.write_iter Values parent_name parent dir name pos offset of the file file_name file name dev device identifier ino inode number count read bytes LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.commit 3stap probe::nfs.proc.commit NFS client committing data on server Synopsis nfs.proc.commit Values bitmask0 V4 bitmask representing the set of attributes supported on this filesystem server_ip IP address of server prot transfer protocol version NFS version size read bytes in this execution bitmask1 V4 bitmask representing the set of attributes supported on this filesystem offset the file offset Description All the nfs.proc.commit kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. Fires when client writes the buffered data to disk. The buffered data is asynchronously written by client earlier. The commit function works in sync way. This probe point does not exist in NFSv2. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.commit_done 3stap probe::nfs.proc.commit_done NFS client response to a commit RPC task Synopsis nfs.proc.commit_done Values valid fattr->valid, indicates which fields are valid version NFS version timestamp V4 timestamp, which is used for lease renewal prot transfer protocol count number of bytes committed server_ip IP address of server status result of last operation Description Fires when a reply to a commit RPC task is received or some commit operation error occur (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.commit_setup 3stap probe::nfs.proc.commit_setup NFS client setting up a commit RPC task Synopsis nfs.proc.commit_setup Values version NFS version prot transfer protocol size bytes in this commit bitmask1 V4 bitmask representing the set of attributes supported on this filesystem offset the file offset bitmask0 V4 bitmask representing the set of attributes supported on this filesystem count bytes in this commit server_ip IP address of server Description The commit_setup function is used to setup a commit RPC task. Is is not doing the actual commit operation. It does not exist in NFSv2. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.create 3stap probe::nfs.proc.create NFS client creating file on server Synopsis nfs.proc.create Values prot transfer protocol filelen length of file name fh file handle of parent dir version NFS version (the function is used for all NFS version) filename file name flag indicates create mode (only for NFSv3 and NFSv4) server_ip IP address of server LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.handle_exception 3stap probe::nfs.proc.handle_exception NFS client handling an NFSv4 exception Synopsis nfs.proc.handle_exception Values errorcode indicates the type of error Description This is the error handling routine for processes for NFSv4. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.lookup 3stap probe::nfs.proc.lookup NFS client opens/searches a file on server Synopsis nfs.proc.lookup Values filename the name of file which client opens/searches on server bitmask1 V4 bitmask representing the set of attributes supported on this filesystem version NFS version prot transfer protocol server_ip IP address of server name_len the length of file name bitmask0 V4 bitmask representing the set of attributes supported on this filesystem LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.open 3stap probe::nfs.proc.open NFS client allocates file read/write context information Synopsis nfs.proc.open Values filename file name mode file mode version NFS version (the function is used for all NFS version) prot transfer protocol server_ip IP address of server flag file flag Description Allocate file read/write context information LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.read 3stap probe::nfs.proc.read NFS client synchronously reads file from server Synopsis nfs.proc.read Values prot transfer protocol version NFS version offset the file offset flags used to set task->tk_flags in rpc_init_task function count read bytes in this execution server_ip IP address of server Description All the nfs.proc.read kernel functions were removed in kernel commit 8e0969 in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.read_done 3stap probe::nfs.proc.read_done NFS client response to a read RPC task Synopsis nfs.proc.read_done Values timestamp V4 timestamp, which is used for lease renewal prot transfer protocol version NFS version status result of last operation count number of bytes read server_ip IP address of server Description Fires when a reply to a read RPC task is received or some read error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.read_setup 3stap probe::nfs.proc.read_setup NFS client setting up a read RPC task Synopsis nfs.proc.read_setup Values count read bytes in this execution server_ip IP address of server prot transfer protocol version NFS version size read bytes in this execution offset the file offset Description The read_setup function is used to setup a read RPC task. It is not doing the actual read operation. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.release 3stap probe::nfs.proc.release NFS client releases file read/write context information Synopsis nfs.proc.release Values server_ip IP address of server flag file flag mode file mode filename file name prot transfer protocol version NFS version (the function is used for all NFS version) Description Release file read/write context information LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.remove 3stap probe::nfs.proc.remove NFS client removes a file on server Synopsis nfs.proc.remove Values server_ip IP address of server filename file name version NFS version (the function is used for all NFS version) filelen length of file name prot transfer protocol fh file handle of parent dir LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.rename 3stap probe::nfs.proc.rename NFS client renames a file on server Synopsis nfs.proc.rename Values new_fh file handle of new parent dir old_fh file handle of old parent dir server_ip IP address of server new_name new file name old_name old file name prot transfer protocol version NFS version (the function is used for all NFS version) new_filelen length of new file name old_filelen length of old file name LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.rename_done 3stap probe::nfs.proc.rename_done NFS client response to a rename RPC task Synopsis nfs.proc.rename_done Values status result of last operation server_ip IP address of server new_fh file handle of new parent dir old_fh file handle of old parent dir timestamp V4 timestamp, which is used for lease renewal prot transfer protocol version NFS version Description Fires when a reply to a rename RPC task is received or some rename error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.rename_setup 3stap probe::nfs.proc.rename_setup NFS client setting up a rename RPC task Synopsis nfs.proc.rename_setup Values server_ip IP address of server fh file handle of parent dir prot transfer protocol version NFS version Description The rename_setup function is used to setup a rename RPC task. Is is not doing the actual rename operation. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.write 3stap probe::nfs.proc.write NFS client synchronously writes file to server Synopsis nfs.proc.write Values offset the file offset version NFS version prot transfer protocol size read bytes in this execution bitmask1 V4 bitmask representing the set of attributes supported on this filesystem server_ip IP address of server flags used to set task->tk_flags in rpc_init_task function bitmask0 V4 bitmask representing the set of attributes supported on this filesystem Description All the nfs.proc.write kernel functions were removed in kernel commit 200baa in December 2006, so these probes do not exist on Linux 2.6.21 and newer kernels. LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.write_done 3stap probe::nfs.proc.write_done NFS client response to a write RPC task Synopsis nfs.proc.write_done Values server_ip IP address of server count number of bytes written status result of last operation valid fattr->valid, indicates which fields are valid version NFS version timestamp V4 timestamp, which is used for lease renewal prot transfer protocol Description Fires when a reply to a write RPC task is received or some write error occurs (timeout or socket shutdown). LINUX SystemTap Tapset Reference November 2021 probe::nfs.proc.write_setup 3stap probe::nfs.proc.write_setup NFS client setting up a write RPC task Synopsis nfs.proc.write_setup Values count bytes written in this execution server_ip IP address of server bitmask0 V4 bitmask representing the set of attributes supported on this filesystem offset the file offset bitmask1 V4 bitmask representing the set of attributes supported on this filesystem size bytes written in this execution how used to set args.stable. The stable value could be: NFS_UNSTABLE,NFS_DATA_SYNC,NFS_FILE_SYNC (in nfs.proc3.write_setup and nfs.proc4.write_setup) version NFS version prot transfer protocol Description The write_setup function is used to setup a write RPC task. It is not doing the actual write operation. LINUX SystemTap Tapset Reference November 2021 probe::nfsd.close 3stap probe::nfsd.close NFS server closing a file for client Synopsis nfsd.close Values filename file name Description This probe point does not exist in kernels starting with 4.2. LINUX SystemTap Tapset Reference November 2021 probe::nfsd.commit 3stap probe::nfsd.commit NFS server committing all pending writes to stable storage Synopsis nfsd.commit Values flag indicates whether this execution is a sync operation offset the offset of file size read bytes client_ip the ip address of client fh file handle (the first part is the length of the file handle) count read bytes LINUX SystemTap Tapset Reference November 2021 probe::nfsd.create 3stap probe::nfsd.create NFS server creating a file(regular,dir,device,fifo) for client Synopsis nfsd.create Values filename file name client_ip the ip address of client fh file handle (the first part is the length of the file handle) type file type(regular,dir,device,fifo ...) filelen the length of file name iap_mode file access mode iap_valid Attribute flags Description Sometimes nfsd will call nfsd_create_v3 instead of this this probe point. LINUX SystemTap Tapset Reference November 2021 probe::nfsd.createv3 3stap probe::nfsd.createv3 NFS server creating a regular file or set file attributes for client Synopsis nfsd.createv3 Values iap_valid Attribute flags truncp trunp arguments, indicates if the file shouldbe truncate iap_mode file access mode filelen the length of file name client_ip the ip address of client fh file handle (the first part is the length of the file handle) verifier file attributes (atime,mtime,mode). It's used to reset file attributes for CREATE_EXCLUSIVE createmode create mode .The possible values could be: NFS3_CREATE_EXCLUSIVE, NFS3_CREATE_UNCHECKED, or NFS3_CREATE_GUARDED filename file name Description This probepoints is only called by nfsd3_proc_create and nfsd4_open when op_claim_type is NFS4_OPEN_CLAIM_NULL. LINUX SystemTap Tapset Reference November 2021 probe::nfsd.dispatch 3stap probe::nfsd.dispatch NFS server receives an operation from client Synopsis nfsd.dispatch Values xid transmission id client_ip the ip address of client prog program number version nfs version proto transfer protocol proc procedure number LINUX SystemTap Tapset Reference November 2021 probe::nfsd.lookup 3stap probe::nfsd.lookup NFS server opening or searching file for a file for client Synopsis nfsd.lookup Values filename file name client_ip the ip address of client fh file handle of parent dir(the first part is the length of the file handle) filelen the length of file name LINUX SystemTap Tapset Reference November 2021 probe::nfsd.open 3stap probe::nfsd.open NFS server opening a file for client Synopsis nfsd.open Values type type of file (regular file or dir) access indicates the type of open (read/write/commit/readdir...) fh file handle (the first part is the length of the file handle) client_ip the ip address of client LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.commit 3stap probe::nfsd.proc.commit NFS server performing a commit operation for client Synopsis nfsd.proc.commit Values fh file handle (the first part is the length of the file handle) size read bytes client_ip the ip address of client proto transfer protocol count read bytes gid requester's group id offset the offset of file version nfs version uid requester's user id LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.create 3stap probe::nfsd.proc.create NFS server creating a file for client Synopsis nfsd.proc.create Values gid requester's group id version nfs version uid requester's user id filelen length of file name proto transfer protocol filename file name fh file handle (the first part is the length of the file handle) client_ip the ip address of client LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.lookup 3stap probe::nfsd.proc.lookup NFS server opening or searching for a file for client Synopsis nfsd.proc.lookup Values fh file handle of parent dir (the first part is the length of the file handle) client_ip the ip address of client filename file name filelen the length of file name version nfs version uid requester's user id proto transfer protocol gid requester's group id LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.read 3stap probe::nfsd.proc.read NFS server reading file for client Synopsis nfsd.proc.read Values count read bytes offset the offset of file version nfs version vec struct kvec, includes buf address in kernel address and length of each buffer uid requester's user id vlen read blocks proto transfer protocol gid requester's group id fh file handle (the first part is the length of the file handle) size read bytes client_ip the ip address of client LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.remove 3stap probe::nfsd.proc.remove NFS server removing a file for client Synopsis nfsd.proc.remove Values gid requester's group id filelen length of file name uid requester's user id version nfs version proto transfer protocol filename file name client_ip the ip address of client fh file handle (the first part is the length of the file handle) LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.rename 3stap probe::nfsd.proc.rename NFS Server renaming a file for client Synopsis nfsd.proc.rename Values filename old file name tlen length of new file name tname new file name tfh file handler of new path fh file handler of old path client_ip the ip address of client uid requester's user id gid requester's group id flen length of old file name LINUX SystemTap Tapset Reference November 2021 probe::nfsd.proc.write 3stap probe::nfsd.proc.write NFS server writing data to file for client Synopsis nfsd.proc.write Values offset the offset of file uid requester's user id version nfs version vlen read blocks gid requester's group id count read bytes vec struct kvec, includes buf address in kernel address and length of each buffer proto transfer protocol stable argp->stable size read bytes client_ip the ip address of client fh file handle (the first part is the length of the file handle) LINUX SystemTap Tapset Reference November 2021 probe::nfsd.read 3stap probe::nfsd.read NFS server reading data from a file for client Synopsis nfsd.read Values file argument file, indicates if the file has been opened. offset the offset of file vlen read blocks fh file handle (the first part is the length of the file handle) client_ip the ip address of client size read bytes vec struct kvec, includes buf address in kernel address and length of each buffer count read bytes LINUX SystemTap Tapset Reference November 2021 probe::nfsd.rename 3stap probe::nfsd.rename NFS server renaming a file for client Synopsis nfsd.rename Values tlen length of new file name filename old file name fh file handler of old path client_ip the ip address of client tfh file handler of new path tname new file name flen length of old file name LINUX SystemTap Tapset Reference November 2021 probe::nfsd.unlink 3stap probe::nfsd.unlink NFS server removing a file or a directory for client Synopsis nfsd.unlink Values filelen the length of file name fh file handle (the first part is the length of the file handle) client_ip the ip address of client type file type (file or dir) filename file name LINUX SystemTap Tapset Reference November 2021 probe::nfsd.write 3stap probe::nfsd.write NFS server writing data to a file for client Synopsis nfsd.write Values file argument file, indicates if the file has been opened. offset the offset of file vlen read blocks fh file handle (the first part is the length of the file handle) size read bytes client_ip the ip address of client vec struct kvec, includes buf address in kernel address and length of each buffer count read bytes Speculation This family of functions provides the ability to speculative record information and then at a later point in the SystemTap script either commit the information or discard it. LINUX SystemTap Tapset Reference November 2021 function::commit 3stap function::commit Write out all output related to a speculation buffer Synopsis commit(id:long) Arguments id of the buffer to store the information in Description Output all the output for id in the order that it was entered into the speculative buffer by speculative. LINUX SystemTap Tapset Reference November 2021 function::discard 3stap function::discard Discard all output related to a speculation buffer Synopsis discard(id:long) Arguments id of the buffer to store the information in LINUX SystemTap Tapset Reference November 2021 function::speculate 3stap function::speculate Store a string for possible output later Synopsis speculate(id:long,output:string) Arguments id buffer id to store the information in output string to write out when commit occurs Description Add a string to the speculaive buffer for id. LINUX SystemTap Tapset Reference November 2021 function::speculation 3stap function::speculation Allocate a new id for speculative output Synopsis speculation:long() Arguments None Description The speculation function is called when a new speculation buffer is needed. It returns an id for the speculative output. There can be multiple threads being speculated on concurrently. This id is used by other speculation functions to keep the threads separate. JSON Tapset This family of probe points, functions, and macros is used to output data in JSON format. It contains the following probe points, functions, and macros: LINUX SystemTap Tapset Reference November 2021 function::json_add_array 3stap function::json_add_array Add an array Synopsis json_add_array:long(name:string,description:string) Arguments name The name of the array. description Array description. An empty string can be used. Description This function adds a array, setting up everything needed. Arrays contain other metrics, added with json_add_array_numeric_metric or json_add_array_string_metric. LINUX SystemTap Tapset Reference November 2021 function::json_add_array_numeric_metric 3stap function::json_add_array_numeric_metric Add a numeric metric to an array Synopsis json_add_array_numeric_metric:long(array_name:string,metric_name:string,metric_description:string,metric_units:string) Arguments array_name The name of the array the numeric metric should be added to. metric_name The name of the numeric metric. metric_description Metric description. An empty string can be used. metric_units Metic units. An empty string can be used. Description This function adds a numeric metric to an array, setting up everything needed. LINUX SystemTap Tapset Reference November 2021 function::json_add_array_string_metric 3stap function::json_add_array_string_metric Add a string metric to an array Synopsis json_add_array_string_metric:long(array_name:string,metric_name:string,metric_description:string) Arguments array_name The name of the array the string metric should be added to. metric_name The name of the string metric. metric_description Metric description. An empty string can be used. Description This function adds a string metric to an array, setting up everything needed. LINUX SystemTap Tapset Reference November 2021 function::json_add_numeric_metric 3stap function::json_add_numeric_metric Add a numeric metric Synopsis json_add_numeric_metric:long(name:string,description:string,units:string) Arguments name The name of the numeric metric. description Metric description. An empty string can be used. units Metic units. An empty string can be used. Description This function adds a numeric metric, setting up everything needed. LINUX SystemTap Tapset Reference November 2021 function::json_add_string_metric 3stap function::json_add_string_metric Add a string metric Synopsis json_add_string_metric:long(name:string,description:string) Arguments name The name of the string metric. description Metric description. An empty string can be used. Description This function adds a string metric, setting up everything needed. LINUX SystemTap Tapset Reference November 2021 function::json_set_prefix 3stap function::json_set_prefix Set the metric prefix. Synopsis json_set_prefix:long(prefix:string) Arguments prefix The prefix name to be used. Description This function sets the prefix, which is the name of the base of the metric hierarchy. Calling this function is optional, by default the name of the systemtap module is used. LINUX SystemTap Tapset Reference November 2021 macro::json_output_array_numeric_value 3stap macro::json_output_array_numeric_value Output a numeric value for metric in an array. Synopsis @json_output_array_numeric_value(array_name,array_index,metric_name,value) Arguments array_name The name of the array. array_index The array index (as a string) indicating where to store the numeric value. metric_name The name of the numeric metric. value The numeric value to output. Description The json_output_array_numeric_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's numeric value that is in an array. This metric should have been added with json_add_array_numeric_metric. LINUX SystemTap Tapset Reference November 2021 macro::json_output_array_string_value 3stap macro::json_output_array_string_value Output a string value for metric in an array. Synopsis @json_output_array_string_value(array_name,array_index,metric_name,value) Arguments array_name The name of the array. array_index The array index (as a string) indicating where to store the string value. metric_name The name of the string metric. value The string value to output. Description The json_output_array_string_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's string value that is in an array. This metric should have been added with json_add_array_string_metric. LINUX SystemTap Tapset Reference November 2021 macro::json_output_data_end 3stap macro::json_output_data_end End the json output. Synopsis @json_output_data_end() Arguments None Description The json_output_data_end macro is designed to be called from the 'json_data' probe from the user's script. It marks the end of the JSON output. LINUX SystemTap Tapset Reference November 2021 macro::json_output_data_start 3stap macro::json_output_data_start Start the json output. Synopsis @json_output_data_start() Arguments None Description The json_output_data_start macro is designed to be called from the 'json_data' probe from the user's script. It marks the start of the JSON output. LINUX SystemTap Tapset Reference November 2021 macro::json_output_numeric_value 3stap macro::json_output_numeric_value Output a numeric value. Synopsis @json_output_numeric_value(name,value) Arguments name The name of the numeric metric. value The numeric value to output. Description The json_output_numeric_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's numeric value. This metric should have been added with json_add_numeric_metric. LINUX SystemTap Tapset Reference November 2021 macro::json_output_string_value 3stap macro::json_output_string_value Output a string value. Synopsis @json_output_string_value(name,value) Arguments name The name of the string metric. value The string value to output. Description The json_output_string_value macro is designed to be called from the 'json_data' probe in the user's script to output a metric's string value. This metric should have been added with json_add_string_metric. LINUX SystemTap Tapset Reference November 2021 probe::json_data 3stap probe::json_data Fires whenever JSON data is wanted by a reader. Synopsis json_data Values None Context This probe fires when the JSON data is about to be read. This probe must gather up data and then call the following macros to output the data in JSON format. First, json_output_data_start() must be called. That call is followed by one or more of the following (one call for each data item): json_output_string_value(), json_output_numeric_value(), json_output_array_string_value(), and json_output_array_numeric_value(). Finally json_output_data_end() must be called. Output file switching Tapset Utility function to allow switching of output files. LINUX SystemTap Tapset Reference November 2021 function::switch_file 3stap function::switch_file switch to the next output file Synopsis switch_file() Arguments None Description This function sends a signal to the stapio process, commanding it to rotate to the next output file when output is sent to file(s). Floating point processing Tapset Utility functions to extract, convert, and perform arithmetic on IEEE-754 doubles. LINUX SystemTap Tapset Reference November 2021 function::fp32_to_fp64 3stap function::fp32_to_fp64 Convert fp32 to 64 bit floating point Synopsis fp32_to_fp64:long(input:long) Arguments input a long integer Description Convert from 32 bit floating point to a 64 bit softfloat floating point. LINUX SystemTap Tapset Reference November 2021 function::fp_add 3stap function::fp_add Addition between floating points Synopsis fp_add:long(add1:long,add2:long) Arguments add1 the 64 bit floating point addend add2 second 64 bit floating point addend Description Given addend 1 and addend 2, apply floating point adding LINUX SystemTap Tapset Reference November 2021 function::fp_eq 3stap function::fp_eq fp comparison function equal Synopsis fp_eq:long(infp1:long,infp2:long) Arguments infp1 the 64 bit floating point input infp2 second 64 bit floating point input Description check if infp1 is equal to infp2 LINUX SystemTap Tapset Reference November 2021 function::fp_le 3stap function::fp_le Check if first fp is less than or equal to Synopsis fp_le:long(infp1:long,infp2:long) Arguments infp1 the 64 bit floating point input infp2 second 64 bit floating point input Description check if infp1 is less than or equal to infp2 LINUX SystemTap Tapset Reference November 2021 function::fp_lt 3stap function::fp_lt fp comparison function less than Synopsis fp_lt:long(infp1:long,infp2:long) Arguments infp1 the 64 bit floating point input infp2 second 64 bit floating point input Description check if infp1 is strictly less than infp2 LINUX SystemTap Tapset Reference November 2021 function::fp_mul 3stap function::fp_mul Multiplication between floating points Synopsis fp_mul:long(mul1:long,mul2:long) Arguments mul1 the 64 bit floating point multiplicand mul2 64 bit floating point multiplier Description result is multiplicand times multiplier LINUX SystemTap Tapset Reference November 2021 function::fp_rem 3stap function::fp_rem Floating point division Synopsis fp_rem:long(div1:long,div2:long) Arguments div1 the 64 bit floating point dividend div2 64 bit floating point divisor Description result would be the remainder after divisor divides dividend LINUX SystemTap Tapset Reference November 2021 function::fp_sqrt 3stap function::fp_sqrt Floating point square root Synopsis fp_sqrt:long(infp:long) Arguments infp the 64 bit floating point input Description apply sqrt to input floating point LINUX SystemTap Tapset Reference November 2021 function::fp_sub 3stap function::fp_sub Subtraction between floating points Synopsis fp_sub:long(sub1:long,sub2:long) Arguments sub1 the 64 bit floating point minuend sub2 64 bit floating point subtrahend Description result would be minuend minus subtrahend LINUX SystemTap Tapset Reference November 2021 function::fp_to_long 3stap function::fp_to_long Convert fp to int64 Synopsis fp_to_long:long(infp:long,roundingMode:long,exact:long) Arguments infp the 64 bit floating point stored in long roundingMode through 0-6, which are round to nearest even, minMag, min, max, near maxMag and round to odd exact the boolean value, if exact is 1 than raising inexact exception, otherwise ignore the exception. Description Given a 64 bit floating point, which is stored in long, use the long value to initiate self-defined float64_t type, then apply the f64_to_i64 function to get the string representation. LINUX SystemTap Tapset Reference November 2021 function::fp_to_string 3stap function::fp_to_string Convert 64 bit floating point to string Synopsis fp_to_string:string(infp:long,precision:long) Arguments infp the 64 bit floating point stored in long precision number of digits after decimal point Description Given a 64 bit floating point, which is stored in long, use the long value to initiate self-defined float64_t type, then apply the f64_to_i64 function to get the string representation. LINUX SystemTap Tapset Reference November 2021 function::long_to_fp 3stap function::long_to_fp Convert long int to 64 bit floating point Synopsis long_to_fp:long(input:long) Arguments input a long integer Description Convert from a long to a 64 bit softfloat floating point. LINUX SystemTap Tapset Reference November 2021 function::string_to_fp 3stap function::string_to_fp Convert the given string into floating point Synopsis string_to_fp:long(input:string) Arguments input the string representation of a decimal number Description Given the string representation of a decimal number, convert it to a floating point which is stored in 64 bit long. Syscall Any Tapset This family of probe points is designed to provide low cost instrumentation for cases where only the syscall name (or number) and return value are required and there is no need for the detailed syscall argument values. They are restricted versions of syscall.* and syscall.*.return. LINUX SystemTap Tapset Reference November 2021 probe::syscall_any 3stap probe::syscall_any Record entry into a syscall Synopsis syscall_any Values syscall_nr number of the syscall name name of the syscall Context The process performing the syscall Description The syscall_any probe point is designed to be a low overhead that monitors all the syscalls entered via a kernel tracepoint. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments or argstr string representation of those arguments. This requires kernel 3.5+ and newer which have the kernel.trace(sys_enter) probe point. LINUX SystemTap Tapset Reference November 2021 probe::syscall_any.return 3stap probe::syscall_any.return Record exit from a syscall Synopsis syscall_any.return Values syscall_nr number of the syscall name name of the syscall retval return value of the syscall Context The process performing the syscall Description The syscall_any.return probe point is designed to be a low overhead that monitors all the syscalls returns via a kernel tracepoint. Because of the breadth of syscalls it monitors it provides no information about the syscall arguments, argstr string representation of those arguments, or a string interpretation of the return value (retval). This requires kernel 3.5+ and newer which have the kernel.trace(sys_exit) probe point. systemtap-4.6/doc/Tapset_Reference_Guide/en-US/images/000077500000000000000000000000001414446751200227205ustar00rootroot00000000000000systemtap-4.6/doc/Tapset_Reference_Guide/en-US/images/icon.svg000066400000000000000000003301271414446751200243770ustar00rootroot00000000000000 image/svg+xml id="path2858" /> systemtap-4.6/doc/Tapset_Reference_Guide/manpager.sh000077500000000000000000000100621414446751200226540ustar00rootroot00000000000000#!/bin/bash # This script builds the man pages from comments in tapsets. As such, the man page content # generated herein should be in sync with Tapset Reference Guide # NOTE: proposed newer version is being developed in doc/Systemtap_Tapset_Reference/manpager.sh # cleanup rm -rf man_pages # create working directory mkdir workingdir ; # create list of man pages to generate cat ../SystemTap_Tapset_Reference/tapsets.tmpl | grep ^\!Itapset > manpageus ; sed -i -e 's/\!Itapset\///g' manpageus ; # copy list of man pages into working directory for i in `cat manpageus` ; do cp ../../tapset/$i workingdir ; done ; # enter workdir cd workingdir ; # copy tapsetdescriptions, then clean for i in `cat ../manpageus`; do sed -n '/\/\/ /,/\/\/ <\/tapsetdescription>/ s/.*/&/w temp' < $i ; mv temp $i.tapsetdescription ; sed -i -e 's/\/\/ //g' $i.tapsetdescription ; sed -i -e 's/\/\/ <\/tapsetdescription>//g' $i.tapsetdescription ; sed -i -e 's/\/\///g' $i.tapsetdescription ; done # strip all tapset files to just comments; but all comments must be exactly 1 space before and after "*" for i in `cat ../manpageus` ; do sed -i -e 's/^ \*/ \*/g' $i; sed -i -e 's/^ \* / \* /g' $i; # mark the start of each probe entry (sub "/**") perl -p -i -e 's|^/\*\*| *probestart|g' $i; sed -i -e '/^ \*/!d' $i; # rename all tapsets (remove .stp filename suffix), create templates echo $i > tempname ; sed -i -e 's/.stp//g' tempname ; mv $i `cat tempname` ; mv tempname $i ; done ; # create man page headers for i in `ls | grep -v .stp | grep -v tapsetdescription` ; do #echo ".\" -*- nroff -*-" >> $i.template ; echo ".TH STAPPROBES."$i" 5" >> $i.template ; echo ".SH NAME" >> $i.template ; echo "stapprobes."`cat $i.stp`" \- systemtap "`cat $i.stp`" probe points" >> $i.template ; echo " " >> $i.template ; echo ".SH DESCRIPTION" >> $i.template ; cat $i.stp.tapsetdescription >> $i.template ; echo " " >> $i.template ; echo ".SH PROBES" >> $i.template ; echo ".br" >> $i.template ; echo ".P" >> $i.template ; echo ".TP" >> $i.template ; done # MOST IMPORTANT: clean man page body! sed -i -e 's/\.stp$//g' ../manpageus ; for i in `cat ../manpageus` ; do mv $i $i.tmp ; perl -p -i -e 's| \* sfunction|.BR|g' $i.tmp ; perl -p -i -e 's| \* probe|.BR|g' $i.tmp ; perl -p -i -e 's| -|\ninitlinehere|g' $i.tmp ; perl -p -i -e 's|^initlinehere([^\n]*)\n|$1\n |g' $i.tmp ; perl -p -i -e 's| \* @([^:]*):|\n.I $1:\n|g' $i.tmp ; perl -p -i -e 's| \* ([^:]*):|\n.BR $1:\n|g' $i.tmp ; perl -p -i -e 's| \* ||g' $i.tmp perl -p -i -e 's|\*probestart|\n.P\n.TP|g' $i.tmp ; perl -p -i -e 's|\.I|\n.I|g' $i.tmp ; # remove empty lines sed -i -e '/^$/d' $i.tmp ; sed -i -e '/^$/d' $i.tmp ; sed -i -e 's/^[ \t]*//g' $i.tmp ; # process Description headers perl -p -i -e 's|^\*[^/]|\n.BR Description:\n|g' $i.tmp ; perl -p -i -e 'undef $/;s|\.BR Description:\n\.BR|.BR|g' $i.tmp ; perl -p -i -e 'undef $/;s|\.BR Description:\n\*\/||g' $i.tmp ; # process Argument headers perl -p -i -e 'undef $/;s|\n\n.I|\n.br\n.BR Arguments:\n.I|g' $i.tmp ; # clean up formatting of arguments perl -p -i -e 's|^.I([^:]*:)|\n.br\n.br\n.IR$1\n.br\n\t|g' $i.tmp ; done # make tags work for i in `cat ../manpageus` ; do perl -p -i -e 's|]*>([^.])|$1\n|g' $i.tmp ; perl -p -i -e 's|<[^>]*>|\n.B |g' $i.tmp ; # the previous two statements create excess empty lines, remove some of them sed -i -e '/^$/d' $i.tmp ; # increase whitespace between some headers perl -p -i -e 's|^\.BR ([^:]*:)|\n.br\n.BR $1\n.br\n|g' $i.tmp done # generate footer template echo ".SH SEE ALSO" >> footer echo ".IR stap (1)," >> footer echo ".IR stapprobes (5)," >> footer for i in `cat ../manpageus`; do echo ".IR stapprobes."$i" (5)," >> footer ; done # assemble parts for i in `cat ../manpageus`; do cat $i.template >> stapprobes.$i.5 ; cat $i.tmp >> stapprobes.$i.5 ; cat footer >> stapprobes.$i.5 ; # final polish sed -i -e 's/\*\/$//g' stapprobes.$i.5 ; done # cleanup for i in `ls | grep -v 'stapprobes.*.5'` ; do rm $i ; done rm ../manpageus ; cd .. mv workingdir man_pages echo " " echo "Finished! man pages generated in ./man_pages." echo " " systemtap-4.6/doc/Tapset_Reference_Guide/publicanize.sh000077500000000000000000000117231414446751200233740ustar00rootroot00000000000000#!/bin/bash BASE=$(dirname $(readlink -f $0)) INFILE="$BASE/../SystemTap_Tapset_Reference/tapsets.xml" OUTFILE="$BASE/en-US/Tapset_Reference_Guide.xml" TMPFILE=`mktemp` || exit 1 TMPFILE2=`mktemp` || exit 1 do_help() { echo "publicanize.sh: usage: -?/--help this message -i/--input=file input file name -o/--output=file output file name " >&2 } #process optional arguments -i -o while [ "$#" -ne 0 ] do arg=`printf %s $1 | awk -F= '{print $1}'` val=`printf %s $1 | awk -F= '{print $2}'` shift if test -z "$val"; then local possibleval=$1 printf %s $1 "$possibleval" | grep ^- >/dev/null 2>&1 if test "$?" != "0"; then val=$possibleval if [ "$#" -ge 1 ]; then shift fi fi fi case "$arg" in -i|--input) INFILE=$val ;; -o|--output) OUTFILE=$val ;; -\?|--help) do_help exit 0 ;; *) echo "Unknown option \"$arg\". See opcontrol --help" >&2 exit 1 ;; esac done #copy the generated tapsets.xml cp $INFILE $TMPFILE || exit 1 #remove all excess whitespace sed -i -e 's/^\s*//g' $TMPFILE #remove marked Intro (starthere to endhere) sed -i -e '/starthere/,/endhere/d' $TMPFILE #re-convert programlisting tags sed -i -e 's/<programlisting>//g' $TMPFILE sed -i -e 's/<\/programlisting>/<\/programlisting>/g' $TMPFILE #replace header cat $TMPFILE | perl -p -e 'undef $/;s|\nSystemTap Tapset Reference Manual|\n|msg' | #perl -p -e 'undef $/;s|\n\nSystemTap\nHackers\n\n||msg' | #perl -p -e 'undef $/;s|\n2008-2009\nRed Hat, Inc. and others\n||msg' | #perl -p -e 'undef $/;s|\n\nThis documentation is free software\; you can redistribute\nit and/or modify it under the terms of the GNU General Public\nLicense version 2 as published by the Free Software Foundation.\n||msg' | #perl -p -e 'undef $/;s|\nThis program is distributed in the hope that it will be\nuseful, but WITHOUT ANY WARRANTY; without even the implied\nwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nSee the GNU General Public License for more details.\n||msg' | #perl -p -e 'undef $/;s|\nYou should have received a copy of the GNU General Public\nLicense along with this program; if not, write to the Free\nSoftware Foundation, Inc., 51 Franklin Street, Fifth Floor,\nBoston, MA 02110-1301 USA.\n||msg' | #perl -p -e 'undef $/;s|\nFor more details see the file COPYING in the source\ndistribution of Linux.\n\n\n||msg' | #perl -p -e 'undef $/;s|||msg' | perl -p -e 'undef $/;s|\n\n\n\n\n\n\n\n\n\n\n\n\n\n||msg' | perl -p -e 'undef $/;s|\n\n\n\n\n\n\n\n\n\n\n||msg' | perl -p -e 'undef $/;s|\n|\nfunction <\/emphasis>|msg' | perl -p -e 'undef $/;s|\n||msg' | perl -p -e 'undef $/;s|\n\n||msg' | perl -p -e 'undef $/;s|\n||msg' | perl -p -e 'undef $/;s|\n||msg' > $TMPFILE2 #replace Intro with my own perl -p -i -e 's||\n|g' $TMPFILE2 #for tapset name format section #perl -p -i -e 'undef $/;s|\nname:return \(parameters\)\ndefinition\n|\nfunction/probe tapset_name:return \(parameters\)\n|msg' $TMPFILE2 #perl -p -i -e 's|In this guide, tapset definitions appear in the following format:|In this guide, the synopsis of each tapset appears in the following format:|g' $TMPFILE2 #perl -p -i -e 's||\n|g' $TMPFILE2 # statements change synopsis tags, as they are still currently unfixed in publican-redhat sed -i -e 's/refsynopsisdiv>/refsect1>/g' $TMPFILE2 sed -i -e 's/refsect1>/refsection>/g' $TMPFILE2 sed -i -e 's/synopsis>/programlisting>\n/g' $TMPFILE2 # re-convert tags sed -i -e 's/<emphasis>//g' $TMPFILE2 sed -i -e 's/<\/emphasis>/<\/emphasis>/g' $TMPFILE2 sed -i -e 's/<remark>//g' $TMPFILE2 sed -i -e 's/<\/remark>/<\/remark>/g' $TMPFILE2 sed -i -e 's/<command>//g' $TMPFILE2 sed -i -e 's/<\/command>/<\/command>/g' $TMPFILE2 #useful marker script; moves content between starthere and endhere to file target #sed -n '/starthere/,/endhere/ s/.*/&/w target' $TMPFILE2 mv $TMPFILE2 $OUTFILE systemtap-4.6/doc/beginners/000077500000000000000000000000001414446751200161455ustar00rootroot00000000000000systemtap-4.6/doc/beginners/Makefile.am000066400000000000000000000043201414446751200202000ustar00rootroot00000000000000# Makefile.am --- automake input file for systemtap beginner's guide ## process this file with automake to produce Makefile.in DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SBG = SystemTap_Beginners_Guide BEGIN_INSTALL_DIR = $(DOC_INSTALL_DIR)/$(SBG) # INSTALL_PREBUILT_DOCS is automatically enabled by BUILD_DOCS if INSTALL_PREBUILT_DOCS all: $(SBG)/index.html # The beginner documents are now pre generated in the source tree # move all the relevant files into the build directory $(SBG).pdf: mkdir -p build/en-US/xml cp en-US/*.xml build/en-US/xml/ cp en-US/*.ent build/en-US/xml/ cp -R en-US/xsl build/en-US/ cp -R en-US/extras build/en-US/xml/ cp -R en-US/images build/en-US/xml/ cp -R en-US/Common_Content build/en-US/xml cp en-US/$(SBG).pdf $(builddir)/ # rely on the pdf generation to move all the necessary files into the right dirs $(SBG)/index.html: $(SBG).pdf if BUILD_DOCS if BUILD_HTMLDOCS xmlto --skip-validation \ -x build/en-US/xsl/html.xsl -o $(SBG) html build/en-US/xml/$(SBG).xml cp -R build/en-US/xml/images $(SBG) mkdir -p $(SBG)/Common_Content cp -R build/en-US/xml/Common_Content/images $(SBG)/Common_Content cp -R build/en-US/xml/Common_Content/css $(SBG)/Common_Content endif endif clean-local: rm -rf build/en-US/xml rm -rf build/en-US/xsl rm -f $(SBG).pdf rm -rf $(SBG) install-data-hook: $(MKDIR_P) $(DOC_INSTALL_DIR) $(INSTALL_DATA) $(SBG).pdf $(DOC_INSTALL_DIR) if BUILD_HTMLDOCS $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG) $(INSTALL_DATA) $(SBG)/*.html $(DOC_INSTALL_DIR)/$(SBG) $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/images $(INSTALL_DATA) $(SBG)/images/*.png $(SBG)/images/*.svg \ $(DOC_INSTALL_DIR)/$(SBG)/images $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images $(INSTALL_DATA) $(SBG)/Common_Content/css/*.css \ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css $(INSTALL_DATA) $(SBG)/Common_Content/images/*.png \ $(SBG)/Common_Content/images/*.svg \ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/xsl $(INSTALL_DATA) en-US/xsl/*.xsl \ $(DOC_INSTALL_DIR)/$(SBG)/xsl endif uninstall-local: rm -f $(DOC_INSTALL_DIR)/$(SBG).pdf rm -rf $(DOC_INSTALL_DIR)/$(SBG) endif systemtap-4.6/doc/beginners/Makefile.in000066400000000000000000000424761414446751200202270ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2020 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am --- automake input file for systemtap beginner's guide VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc/beginners ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) pkglibexecdir = @pkglibexecdir@ ACLOCAL = @ACLOCAL@ ALIGNEDNEW = @ALIGNEDNEW@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DYNINST_CXXFLAGS = @DYNINST_CXXFLAGS@ DYNINST_LDFLAGS = @DYNINST_LDFLAGS@ DYNINST_LIBS = @DYNINST_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ENABLE_NLS = @ENABLE_NLS@ EXEEXT = @EXEEXT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JAVADIR = @JAVADIR@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LOCALEDIR = @LOCALEDIR@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PIECFLAGS = @PIECFLAGS@ PIECXXFLAGS = @PIECXXFLAGS@ PIELDFLAGS = @PIELDFLAGS@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PYTHON = @PYTHON@ PYTHON3 = @PYTHON3@ PYTHON3_CONFIG = @PYTHON3_CONFIG@ PYTHON3_CPPFLAGS = @PYTHON3_CPPFLAGS@ PYTHON3_EXEC_PREFIX = @PYTHON3_EXEC_PREFIX@ PYTHON3_PLATFORM = @PYTHON3_PLATFORM@ PYTHON3_PREFIX = @PYTHON3_PREFIX@ PYTHON3_VERSION = @PYTHON3_VERSION@ PYTHON_CONFIG = @PYTHON_CONFIG@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_UNKNOWN = @PYTHON_UNKNOWN@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ READLINE_LIBS = @READLINE_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STAP_EXTRA_VERSION = @STAP_EXTRA_VERSION@ STAP_PREFIX = @STAP_PREFIX@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ avahi_CFLAGS = @avahi_CFLAGS@ avahi_LIBS = @avahi_LIBS@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ debuginfod_CFLAGS = @debuginfod_CFLAGS@ debuginfod_LIBS = @debuginfod_LIBS@ docdir = @docdir@ dracutbindir = @dracutbindir@ dracutstap = @dracutstap@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ have_dvips = @have_dvips@ have_fop = @have_fop@ have_jar = @have_jar@ have_javac = @have_javac@ have_latex = @have_latex@ have_ps2pdf = @have_ps2pdf@ have_xmlto = @have_xmlto@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ jsonc_CFLAGS = @jsonc_CFLAGS@ jsonc_LIBS = @jsonc_LIBS@ libcurl_CFLAGS = @libcurl_CFLAGS@ libcurl_LIBS = @libcurl_LIBS@ libdir = @libdir@ libexecdir = @libexecdir@ libmicrohttpd_CFLAGS = @libmicrohttpd_CFLAGS@ libmicrohttpd_LIBS = @libmicrohttpd_LIBS@ libvirt_CFLAGS = @libvirt_CFLAGS@ libvirt_LIBS = @libvirt_LIBS@ libxml2_CFLAGS = @libxml2_CFLAGS@ libxml2_LIBS = @libxml2_LIBS@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ ncurses_CFLAGS = @ncurses_CFLAGS@ ncurses_LIBS = @ncurses_LIBS@ nss_CFLAGS = @nss_CFLAGS@ nss_LIBS = @nss_LIBS@ oldincludedir = @oldincludedir@ openssl_CFLAGS = @openssl_CFLAGS@ openssl_LIBS = @openssl_LIBS@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ preferred_python = @preferred_python@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ py3execdir = @py3execdir@ pyexecdir = @pyexecdir@ python3dir = @python3dir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ selinux_CFLAGS = @selinux_CFLAGS@ selinux_LIBS = @selinux_LIBS@ sharedstatedir = @sharedstatedir@ sqlite3_CFLAGS = @sqlite3_CFLAGS@ sqlite3_LIBS = @sqlite3_LIBS@ srcdir = @srcdir@ stap_LIBS = @stap_LIBS@ stapbpf_LIBS = @stapbpf_LIBS@ staplog_CPPFLAGS = @staplog_CPPFLAGS@ staprun_LIBS = @staprun_LIBS@ subdirs = @subdirs@ support_section_question = @support_section_question@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ uuid_CFLAGS = @uuid_CFLAGS@ uuid_LIBS = @uuid_LIBS@ DOC_INSTALL_DIR = $(DESTDIR)$(datadir)/doc/systemtap SBG = SystemTap_Beginners_Guide BEGIN_INSTALL_DIR = $(DOC_INSTALL_DIR)/$(SBG) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/beginners/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/beginners/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @INSTALL_PREBUILT_DOCS_FALSE@uninstall-local: @INSTALL_PREBUILT_DOCS_FALSE@clean-local: @INSTALL_PREBUILT_DOCS_FALSE@install-data-hook: clean: clean-am clean-am: clean-generic clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-data-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ cscopelist-am ctags-am distclean distclean-generic dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile # INSTALL_PREBUILT_DOCS is automatically enabled by BUILD_DOCS @INSTALL_PREBUILT_DOCS_TRUE@all: $(SBG)/index.html # The beginner documents are now pre generated in the source tree # move all the relevant files into the build directory @INSTALL_PREBUILT_DOCS_TRUE@$(SBG).pdf: @INSTALL_PREBUILT_DOCS_TRUE@ mkdir -p build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/*.xml build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/*.ent build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/xsl build/en-US/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/extras build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/images build/en-US/xml/ @INSTALL_PREBUILT_DOCS_TRUE@ cp -R en-US/Common_Content build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ cp en-US/$(SBG).pdf $(builddir)/ # rely on the pdf generation to move all the necessary files into the right dirs @INSTALL_PREBUILT_DOCS_TRUE@$(SBG)/index.html: $(SBG).pdf @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ xmlto --skip-validation \ @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ -x build/en-US/xsl/html.xsl -o $(SBG) html build/en-US/xml/$(SBG).xml @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/images $(SBG) @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ mkdir -p $(SBG)/Common_Content @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/Common_Content/images $(SBG)/Common_Content @BUILD_DOCS_TRUE@@BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ cp -R build/en-US/xml/Common_Content/css $(SBG)/Common_Content @INSTALL_PREBUILT_DOCS_TRUE@clean-local: @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf build/en-US/xml @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf build/en-US/xsl @INSTALL_PREBUILT_DOCS_TRUE@ rm -f $(SBG).pdf @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf $(SBG) @INSTALL_PREBUILT_DOCS_TRUE@install-data-hook: @INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR) @INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG).pdf $(DOC_INSTALL_DIR) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/*.html $(DOC_INSTALL_DIR)/$(SBG) @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/images/*.png $(SBG)/images/*.svg \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/Common_Content/css/*.css \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/css @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) $(SBG)/Common_Content/images/*.png \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(SBG)/Common_Content/images/*.svg \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/Common_Content/images @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(MKDIR_P) $(DOC_INSTALL_DIR)/$(SBG)/xsl @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(INSTALL_DATA) en-US/xsl/*.xsl \ @BUILD_HTMLDOCS_TRUE@@INSTALL_PREBUILT_DOCS_TRUE@ $(DOC_INSTALL_DIR)/$(SBG)/xsl @INSTALL_PREBUILT_DOCS_TRUE@uninstall-local: @INSTALL_PREBUILT_DOCS_TRUE@ rm -f $(DOC_INSTALL_DIR)/$(SBG).pdf @INSTALL_PREBUILT_DOCS_TRUE@ rm -rf $(DOC_INSTALL_DIR)/$(SBG) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: systemtap-4.6/doc/langref.tex000066400000000000000000003317411414446751200163420ustar00rootroot00000000000000% SystemTap Language Reference \documentclass[twoside,english]{article} \usepackage{geometry} \geometry{verbose,letterpaper,tmargin=1.5in,bmargin=1.5in,lmargin=1in,rmargin=1in} \usepackage{fancyhdr} \pagestyle{fancy} \usepackage{array} \usepackage{varioref} \usepackage{float} \usepackage{makeidx} \usepackage{verbatim} \usepackage{url} \makeindex \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. \newcommand{\noun}[1]{\textsc{#1}} %% Bold symbol macro for standard LaTeX users %\providecommand{\boldsymbol}[1]{\mbox{\boldmath $#1$}} %% Because html converters don't know tabularnewline \providecommand{\tabularnewline}{\\} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. \setlength{\parindent}{0pt} %\setlength{\parskip}{3pt plus 2pt minus 1pt} \setlength{\parskip}{5pt} % % this makes list spacing much better. % \newenvironment{my_itemize}{ \begin{itemize} \setlength{\itemsep}{1pt} \setlength{\parskip}{0pt} \setlength{\parsep}{0pt}}{\end{itemize} } \newenvironment{vindent} {\begin{list}{}{\setlength{\listparindent}{6pt}} \item[]} {\end{list}} \usepackage[english]{babel} \makeatother \begin{document} \title{SystemTap Language Reference} \maketitle \newpage{} This document was derived from other documents contributed to the SystemTap project by employees of Red Hat, IBM and Intel.\newline Copyright \copyright\space 2007-2013 Red Hat Inc.\newline Copyright \copyright\space 2007-2009 IBM Corp.\newline Copyright \copyright\space 2007 Intel Corporation.\newline Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.\newline The GNU Free Documentation License is available from \url{http://www.gnu.org/licenses/fdl.html} or by writing to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. \newpage{} \tableofcontents{} % \listoftables \newpage{} \section{SystemTap overview\label{sec:SystemTap-Overview}} \subsection{About this guide} This guide is a comprehensive reference of SystemTap's language constructs and syntax. The contents borrow heavily from existing SystemTap documentation found in manual pages and the tutorial. The presentation of information here provides the reader with a single place to find language syntax and recommended usage. In order to successfully use this guide, you should be familiar with the general theory and operation of SystemTap. If you are new to SystemTap, you will find the tutorial to be an excellent place to start learning. For detailed information about tapsets, see the manual pages provided with the distribution. For information about the entire collection of SystemTap reference material, see Section~\ref{sec:For-Further-Reference} \subsection{Reasons to use SystemTap} SystemTap provides infrastructure to simplify the gathering of information about a running Linux kernel so that it may be further analyzed. This analysis assists in identifying the underlying cause of a performance or functional problem. SystemTap was designed to eliminate the need for a developer to go through the tedious instrument, recompile, install, and reboot sequence normally required to collect this kind of data. To do this, it provides a simple command-line interface and scripting language for writing instrumentation for both kernel and user space. With SystemTap, developers, system administrators, and users can easily write scripts that gather and manipulate system data that is otherwise unavailable from standard Linux tools. Users of SystemTap will find it to be a significant improvement over older methods. \subsection{Event-action language} \index{language} SystemTap's language is strictly typed, declaration free, procedural, and inspired by dtrace and awk. Source code points or events in the kernel are associated with handlers, which are subroutines that are executed synchronously. These probes are conceptually similar to \char`\"{}breakpoint command lists\char`\"{} in the GDB debugger. There are two main outermost constructs: probes and functions. Within these, statements and expressions use C-like operator syntax and precedence. \subsection{Sample SystemTap scripts} \index{example scripts} Following are some example scripts that illustrate the basic operation of SystemTap. For more examples, see the examples/small\_demos/ directory in the source directory, the SystemTap wiki at \url{http://sourceware.org/systemtap/wiki/HomePage}, or the SystemTap War Stories at \url{http://sourceware.org/systemtap/wiki/WarStories} page. \subsubsection{Basic SystemTap syntax and control structures} The following code examples demonstrate SystemTap syntax and control structures. \begin{vindent} \begin{verbatim} global odds, evens probe begin { # "no" and "ne" are local integers for (i = 0; i < 10; i++) { if (i % 2) odds [no++] = i else evens [ne++] = i } delete odds[2] delete evens[3] exit() } probe end { foreach (x+ in odds) printf ("odds[%d] = %d", x, odds[x]) foreach (x in evens-) printf ("evens[%d] = %d", x, evens[x]) } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} odds[0] = 1 odds[1] = 3 odds[3] = 7 odds[4] = 9 evens[4] = 8 evens[2] = 4 evens[1] = 2 evens[0] = 0 \end{verbatim} \end{vindent} Note that all variable types are inferred, and that all locals and globals are initialized. Integers are set to 0 and strings are set to the empty string. \subsubsection{Primes between 0 and 49} \begin{vindent} \begin{verbatim} function isprime (x) { if (x < 2) return 0 for (i = 2; i < x; i++) { if (x % i == 0) return 0 if (i * i > x) break } return 1 } probe begin { for (i = 0; i < 50; i++) if (isprime (i)) printf("%d\n", i) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 \end{verbatim} \end{vindent} \subsubsection{Recursive functions} \index{recursion} \begin{vindent} \begin{verbatim} function fibonacci(i) { if (i < 1) error ("bad number") if (i == 1) return 1 if (i == 2) return 2 return fibonacci (i-1) + fibonacci (i-2) } probe begin { printf ("11th fibonacci number: %d", fibonacci (11)) exit () } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 11th fibonacci number: 118 \end{verbatim} \end{vindent} Any larger number input to the function may exceed the MAXACTION or MAXNESTING limits, which will be caught at run time and result in an error. For more about limits see Section~\ref{sub:SystemTap-safety}. \newpage{} \subsection{The stap command} \index{stap} The stap program is the front-end to the SystemTap tool. It accepts probing instructions written in its scripting language, translates those instructions into C code, compiles this C code, and loads the resulting kernel module into a running Linux kernel to perform the requested system trace or probe functions. You can supply the script in a named file, from standard input, or from the command line. The SystemTap script runs until one of the following conditions occurs: \begin{itemize} \item The user interrupts the script with a CTRL-C. \item The script executes the exit() function. \item The script encounters a sufficient number of soft errors. \item The monitored command started with the stap program's \texttt{\textbf{-c}} option exits. \end{itemize} The stap command does the following: \begin{itemize} \item Translates the script \item Generates and compiles a kernel module \item Inserts the module; output to stap's stdout \item CTRL-C unloads the module and terminates stap \end{itemize} For a full list of options to the stap command, see the stap(1) manual page. \subsection{Safety and security\label{sub:SystemTap-safety}} \index{limits} SystemTap is an administrative tool. It exposes kernel internal data structures and potentially private user information. It requires root privileges to actually run the kernel objects it builds using the \textbf{sudo} command, applied to the \textbf{staprun} program. staprun is a part of the SystemTap package, dedicated to module loading and unloading and kernel-to-user data transfer. Since staprun does not perform any additional security checks on the kernel objects it is given, do not give elevated privileges via sudo to untrusted users. The translator asserts certain safety constraints. \index{constraints}It ensures that no handler routine can run for too long, allocate memory, perform unsafe operations, or unintentionally interfere with the kernel. Use of script global variables is locked to protect against manipulation by concurrent probe handlers. Use of \emph{guru mode} constructs such as embedded C (see Section~\ref{sub:Embedded-C}) can violate these constraints, leading to a kernel crash or data corruption. The resource use limits are set by macros in the generated C code. These may be overridden with the -D flag. The following list describes a selection of these macros: \textbf{MAXNESTING} -- The maximum number of recursive function call levels. The default is 10. \textbf{MAXSTRINGLEN} -- The maximum length of strings. The default is 256 bytes for 32 bit machines and 512 bytes for all other machines. \textbf{MAXTRYLOCK} -- The maximum number of iterations to wait for locks on global variables before declaring possible deadlock and skipping the probe. The default is 1000. \textbf{MAXACTION} -- The maximum number of statements to execute during any single probe hit. The default is 1000. \textbf{MAXMAPENTRIES} -- The maximum number of rows in an array if the array size is not specified explicitly when declared. The default is 2048. \textbf{MAXERRORS} -- The maximum number of soft errors before an exit is triggered. The default is 0. \textbf{MAXSKIPPED} -- The maximum number of skipped reentrant probes before an exit is triggered. The default is 100. \textbf{MINSTACKSPACE} -- The minimum number of free kernel stack bytes required in order to run a probe handler. This number should be large enough for the probe handler's own needs, plus a safety margin. The default is 1024. If something goes wrong with stap or staprun after a probe has started running, you may safely kill both user processes, and remove the active probe kernel module with the rmmod command. Any pending trace messages may be lost. \section{Types of SystemTap scripts\label{sec:Types-of-SystemTap}} \subsection{Probe scripts} Probe scripts are analogous to programs; these scripts identify probe points and associated handlers. \subsection{Tapset scripts} Tapset scripts are libraries of probe aliases and auxiliary functions. The /usr/share/systemtap/tapset directory contains tapset scripts. While these scripts look like regular SystemTap scripts, they cannot be run directly. \section{Components of a SystemTap script} The main construct in the scripting language identifies probes. Probes associate abstract events with a statement block, or probe handler, that is to be executed when any of those events occur. The following example shows how to trace entry and exit from a function using two probes. \begin{vindent} \begin{verbatim} probe kernel.function("sys_mkdir").call { log ("enter") } probe kernel.function("sys_mkdir").return { log ("exit") } \end{verbatim} \end{vindent} To list the probe-able functions in the kernel, use the listing option (\texttt{\textbf{-l}}). For example: \begin{vindent} \begin{verbatim} $ stap -l 'kernel.function("*")' | sort \end{verbatim} \end{vindent} \subsection{Probe definitions} The general syntax is as follows. \begin{vindent} \begin{verbatim} probe PROBEPOINT [, PROBEPOINT] { [STMT ...] } \end{verbatim} \end{vindent} Events are specified in a special syntax called \emph{probe points}. There are several varieties of probe points defined by the translator, and tapset scripts may define others using aliases. The provided probe points are listed in the \texttt{stapprobes(3)}, \texttt{tapset::*(3stap)}, and \texttt{probe::*(3stap)} man pages. The STMT statement block is executed whenever {\i any} of the named PROBEPOINT events occurs. The probe handler is interpreted relative to the context of each event. For events associated with kernel code, this context may include variables defined in the source code at that location. These \emph{target variables}\index{target variables} (or ``context variables'') are presented to the script as variables whose names are prefixed with a dollar sign (\$). They may be accessed only if the compiler used to compile the kernel preserved them, despite optimization. This is the same constraint imposed by a debugger when working with optimized code. Other events may have very little context. \subsection{Probe aliases\label{sub:Probe-aliases}} \index{probe aliases} The general syntax is as follows. \begin{vindent} \begin{verbatim} probe = { } probe += { } \end{verbatim} \end{vindent} New probe points may be defined using \emph{aliases}. A probe point alias looks similar to probe definitions, but instead of activating a probe at the given point, it defines a new probe point name as an alias to an existing one. New probe aliases may refer to one or more existing probe aliases. Multiple aliases may share the same underlying probe points. The following is an example. \begin{vindent} \begin{verbatim} probe socket.sendmsg = kernel.function ("sock_sendmsg") { ... } probe socket.do_write = kernel.function ("do_sock_write") { ... } probe socket.send = socket.sendmsg, socket.do_write { ... } \end{verbatim} \end{vindent} There are two types of aliases, the prologue style and the epilogue style which are identified by the equal sign (\texttt{\textbf{=}}) and \char`\"{}\texttt{\textbf{+=}}\char`\"{} respectively. A probe that uses a probe point alias will create an actual probe, with the handler of the alias \emph{pre-pended}. This pre-pending behavior serves several purposes. It allows the alias definition to pre-process the context of the probe before passing control to the handler specified by the user. This has several possible uses, demonstrated as follows. \begin{vindent} \begin{verbatim} # Skip probe unless given condition is met: if ($flag1 != $flag2) next # Supply values describing probes: name = "foo" # Extract the target variable to a plain local variable: var = $var \end{verbatim} \end{vindent} \subsubsection{Prologue-style aliases (=)} \index{prologue-style aliases} \index{=} For a prologue style alias, the statement block that follows an alias definition is implicitly added as a prologue to any probe that refers to the alias. The following is an example. \begin{vindent} \begin{verbatim} # Defines a new probe point syscall.read, which expands to # kernel.function("sys_read"), with the given statement as # a prologue. # probe syscall.read = kernel.function("sys_read") { fildes = $fd } \end{verbatim} \end{vindent} \subsubsection{Epilogue-style aliases (+=)} \index{epilogue-style aliases} \index{+=} The statement block that follows an alias definition is implicitly added as an epilogue to any probe that refers to the alias. It is not useful to define new variables there (since no subsequent code will see them), but rather the code can take action based upon variables set by the prologue or by the user code. The following is an example: \begin{vindent} \begin{verbatim} # Defines a new probe point with the given statement as an # epilogue. # probe syscall.read += kernel.function("sys_read") { if (traceme) println ("tracing me") } \end{verbatim} \end{vindent} \subsubsection{Probe alias usage} A probe alias is used the same way as any built-in probe type, by naming it: \begin{vindent} \begin{verbatim} probe syscall.read { printf("reading fd=%d\n", fildes) } \end{verbatim} \end{vindent} \subsubsection{Alias suffixes} It is possible to include a suffix with a probe alias invocation. If only the initial part of a probe point matches an alias, the remainder is treated as a suffix and attached to the underlying probe point(s) when the alias is expanded. For example: \begin{vindent} \begin{verbatim} /* Define an alias: */ probe sendrecv = tcp.sendmsg, tcp.recvmsg { ... } /* Use the alias in its basic form: */ probe sendrecv { ... } /* Use the alias with an additional suffix: */ probe sendrecv.return { ... } \end{verbatim} \end{vindent} Here, the second use of the probe alias is equivalent to writing \verb+probe tcp.sendmsg.return, tcp.recvmsg.return+. As another example, the probe points \verb+tcp.sendmsg.return+ and \verb+tcp.recvmsg.return+ are actually defined as aliases in the tapset \verb+tcp.stp+. They expand to a probe point of the form \verb+kernel.function("...").return+, so they can also be suffixed: \begin{vindent} \begin{verbatim} probe tcp.sendmsg.return.maxactive(10) { printf("returning from sending %d bytes\n", size) } \end{verbatim} \end{vindent} Here, the probe point expands to \verb+kernel.function("tcp_sendmsg").return.maxactive(10)+. \subsubsection{Alias suffixes and wildcards} When expanding wildcards, SystemTap generally avoids considering alias suffixes in the expansion. The exception is when a wildcard element is encountered that does not have any ordinary expansions. Consider the following example: \begin{vindent} \begin{verbatim} probe some_unrelated_probe = ... { ... } probe myprobe = syscall.read { ... } probe myprobe.test = some_unrelated_probe { ... } probe myprobe.* { ... } probe myprobe.ret* { ... } \end{verbatim} \end{vindent} Here, \verb+return+ would be a valid suffix for \verb+myprobe+. The wildcard \verb+myprobe.*+ matches the ordinary alias \verb+myprobe.test+, and hence the suffix expansion \verb+myprobe.return+ is not included. Conversely, \verb+myprobe.ret*+ does not match any ordinary aliases, so the suffix \verb+myprobe.return+ is included as an expansion. \subsection{Variables\label{sub:Variables}} \index{variables} Identifiers for variables and functions are alphanumeric sequences, and may include the underscore (\_) and the dollar sign (\$) characters. They may not start with a plain digit. Each variable is by default local to the probe or function statement block where it is mentioned, and therefore its scope and lifetime is limited to a particular probe or function invocation. Scalar variables are implicitly typed as either string or integer. Associative arrays also have a string or integer value, and a tuple of strings or integers serves as a key. Arrays must be declared as global. Local arrays\index{local arrays} are not allowed. The translator performs \emph{type inference} on all identifiers, including array indexes and function parameters. Inconsistent type-related use of identifiers results in an error. Variables may be declared global. Global variables are shared among all probes and remain instantiated as long as the SystemTap session. There is one namespace for all global variables, regardless of the script file in which they are found. Because of possible concurrency limits, such as multiple probe handlers, each global variable used by a probe is automatically read- or write-locked while the handler is running. A global declaration may be written at the outermost level anywhere in a script file, not just within a block of code. Global variables which are written but never read will be displayed automatically at session shutdown. The following declaration marks \texttt{var1} and \texttt{var2} as global. The translator will infer a value type for each, and if the variable is used as an array, its key types. \begin{vindent} \begin{verbatim} global var1[=], var2[=] \end{verbatim} \end{vindent} The scope of a global variable may be limited to a tapset or user script file using private keyword. The global keyword is optional when defining a private global variable. Following declaration marks var1 and var2 private globals. \begin{vindent} \begin{verbatim} private global var1[=] private var2[=] \end{verbatim} \end{vindent} \subsubsection{Unused variables} \index{unused variables} The SystemTap translator removes unused variables. Global variable that are never written or read are discarded. Every local variables where the variable is only written but never read are also discarded. This optimization prunes unused variables defined in the probe aliases, but never used in the probe handler. If desired, this optimization can disabled with the \texttt{-u} option. \subsection{Auxiliary functions\label{sub:Auxiliary-functions}} \index{auxiliary functions} General syntax: \begin{vindent} \begin{verbatim} function [:] ( [:], ... )[:] { } \end{verbatim} \end{vindent} SystemTap scripts may define subroutines to factor out common work. Functions may take any number of scalar arguments, and must return a single scalar value. Scalars in this context are integers or strings. For more information on scalars, see Section~\ref{sub:Variables} and Section~\ref{sub:Data-types}\texttt{.} The following is an example function declaration. \begin{vindent} \begin{verbatim} function thisfn (arg1, arg2) { return arg1 + arg2 } \end{verbatim} \end{vindent} Note the general absence of type declarations, which are inferred by the translator. If desired, a function definition may include explicit type declarations for its return value, its arguments, or both. This is helpful for embedded-C functions. In the following example, the type inference engine need only infer the type of arg2, a string. \begin{vindent} \begin{verbatim} function thatfn:string(arg1:long, arg2) { return sprintf("%d%s", arg1, arg2) } \end{verbatim} \end{vindent} Functions may call others or themselves recursively, up to a fixed nesting limit. See Section~\ref{sub:SystemTap-safety}. Functions may be marked private using the private keyword to limit their scope to the tapset or user script file they are defined in. An example definition of a private function follows: \begin{vindent} \begin{verbatim} private function three:long () { return 3 } \end{verbatim} \end{vindent} Functions terminating without reaching an explicit return statement will return an implicit 0 or \verb+""+, determined by type inference. Functions may be overloaded during both runtime and compile time. Runtime overloading allows the executed function to be selected while the module is running based on runtime conditions and is achieved using the "next" statement in script functions and \texttt{STAP\_NEXT} macro for embedded-C functions. For example, \begin{vindent} \begin{verbatim} function f() { if (condition) next; print("first function") } function f() %{ STAP_NEXT; print("second function") %} function f() { print("third function") } \end{verbatim} \end{vindent} During a functioncall f(), the execution will transfer to the third function if condition evaluates to true and print "third function". Note that the second function is unconditionally nexted. Parameter overloading allows the function to be executed to be selected at compile time based on the number of arguments provided to the functioncall. For example, \begin{vindent} \begin{verbatim} function g() { print("first function") } function g(x) { print("second function") } g() -> "first function" g(1) -> "second function" \end{verbatim} \end{vindent} Note that runtime overloading does not occur in the above example, as exactly one function will be resolved for the functioncall. The use of a next statement inside a function while no more overloads remain will trigger a runtime exception Runtime overloading will only occur if the functions have the same arity, functions with the same name but different number of parameters are completely unrelated. Execution order is determined by a priority value which may be specified. If no explicit priority is specified, user script functions are given a higher priority than library functions. User script functions and library functions are assigned a default priority value of 0 and 1 respectively. Functions with the same priority are executed in declaration order. For example, \begin{vindent} \begin{verbatim} function f():3 { if (condition) next; print("first function") } function f():1 { if (condition) next; print("second function") } function f():2 { print("third function") } \end{verbatim} \end{vindent} \subsection{Embedded C\label{sub:Embedded-C}} \index{embedded C} SystemTap supports a \emph{guru\index{guru mode} mode} where script safety features such as code and data memory reference protection are removed. Guru mode is set by passing the \textbf{-g} option to the stap command. When in guru mode, the translator accepts C code enclosed between {}``\%\{'' and {}``\%\}'' markers in the top level of the script file. The embedded C code is transcribed verbatim, without analysis, in sequence, into the top level of the generated C code. Thus, guru mode may be useful for adding \#include instructions at the top level of the generated module, or providing auxiliary definitions for use by other embedded code. When in guru mode, embedded C code blocks are also allowed as the body of a SystemTap function (as described in Section~\ref{sub:Embedded-C-Functions}), and in place of any SystemTap expression. In the latter case, the code block must contain a valid expression according to C syntax. Here is an example of the various permitted methods of embedded C code inclusion: \begin{vindent} \begin{verbatim} %{ #include #include %} /* <-- top level */ /* Reads the char value stored at a given address: */ function __read_char:long(addr:long) %{ /* pure */ STAP_RETURN(kderef(sizeof(char), STAP_ARG_addr)); CATCH_DEREF_FAULT (); %} /* <-- function body */ /* Determines whether an IP packet is TCP, based on the iphdr: */ function is_tcp_packet:long(iphdr) { protocol = @cast(iphdr, "iphdr")->protocol return (protocol == %{ IPPROTO_TCP %}) /* <-- expression */ } \end{verbatim} \end{vindent} \subsection{Embedded C functions\label{sub:Embedded-C-Functions}} General syntax: \begin{vindent} \begin{verbatim} function : ( :, ... )[:] %{ %} \end{verbatim} \end{vindent} Embedded C code is permitted in a function body. In that case, the script language body is replaced entirely by a piece of C code enclosed between {}``\%\{'' and {}``\%\}'' markers. The enclosed code may do anything reasonable and safe as allowed by the C parser. There are a number of undocumented but complex safety constraints on concurrency, resource consumption and runtime limits that are applied to code written in the SystemTap language. These constraints are not applied to embedded C code, so use embedded C code with extreme caution. Be especially careful when dereferencing pointers. Use the kread() macro to dereference any pointers that could potentially be invalid or dangerous. If you are unsure, err on the side of caution and use kread(). The kread() macro is one of the safety mechanisms used in code generated by embedded C. It protects against pointer accesses that could crash the system. For example, to access the pointer chain \texttt{name = skb->dev->name} in embedded C, use the following code. \begin{vindent} \begin{verbatim} struct net_device *dev; char *name; dev = kread(&(skb->dev)); name = kread(&(dev->name)); \end{verbatim} \end{vindent} The memory locations reserved for input and output values are provided to a function using macros named \texttt{STAP\_ARG\_foo}\index{STAP_ARG_} (for arguments named \texttt{foo}) and \texttt{STAP\_RETVALUE}\index{STAP_RETVALUE}. Errors may be signalled with \texttt{STAP\_ERROR}. Output may be written with \texttt{STAP\_PRINTF}. The function may return early with \texttt{STAP\_RETURN}. Here are some examples: \begin{vindent} \begin{verbatim} function integer_ops:long (val) %{ STAP_PRINTF("%d\n", STAP_ARG_val); STAP_RETVALUE = STAP_ARG_val + 1; if (STAP_RETVALUE == 4) STAP_ERROR("wrong guess: %d", (int) STAP_RETVALUE); if (STAP_RETVALUE == 3) STAP_RETURN(0); STAP_RETVALUE ++; %} function string_ops:string (val) %{ strlcpy (STAP_RETVALUE, STAP_ARG_val, MAXSTRINGLEN); strlcat (STAP_RETVALUE, "one", MAXSTRINGLEN); if (strcmp (STAP_RETVALUE, "three-two-one")) STAP_RETURN("parameter should be three-two-"); %} function no_ops () %{ STAP_RETURN(); /* function inferred with no return value */ %} \end{verbatim} \end{vindent} The function argument and return value types should be stated if the translator cannot infer them from usage. The translator does not analyze the embedded C code within the function. You should examine C code generated for ordinary script language functions to write compatible embedded-C. Usually, all SystemTap functions and probes run with interrupts disabled, thus you cannot call functions that might sleep within the embedded C. \subsection{Embedded C pragma comments} Embedded C blocks may contain various markers to assert optimization and safety properties. \begin{itemize} \item \verb+/* pure */+ means that the C code has no side effects and may be elided entirely if its value is not used by script code. \item \verb+/* stable */+ means that the C code always has the same value (in any given probe handler invocation), so repeated calls may be automatically replaced by memoized values. Such functions must take no parameters, and also be \verb+/* pure */+. \item \verb+/* unprivileged */+ means that the C code is so safe that even unprivileged users are permitted to use it. (This is useful, in particular, to define an embedded-C function inside a tapset that may be used by unprivileged code.) \item \verb+/* myproc-unprivileged */+ means that the C code is so safe that even unprivileged users are permitted to use it, provided that the target of the current probe is within the user's own process. \item \verb+/* guru */+ means that the C code is so unsafe that a systemtap user must specify \verb+-g+ (guru mode) to use this, even if the C code is being exported from a tapset. \item \verb+/* unmangled */+, used in an embedded-C function, means that the legacy (pre-1.8) argument access syntax should be made available inside the function. Hence, in addition to \verb+STAP_ARG_foo+ and \verb+STAP_RETVALUE+ one can use \verb+THIS->foo+ and \verb+THIS->__retvalue+ respectively inside the function. This is useful for quickly migrating code written for SystemTap version 1.7 and earlier. \item \verb+/* unmodified-fnargs */+ in an embedded-C function, means that the function arguments are not modified inside the function body. \item \verb+/* string */+ in embedded-C expressions only, means that the expression has \verb+const char *+ type and should be treated as a string value, instead of the default long numeric. \end{itemize} \subsection{Accessing script level global variables} Script level global variables may be accessed in embedded-C functions and blocks. To read or write the global variable \textbf{var}, the \verb+/* pragma:read:var */+ or \verb+/* pragma:write:var */+ marker must be first placed in the embedded-C function or block. This provides the macros \verb+STAP_GLOBAL_GET_*+ and \verb+STAP_GLOBAL_SET_*+ macros to allow reading and writing, respectively. For example: \begin{vindent} \begin{verbatim} global var global var2[100] function increment() %{ /* pragma:read:var */ /* pragma:write:var */ /* pragma:read:var2 */ /* pragma:write:var2 */ STAP_GLOBAL_SET_var(STAP_GLOBAL_GET_var()+1); //var++ STAP_GLOBAL_SET_var2(1, 1, STAP_GLOBAL_GET_var2(1, 1)+1); //var2[1,1]++ %} \end{verbatim} \end{vindent} Variables may be read and set in both embedded-C functions and expressions. Strings returned from embedded-C code are decayed to pointers. Variables must also be assigned at script level to allow for type inference. Map assignment does not return the value written, so chaining does not work. \section{Probe points\label{sec:Probe-Points}} \index{probe points} \subsection{General syntax} \index{probe syntax} The general probe point syntax is a dotted-symbol sequence. This divides the event namespace into parts, analogous to the style of the Domain Name System. Each component identifier is parameterized by a string or number literal, with a syntax analogous to a function call. The following are all syntactically valid probe points. \begin{vindent} \begin{verbatim} kernel.function("foo") kernel.function("foo").return module{"ext3"}.function("ext3_*") kernel.function("no_such_function") ? syscall.* end timer.ms(5000) \end{verbatim} \end{vindent} Probes may be broadly classified into \emph{synchronous}\index{synchronous} or \emph{asynchronous}.\index{asynchronous} A synchronous event occurs when any processor executes an instruction matched by the specification. This gives these probes a reference point (instruction address) from which more contextual data may be available. Other families of probe points refer to asynchronous events such as timers, where no fixed reference point is related. Each probe point specification may match multiple locations, such as by using wildcards or aliases, and all are probed. A probe declaration may contain several specifications separated by commas, which are all probed. \subsubsection{Prefixes} \index{prefixes} Prefixes specify the probe target, such as \textbf{kernel}, \textbf{module}, \textbf{timer}, and so on. \subsubsection{Suffixes} \index{suffixes} Suffixes further qualify the point to probe, such as \textbf{.return} for the exit point of a probed function. The absence of a suffix implies the function entry point. \subsubsection{Wildcarded file names, function names} \index{wildcards} A component may include an asterisk ({*}) character, which expands to other matching probe points. An example follows. \begin{vindent} \begin{verbatim} kernel.syscall.* kernel.function("sys_*) \end{verbatim} \end{vindent} \subsubsection{Optional probe points\label{sub:Optional-probe-points}} \index{?} A probe point may be followed by a question mark (?) character, to indicate that it is optional, and that no error should result if it fails to expand. This effect passes down through all levels of alias or wildcard expansion. The following is the general syntax. \begin{vindent} \begin{verbatim} kernel.function("no_such_function") ? \end{verbatim} \end{vindent} \subsubsection{Brace expansion} \index{braceexpansion} Brace expansion is a mechanism which allows a list of probe points to be generated. It is very similar to shell expansion. A component may be surrounded by a pair of curly braces to indicate that the comma-separated sequence of one or more subcomponents will each constitute a new probe point. The braces may be arbitrarily nested. The ordering of expanded results is based on product order. The question mark (?), exclamation mark (!) indicators and probe point conditions may not be placed in any expansions that are before the last component. The following is an example of brace expansion. \begin{vindent} \begin{verbatim} syscall.{write,read} # Expands to syscall.write, syscall.read {kernel,module("nfs")}.function("nfs*")! # Expands to kernel.function("nfs*")!, module("nfs").function("nfs*")! \end{verbatim} \end{vindent} \subsection{Built-in probe point types (DWARF probes)} \index{built-in probes} \index{dwarf probes} \label{dwarfprobes} This family of probe points uses symbolic debugging information for the target kernel or module, as may be found in executables that have not been stripped, or in the separate \textbf{debuginfo} packages. They allow logical placement of probes into the execution path of the target by specifying a set of points in the source or object code. When a matching statement executes on any processor, the probe handler is run in that context. Points in a kernel are identified by module, source file, line number, function name or some combination of these. Here is a list of probe point specifications currently supported: \begin{vindent} \begin{verbatim} kernel.function(PATTERN) kernel.function(PATTERN).call kernel.function(PATTERN).return kernel.function(PATTERN).return.maxactive(VALUE) kernel.function(PATTERN).inline kernel.function(PATTERN).label(LPATTERN) module(MPATTERN).function(PATTERN) module(MPATTERN).function(PATTERN).call module(MPATTERN).function(PATTERN).return.maxactive(VALUE) module(MPATTERN).function(PATTERN).inline kernel.statement(PATTERN) kernel.statement(ADDRESS).absolute module(MPATTERN).statement(PATTERN) \end{verbatim} \end{vindent} The \textbf{.function} variant places a probe near the beginning of the named function, so that parameters are available as context variables. The \textbf{.return} variant places a probe at the moment of return from the named function, so the return value is available as the \$return context variable. The entry parameters are also available, though the function may have changed their values. Return probes may be further qualified with \textbf{.maxactive}, which specifies how many instances of the specified function can be probed simultaneously. You can leave off \textbf{.maxactive} in most cases, as the default (\textbf{KRETACTIVE}) should be sufficient. However, if you notice an excessive number of skipped probes, try setting \textbf{.maxactive} to incrementally higher values to see if the number of skipped probes decreases. The \textbf{.inline} modifier for \textbf{.function} filters the results to include only instances of inlined functions. The \textbf{.call} modifier selects the opposite subset. The \textbf{.exported} modifier filters the results to include only exported functions. Inline functions do not have an identifiable return point, so \textbf{.return} is not supported on \textbf{.inline} probes. The \textbf{.statement} variant places a probe at the exact spot, exposing those local variables that are visible there. In the above probe descriptions, MPATTERN stands for a string literal that identifies the loaded kernel module of interest and LPATTERN stands for a source program label. Both MPATTERN and LPATTERN may include asterisk ({*}), square brackets \char`\"{}{[}]\char`\"{}, and question mark (?) wildcards. PATTERN stands for a string literal that identifies a point in the program. It is composed of three parts: \begin{enumerate} \item The first part is the name of a function, as would appear in the nm program's output. This part may use the asterisk and question mark wildcard operators to match multiple names. \item The second part is optional, and begins with the ampersand (@) character. It is followed by the path to the source file containing the function, which may include a wildcard pattern, such as mm/slab{*}. In most cases, the path should be relative to the top of the linux source directory, although an absolute path may be necessary for some kernels. If a relative pathname doesn't work, try absolute. \item The third part is optional if the file name part was given. It identifies the line number in the source file, preceded by a ``:'' or ``+''. The line number is assumed to be an absolute line number if preceded by a ``:'', or relative to the entry of the function if preceded by a ``+''. All the lines in the function can be matched with ``:*''. A range of lines x through y can be matched with ``:x-y''. \end{enumerate} Alternately, specify PATTERN as a numeric constant to indicate a relative module address or an absolute kernel address. Some of the source-level variables, such as function parameters, locals, or globals visible in the compilation unit, are visible to probe handlers. Refer to these variables by prefixing their name with a dollar sign within the scripts. In addition, a special syntax allows limited traversal of structures, pointers, arrays, taking the address of a variable or pretty printing a whole structure. \texttt{\$var} refers to an in-scope variable var. If it is a type similar to an integer, it will be cast to a 64-bit integer for script use. Pointers similar to a string (char {*}) are copied to SystemTap string values by the \texttt{kernel\_string()} or \texttt{user\_string()} functions. \texttt{@var("varname")} is an alternative syntax for \texttt{\$varname}. It can also be used to access global variables in a particular compile unit (CU). \texttt{@var("varname@src/file.c")} refers to the global (either file local or external) variable varname defined when the file src/file.c was compiled. The CU in which the variable is resolved is the first CU in the module of the probe point which matches the given file name at the end and has the shortest file name path (e.g. given \texttt{@var("foo@bar/baz.c")} and CUs with file name paths \texttt{src/sub/module/bar/baz.c} and \texttt{src/bar/baz.c} the second CU will be chosen to resolve \texttt{foo}). The notation \texttt{@var("varname", "/path/to/exe-or-so)} is also supported to explicitly specify an executable or library file path in which the global or top-level static variable resides. \texttt{\$var->field} or \texttt{@var("var@file.c")->field} traverses a structure's field. The indirection operator may be repeated to follow additional levels of pointers. \texttt{\$var{[}N]} or \texttt{@var("var@file.c"){[}N]} indexes into an array. The index is given with a literal number. \texttt{\&\$var} or \texttt{\&@var("var@file.c")} provides the address of a variable as a long. It can also be used in combination with field access or array indexing to provide the address of a particular field or an element in an array with \texttt{\&var->field}, \texttt{\&@var("var@file.c"){[}N]} or a combination of those accessors. Using a single \texttt{\$} or a double \texttt{\$\$} suffix provides a swallow or deep string representation of the variable data type. Using a single \texttt{\$}, as in \texttt{\$var\$}, will provide a string that only includes the values of all basic type values of fields of the variable structure type but not any nested complex type values (which will be represented with \texttt{\{...\}}). Using a double \texttt{\$\$}, as in \texttt{@var("var")\$\$} will provide a string that also includes all values of nested data types. \texttt{\$\$vars} expands to a character string that is equivalent to \texttt{sprintf("parm1=\%x ... parmN=\%x var1=\%x ... varN=\%x", \$parm1, ..., \$parmN, \$var1, ..., \$varN)} \texttt{\$\$locals} expands to a character string that is equivalent to \texttt{sprintf("var1=\%x ... varN=\%x", \$var1, ..., \$varN)} \texttt{\$\$parms} expands to a character string that is equivalent to \texttt{sprintf("parm1=\%x ... parmN=\%x", \$parm1, ..., \$parmN)} \subsubsection{kernel.function, module().function} \index{kernel.function} \index{module().function} The \textbf{.function} variant places a probe near the beginning of the named function, so that parameters are available as context variables. General syntax: \begin{vindent} \begin{verbatim} kernel.function("func[@file]") module("modname").function("func[@file]") \end{verbatim} \end{vindent} Examples: \begin{vindent} \begin{verbatim} # Refers to all kernel functions with "init" or "exit" # in the name: kernel.function("*init*"), kernel.function("*exit*") # Refers to any functions within the "kernel/time.c" # file that span line 240: kernel.function("*@kernel/time.c:240") # Refers to all functions in the ext3 module: module("ext3").function("*") \end{verbatim} \end{vindent} \subsubsection{kernel.statement, module().statement} \index{kernel.statement} \index{module().statement} The \textbf{.statement} variant places a probe at the exact spot, exposing those local variables that are visible there. General syntax: \begin{vindent} \begin{verbatim} kernel.statement("func@file:linenumber") module("modname").statement("func@file:linenumber") \end{verbatim} \end{vindent} Example: \begin{vindent} \begin{verbatim} # Refers to the statement at line 296 within the # kernel/time.c file: kernel.statement("*@kernel/time.c:296") # Refers to the statement at line bio_init+3 within the fs/bio.c file: kernel.statement("bio_init@fs/bio.c+3") \end{verbatim} \end{vindent} \subsection{Function return probes} \index{return probes} The \texttt{.return} variant places a probe at the moment of return from the named function, so that the return value is available as the \$return context variable. The entry parameters are also accessible in the context of the return probe, though their values may have been changed by the function. Inline functions do not have an identifiable return point, so \texttt{.return} is not supported on \texttt{.inline} probes. \subsection{DWARF-less probing} \index{DWARF-less probing} In the absence of debugging information, you can still use the \emph{kprobe} family of probes to examine the entry and exit points of kernel and module functions. You cannot look up the arguments or local variables of a function using these probes. However, you can access the parameters by following this procedure: When you're stopped at the entry to a function, you can refer to the function's arguments by number. For example, when probing the function declared: \begin{vindent} \begin{verbatim} asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) \end{verbatim} \end{vindent} You can obtain the values of \texttt{fd}, \texttt{buf}, and \texttt{count}, respectively, as \texttt{uint\_arg(1)}, \texttt{pointer\_arg(2)}, and \texttt{ulong\_arg(3)}. In this case, your probe code must first call \texttt{asmlinkage()}, because on some architectures the asmlinkage attribute affects how the function's arguments are passed. When you're in a return probe, \texttt{\$return} isn't supported without DWARF, but you can call \texttt{returnval()} to get the value of the register in which the function value is typically returned, or call \texttt{returnstr()} to get a string version of that value. And at any code probepoint, you can call \texttt{{register("regname")}} to get the value of the specified CPU register when the probe point was hit. \texttt{u\_register("regname")} is like \texttt{register("regname")}, but interprets the value as an unsigned integer. SystemTap supports the following constructs: \begin{vindent} \begin{verbatim} kprobe.function(FUNCTION) kprobe.function(FUNCTION).return kprobe.module(NAME).function(FUNCTION) kprobe.module(NAME).function(FUNCTION).return kprobe.statement(ADDRESS).absolute \end{verbatim} \end{vindent} Use \textbf{.function} probes for kernel functions and \textbf{.module} probes for probing functions of a specified module. If you do not know the absolute address of a kernel or module function, use \textbf{.statement} probes. Do not use wildcards in \textit{FUNCTION} and \textit{MODULE} names. Wildcards cause the probe to not register. Also, statement probes are available only in guru mode. \subsection{Userspace probing} \index{userspace probing} \index{process} Support for userspace probing is supported on kernels that are configured to include the utrace or uprobes extensions. \subsubsection{Begin/end variants} \label{sec:beginendvariants} Constructs: \begin{vindent} \begin{verbatim} process.begin process("PATH").begin process(PID).begin process.thread.begin process("PATH").thread.begin process(PID).thread.begin process.end process("PATH").end process(PID).end process.thread.end process("PATH").thread.end process(PID).thread.end \end{verbatim} \end{vindent} The \texttt{.begin} variant is called when a new process described by \texttt{PID} or \texttt{PATH} is created. If no \texttt{PID} or \texttt{PATH} argument is specified (for example \texttt{process.begin}), the probe flags any new process being spawned. The \texttt{.thread.begin} variant is called when a new thread described by \texttt{PID} or \texttt{PATH} is created. The \texttt{.end} variant is called when a process described by \texttt{PID} or \texttt{PATH} dies. The \texttt{.thread.end} variant is called when a thread described by \texttt{PID} or \texttt{PATH} dies. \subsubsection{Syscall variants} \label{sec:syscallvariants} Constructs: \begin{vindent} \begin{verbatim} process.syscall process("PATH").syscall process(PID).syscall process.syscall.return process("PATH").syscall.return process(PID).syscall.return \end{verbatim} \end{vindent} The \texttt{.syscall} variant is called when a thread described by \texttt{PID} or \texttt{PATH} makes a system call. The system call number is available in the \texttt{\$syscall} context variable. The first six arguments of the system call are available in the \texttt{\$argN} parameter, for example \texttt{\$arg1}, \texttt{\$arg2}, and so on. The \texttt{.syscall.return} variant is called when a thread described by \texttt{PID} or \texttt{PATH} returns from a system call. The system call number is available in the \texttt{\$syscall} context variable. The return value of the system call is available in the \texttt{\$return} context variable. \subsubsection{Function/statement variants} \label{sec:function-statement} Constructs: \begin{vindent} \begin{verbatim} process("PATH").function("NAME") process("PATH").statement("*@FILE.c:123") process("PATH").function("*").return process("PATH").function("myfun").label("foo") \end{verbatim} \end{vindent} Full symbolic source-level probes in userspace programs and shared libraries are supported. These are exactly analogous to the symbolic DWARF-based kernel or module probes described previously and expose similar contextual \texttt{\$-variables}. See Section~\ref{dwarfprobes} for more information Here is an example of prototype symbolic userspace probing support: \begin{vindent} \begin{verbatim} # stap -e 'probe process("ls").function("*").call { log (probefunc()." ".$$parms) }' \ -c 'ls -l' \end{verbatim} \end{vindent} To run, this script requires debugging information for the named program and utrace support in the kernel. If you see a "pass 4a-time" build failure, check that your kernel supports utrace. \subsubsection{Absolute variant} \label{sec:absolutevariant} A non-symbolic probe point such as \texttt{process(PID).statement(ADDRESS).absolute} is analogous to \newline\texttt{kernel.statement(ADDRESS).absolute} in that both use raw, unverified virtual addresses and provide no \texttt{\$variables}. The target \texttt{PID} parameter must identify a running process and \texttt{ADDRESS} must identify a valid instruction address. All threads of the listed process will be probed. This is a guru mode probe. \subsubsection{Process probe paths} \label{sec:paths} For all process probes, \texttt{PATH} names refer to executables that are searched the same way that shells do: the explicit path specified if the path name begins with a slash (/) character sequence; otherwise \texttt{\$PATH} is searched. For example, the following probe syntax: \begin{vindent} \begin{verbatim} probe process("ls").syscall {} probe process("./a.out").syscall {} \end{verbatim} \end{vindent} works the same as: \begin{vindent} \begin{verbatim} probe process("/bin/ls").syscall {} probe process("/my/directory/a.out").syscall {} \end{verbatim} \end{vindent} If a process probe is specified without a \texttt{PID} or \texttt{PATH} parameter, all user threads are probed. However, if systemtap is invoked in target process mode, process probes are restricted to the process hierarchy associated with the target process. If stap is running in \texttt{--unprivileged} mode, only processes owned by the current user are selected. \subsubsection{Target process mode} \label{sec:targetprocessmode} Target process mode (invoked with \texttt{stap -c CMD} or \texttt{-x PID}) implicitly restricts all \texttt{process.*} probes to the given child process. It does not affect \texttt{kernel.*} or other probe types. The \texttt{CMD} string is normally run directly, rather than from a ``\texttt{/bin/sh -c}'' sub-shell, since utrace and uprobe probes receive a fairly "clean" event stream. If meta-characters such as redirection operators are present in \texttt{CMD}, ``\texttt{/bin/sh -c CMD}'' is still used, and utrace and uprobe probes will receive events from the shell. For example: \begin{vindent} \begin{verbatim} % stap -e 'probe process.syscall, process.end { printf("%s %d %s\n", execname(), pid(), pp())}' \ -c ls \end{verbatim} \end{vindent} Here is the output from this command: \begin{vindent} \begin{verbatim} ls 2323 process.syscall ls 2323 process.syscall ls 2323 process.end \end{verbatim} \end{vindent} If \texttt{PATH} names a shared library, all processes that map that shared library can be probed. If dwarf debugging information is installed, try using a command with this syntax: \begin{vindent} \begin{verbatim} probe process("/lib64/libc-2.8.so").function("....") { ... } \end{verbatim} \end{vindent} This command probes all threads that call into that library. Typing ``\texttt{stap -c CMD}'' or ``\texttt{stap -x PID}'' restricts this to the target command and descendants only. You can use \texttt{\$\$vars} and others. You can provide the location of debug information to the stap command with the \texttt{-d DIRECTORY} option. To qualify a probe point to a location in a library required by a particular process try using a command with this syntax: \begin{vindent} \begin{verbatim} probe process("...").library("...").function("....") { ... } \end{verbatim} \end{vindent} The library name may use wildcards. The first syntax in the following will probe the functions in the program linkage table of a particular process. The second syntax will also add the program linkage tables of libraries required by that process. .plt("...") can be specified to match particular plt entries. \begin{vindent} \begin{verbatim} probe process("...").plt { ... } probe process("...").plt process("...").library("...").plt { ... } \end{verbatim} \end{vindent} \subsubsection{Instruction probes} \label{sec:insnprobes} Constructs: \begin{vindent} \begin{verbatim} process("PATH").insn process(PID).insn process("PATH").insn.block process(PID).insn.block \end{verbatim} \end{vindent} The \texttt{process().insn} and \texttt{process().insn.block} probes inspect the process after each instruction or block of instructions is executed. These probes are not implemented on all architectures. If they are not implemented on your system, you will receive an error message when the script starts. The \texttt{.insn} probe is called for every single-stepped instruction of the process described by \texttt{PID} or \texttt{PATH}. The \texttt{.insn.block} probe is called for every block-stepped instruction of the process described by \texttt{PID} or \texttt{PATH}. To count the total number of instructions that a process executes, type a command similar to: \begin{vindent} \begin{verbatim} $ stap -e 'global steps; probe process("/bin/ls").insn {steps++} probe end {printf("Total instructions: %d\n", steps);}' \ -c /bin/ls \end{verbatim} \end{vindent} Using this feature will significantly slow process execution. \subsubsection{Static userspace probing} \label{sec:staticuserspace} You can probe symbolic static instrumentation compiled into programs and shared libraries with the following syntax: \begin{vindent} \begin{verbatim} process("PATH").mark("LABEL") \end{verbatim} \end{vindent} The \texttt{.mark} variant is called from a static probe defined in the application by \texttt{STAP\_PROBE1(handle,LABEL,arg1)}. \texttt{STAP\_PROBE1} is defined in the sdt.h file. The parameters are: \begin{tabular}{|l|r|c|} Parameter & Definition \\ \hline \texttt{handle} & the application handle \\ \hline \texttt{LABEL} & corresponds to the \texttt{.mark} argument \\ \hline \texttt{arg1} & the argument \\ \hline \end{tabular} Use \texttt{STAP\_PROBE1} for probes with one argument. Use \texttt{STAP\_PROBE2} for probes with 2 arguments, and so on. The arguments of the probe are available in the context variables \texttt{\$arg1}, \texttt{\$arg2}, and so on. As an alternative to the \texttt{STAP\_PROBE} macros, you can use the dtrace script to create custom macros. The sdt.h file also provides dtrace compatible markers through \texttt{DTRACE\_PROBE} and an associated python \texttt{dtrace} script. You can use these in builds based on dtrace that need dtrace -h or -G functionality. \subsection{Java probes} \index{Java probes} Support for probing Java methods is available using Byteman as a backend. Byteman is an instrumentation tool from the JBoss project which systemtap can use to monitor invocations for a specific method or line in a Java program. Systemtap does so by generating a Byteman script listing the probes to instrument and then invoking the Byteman \texttt{bminstall} utility. A custom option \texttt{-D OPTION} (see the Byteman documentation for more details) can be passed to bminstall by invoking systemtap with option \texttt{-J OPTION}. The systemtap option \texttt{-j} is also provided as a shorthand for \texttt{-J org.jboss.byteman.compile.to.bytecode}. This Java instrumentation support is currently a prototype feature with major limitations: Java probes attach only to one Java process at a time; other Java processes beyond the first one to be observed are ignored. Moreover, Java probing currently does not work across users; the stap script must run (with appropriate permissions) under the same user as the Java process being probed. (Thus a stap script under root currently cannot probe Java methods in a non-root-user Java process.) There are four probe point variants supported by the translator: \begin{vindent} \begin{verbatim} java("PNAME").class("CLASSNAME").method("PATTERN") java("PNAME").class("CLASSNAME").method("PATTERN").return java(PID).class("CLASSNAME").method("PATTERN") java(PID).class("CLASSNAME").method("PATTERN").return \end{verbatim} \end{vindent} The first two probe points refer to Java processes by the name of the Java process. The PATTERN parameter specifies the signature of the Java method to probe. The signature must consist of the exact name of the method, followed by a bracketed list of the types of the arguments, for instance \texttt{myMethod(int,double,Foo)}. Wildcards are not supported. The probe can be set to trigger at a specific line within the method by appending a line number with colon, just as in other types of probes: \texttt{myMethod(int,double,Foo):245}. The CLASSNAME parameter identifies the Java class the method belongs to, either with or without the package qualification. By default, the probe only triggers on descendants of the class that do not override the method definition of the original class. However, CLASSNAME can take an optional caret prefix, as in \verb+class("^org.my.MyClass")+, which specifies that the probe should also trigger on all descendants of MyClass that override the original method. For instance, every method with signature foo(int) in program org.my.MyApp can be probed at once using \begin{vindent} \begin{verbatim} java("org.my.MyApp").class("^java.lang.Object").method("foo(int)") \end{verbatim} \end{vindent} The last two probe points work analogously, but refer to Java processes by PID. (PIDs for already running processes can be obtained using the \texttt{jps} utility.) Context variables defined within java probes include \verb+$provider+ (which identifies the class providing the definition of the triggered method) and \verb+$name+ (which gives the signature of the method). Arguments to the method can be accessed using context variables \verb+$arg1$+ through \verb+$arg10+, for up to the first 10 arguments of a method. \subsection{PROCFS probes} \index{PROCFS probes} These probe points allow procfs pseudo-files in \texttt{/proc/systemtap/\textit{MODNAME}} to be created, read and written. Specify the name of the systemtap module as \texttt{\textit{MODNAME}}. There are four probe point variants supported by the translator: \begin{vindent} \begin{verbatim} procfs("PATH").read procfs("PATH").write procfs.read procfs.write \end{verbatim} \end{vindent} \texttt{PATH} is the file name to be created, relative to \texttt{/proc/systemtap/MODNAME}. If no \texttt{PATH} is specified (as in the last two variants in the previous list), \texttt{PATH} defaults to "command". When a user reads \texttt{/proc/systemtap/MODNAME/PATH}, the corresponding procfs read probe is triggered. Assign the string data to be read to a variable named \texttt{\$value}, as follows: \begin{vindent} \begin{verbatim} procfs("PATH").read { $value = "100\n" } \end{verbatim} \end{vindent} When a user writes into \texttt{/proc/systemtap/MODNAME/PATH}, the corresponding procfs write probe is triggered. The data the user wrote is available in the string variable named \texttt{\$value}, as follows: \begin{vindent} \begin{verbatim} procfs("PATH").write { printf("User wrote: %s", $value) } \end{verbatim} \end{vindent} \subsection{Marker probes} \index{marker probes} This family of probe points connects to static probe markers inserted into the kernel or a module. These markers are special macro calls in the kernel that make probing faster and more reliable than with DWARF-based probes. DWARF debugging information is not required to use probe markers. Marker probe points begin with a \texttt{kernel} prefix which identifies the source of the symbol table used for finding markers. The suffix names the marker itself: \texttt{mark.("MARK")}. The marker name string, which can contain wildcard characters, is matched against the names given to the marker macros when the kernel or module is compiled. Optionally, you can specify \texttt{format("FORMAT")}. Specifying the marker format string allows differentiation between two markers with the same name but different marker format strings. The handler associated with a marker probe reads any optional parameters specified at the macro call site named \texttt{\$arg1} through \texttt{\$argNN}, where \texttt{NN} is the number of parameters supplied by the macro. Number and string parameters are passed in a type-safe manner. The marker format string associated with a marker is available in \texttt{\$format}. The marker name string is available in \texttt{\$name}. Here are the marker probe constructs: \begin{vindent} \begin{verbatim} kernel.mark("MARK") kernel.mark("MARK").format("FORMAT") \end{verbatim} \end{vindent} For more information about marker probes, see \url{http://sourceware.org/systemtap/wiki/UsingMarkers}. \subsection{Tracepoints} \label{sec:tracepoints} \index{tracepoints} This family of probe points hooks to static probing tracepoints inserted into the kernel or kernel modules. As with marker probes, these tracepoints are special macro calls inserted by kernel developers to make probing faster and more reliable than with DWARF-based probes. DWARF debugging information is not required to probe tracepoints. Tracepoints have more strongly-typed parameters than marker probes. Tracepoint probes begin with \texttt{kernel}. The next part names the tracepoint itself: \texttt{trace("name")}. The tracepoint \texttt{name} string, which can contain wildcard characters, is matched against the names defined by the kernel developers in the tracepoint header files. The handler associated with a tracepoint-based probe can read the optional parameters specified at the macro call site. These parameters are named according to the declaration by the tracepoint author. For example, the tracepoint probe \texttt{kernel.trace("sched\_switch")} provides the parameters \texttt{\$rq}, \texttt{\$prev}, and \texttt{\$next}. If the parameter is a complex type such as a struct pointer, then a script can access fields with the same syntax as DWARF \texttt{\$target} variables. Tracepoint parameters cannot be modified; however, in guru mode a script can modify fields of parameters. The name of the tracepoint is available in \texttt{\$\$name}, and a string of \texttt{name=value} pairs for all parameters of the tracepoint is available in \texttt{\$\$vars} or \texttt{\$\$parms}. \subsection{Syscall probes} \label{sec:syscall} \index{syscall probes} The \texttt{syscall.*} aliases define several hundred probes. They use the following syntax: \begin{vindent} \begin{verbatim} syscall.NAME syscall.NAME.return \end{verbatim} \end{vindent} Generally, two probes are defined for each normal system call as listed in the syscalls(2) manual page: one for entry and one for return. System calls that never return do not have a corresponding \texttt{.return} probe. Each probe alias defines a variety of variables. Look at the tapset source code to find the most reliable source of variable definitions. Generally, each variable listed in the standard manual page is available as a script-level variable. For example, \texttt{syscall.open} exposes file name, flags, and mode. In addition, a standard suite of variables is available at most aliases, as follows: \begin{itemize} \item \texttt{argstr}: A pretty-printed form of the entire argument list, without parentheses. \item \texttt{name}: The name of the system call. \item \texttt{retstr}: For return probes, a pretty-printed form of the system call result. \end{itemize} Not all probe aliases obey all of these general guidelines. Please report exceptions that you encounter as a bug. \subsection{Timer probes} \index{timer probes} You can use intervals defined by the standard kernel jiffies\index{jiffies} timer to trigger probe handlers asynchronously. A \emph{jiffy} is a kernel-defined unit of time typically between 1 and 60 msec. Two probe point variants are supported by the translator: \begin{vindent} \begin{verbatim} timer.jiffies(N) timer.jiffies(N).randomize(M) \end{verbatim} \end{vindent} The probe handler runs every N jiffies. If the \texttt{randomize}\index{randomize} component is given, a linearly distributed random value in the range {[}-M \ldots{} +M] is added to N every time the handler executes. N is restricted to a reasonable range (1 to approximately 1,000,000), and M is restricted to be less than N. There are no target variables provided in either context. Probes can be run concurrently on multiple processors. Intervals may be specified in units of time. There are two probe point variants similar to the jiffies timer: \begin{vindent} \begin{verbatim} timer.ms(N) timer.ms(N).randomize(M) \end{verbatim} \end{vindent} Here, N and M are specified in milliseconds\index{milliseconds}, but the full options for units are seconds (s or sec), milliseconds (ms or msec), microseconds (us or usec), nanoseconds (ns or nsec), and hertz (hz). Randomization is not supported for hertz timers. The resolution of the timers depends on the target kernel. For kernels prior to 2.6.17, timers are limited to jiffies resolution, so intervals are rounded up to the nearest jiffies interval. After 2.6.17, the implementation uses hrtimers for greater precision, though the resulting resolution will be dependent upon architecture. In either case, if the randomize component is given, then the random value will be added to the interval before any rounding occurs. Profiling timers are available to provide probes that execute on all CPUs at each system tick. This probe takes no parameters, as follows. \begin{vindent} \begin{verbatim} timer.profile.tick \end{verbatim} \end{vindent} Full context information of the interrupted process is available, making this probe suitable for implementing a time-based sampling profiler. It is recommended to use the tapset probe \verb+timer.profile+ rather than \verb+timer.profile.tick+. This probe point behaves identically to \verb+timer.profile.tick+ when the underlying functionality is available, and falls back to using \verb+perf.sw.cpu_clock+ on some recent kernels which lack the corresponding profile timer facility. The following is an example of timer usage. \begin{vindent} \begin{verbatim} # Refers to a periodic interrupt, every 1000 jiffies: timer.jiffies(1000) # Fires every 5 seconds: timer.sec(5) # Refers to a periodic interrupt, every 1000 +/- 200 jiffies: timer.jiffies(1000).randomize(200) \end{verbatim} \end{vindent} \subsection{Special probe points} The probe points \texttt{begin} and \texttt{end} are defined by the translator to refer to the time of session startup and shutdown. There are no target variables available in either context. \subsubsection{begin} \index{begin} The \texttt{begin} probe is the start of the SystemTap session. All \texttt{begin} probe handlers are run during the startup of the session. \subsubsection{end} \index{end} The \texttt{end} probe is the end of the SystemTap session. All \texttt{end} probes are run during the normal shutdown of a session, such as in the aftermath of a SystemTap \texttt{exit} function call, or an interruption from the user. In the case of an shutdown triggered by error, \texttt{end} probes are not run. \subsubsection{error} \index{error} The \emph{error} probe point is similar to the end probe, except the probe handler runs when the session ends if an error occurred. In this case, an \texttt{end} probe is skipped, but each \texttt{error} probe is still attempted. You can use an \texttt{error} probe to clean up or perform a final action on script termination. Here is a simple example: \begin{vindent} \begin{verbatim} probe error { println ("Oops, errors occurred. Here's a report anyway.") foreach (coin in mint) { println (coin) } } \end{verbatim} \end{vindent} \subsubsection{begin, end, and error probe sequence} \index{probe sequence} \texttt{begin}, \texttt{end}, and \texttt{error} probes can be specified with an optional sequence number that controls the order in which they are run. If no sequence number is provided, the sequence number defaults to zero and probes are run in the order that they occur in the script file. Sequence numbers may be either positive or negative, and are especially useful for tapset writers who want to do initialization in a \texttt{begin} probe. The following are examples. \begin{vindent} \begin{verbatim} # In a tapset file: probe begin(-1000) { ... } # In a user script: probe begin { ... } \end{verbatim} \end{vindent} The user script \texttt{begin} probe defaults to sequence number zero, so the tapset \texttt{begin} probe will run first. \subsubsection{never} \index{never} The \texttt{never} probe point is defined by the translator to mean \emph{never}. Its statements are analyzed for symbol and type correctness, but its probe handler is never run. This probe point may be useful in conjunction with optional probes. See Section~\ref{sub:Optional-probe-points}. \section{Language elements\label{sec:Language-Elements}} \subsection{Identifiers} \index{identifiers} \emph{Identifiers} are used to name variables and functions. They are an alphanumeric sequence that may include the underscore (\_) and dollar sign (\$) characters. They have the same syntax as C identifiers, except that the dollar sign is also a legal character. Identifiers that begin with a dollar sign are interpreted as references to variables in the target software, rather than to SystemTap script variables. Identifiers may not start with a plain digit. \subsection{Data types\label{sub:Data-types}} \index{data types} The SystemTap language includes a small number of data types, but no type declarations. A variable's type is inferred\index{inference} from its use. To support this inference, the translator enforces consistent typing of function arguments and return values, array indices and values. There are no implicit type conversions between strings and numbers. Inconsistent type-related use of an identifier signals an error. \subsubsection{Literals} \index{literals} Literals are either strings or integers. Literal integers can be expressed as decimal, octal, or hexadecimal, using C notation. Type suffixes (e.g., \emph{L} or \emph{U}) are not used. \subsubsection{Integers\label{sub:Integers}} \index{integers} \index{numbers} Integers are decimal, hexadecimal, or octal, and use the same notation as in C. Integers are 64-bit signed quantities, although the parser also accepts (and wraps around) values above positive $2^{63}$ but below $2^{64}$. \subsubsection{Strings\label{sub:Strings}} \index{strings} Strings are enclosed in quotation marks ({}``string''), and pass through standard C escape codes with backslashes. A string literal may be split into several pieces, which are glued together, as follows. \begin{vindent} \begin{verbatim} str1 = "foo" "bar" /* --> becomes "foobar" */ str2 = "a good way to do a multi-line\n" "string literal" /* --> becomes "a good way to do a multi-line\nstring literal" */ str3 = "also a good way to " @1 " splice command line args" /* --> becomes "also a good way to foo splice command line args", assuming @1 is given as foo on the command line */ \end{verbatim} \end{vindent} Observe that script arguments can also be glued into a string literal. Strings are limited in length to MAXSTRINGLEN. For more information about this and other limits, see Section~\ref{sub:SystemTap-safety}. \subsubsection{Associative arrays} See Section~\ref{sec:Associative-Arrays} \subsubsection{Statistics} See Section~\ref{sec:Statistics} \subsection{Semicolons} \index{;} The semicolon is the null statement, or do nothing statement. It is optional, and useful as a separator between statements to improve detection of syntax errors and to reduce ambiguities in grammar. \subsection{Comments} \index{comments} Three forms of comments are supported, as follows. \begin{vindent} \begin{verbatim} # ... shell style, to the end of line // ... C++ style, to the end of line /* ... C style ... */ \end{verbatim} \end{vindent} \subsection{Whitespace} \index{whitespace} As in C, spaces, tabs, returns, newlines, and comments are treated as whitespace. Whitespace is ignored by the parser. \subsection{Expressions} \index{expressions} SystemTap supports a number of operators that use the same general syntax, semantics, and precedence as in C and awk. Arithmetic is performed per C rules for signed integers. If the parser detects division by zero or an overflow, it generates an error. The following subsections list these operators. \subsubsection{Binary numeric operators} \index{binary} \texttt{{*} / \% + - >\,{}> >\,{}>\,{}> <\,{}< \& \textasciicircum{} | \&\& ||} \subsubsection{Binary string operators} \index{binary} \texttt{\textbf{.}} (string concatenation) \subsubsection{Numeric assignment operators} \index{numeric} \texttt{= {*}= /= \%= += -= >\,{}>= <\,{}<= \&= \textasciicircum{}= |=} \subsubsection{String assignment operators} \texttt{= .=} \subsubsection{Unary numeric operators} \index{unary} \texttt{+ - ! \textasciitilde{} ++ -{}-} \subsubsection{Numeric \& string comparison, regular expression matching operators} \index{comparison} \texttt{< > <= >= == !=} \verb+=~+ \verb+!~+ The \verb+=~+ and \verb+!~+ operators perform regular expression matching. The second operand must be a string literal containing a syntactically valid regular expression. The \verb+=~+ operator returns {\tt 1} on a successful match and \texttt{0} on a failed match. The \verb+!~+ operator returns {\tt 1} on a failed match. The regular expression syntax supports most of the features of POSIX Extended Regular Expressions, except for subexpression reuse (\verb+\1+) functionality. After a successful match, the matched substring and subexpressions can be extracted using the \texttt{matched} tapset function. The \texttt{ngroups} tapset function returns the number of subexpressions in the last successfully matched regular expression. \subsubsection{Ternary operator\label{sub:Ternary-operator}} \index{?} \texttt{cond ? exp1 : exp2} \subsubsection{Grouping operator} \index{grouping} \texttt{( exp )} \subsubsection{Function call} \index{fn} General syntax: \texttt{fn ({[} arg1, arg2, ... ])} \subsubsection{\$ptr-\textgreater member} \index{pointer} \texttt{ptr} is a kernel pointer available in a probed context. \subsubsection{Pointer typecasting} \index{Pointer typecasting} \emph{Typecasting} is supported using the \texttt{@cast()} operator. A script can define a pointer type for a \emph{long} value, then access type members using the same syntax as with \texttt{\$target} variables. After a pointer is saved into a script integer variable, the translator loses the necessary type information to access members from that pointer. The \texttt{@cast()} operator tells the translator how to read a pointer. The following statement interprets \texttt{p} as a pointer to a struct or union named \texttt{type\_name} and dereferences the \texttt{member} value: \begin{vindent} \begin{verbatim} @cast(p, "type_name"[, "module"])->member \end{verbatim} \end{vindent} The optional \texttt{module} parameter tells the translator where to look for information about that type. You can specify multiple modules as a list with colon (\texttt{:}) separators. If you do not specify the module parameter, the translator defaults to either the probe module for dwarf probes or to \textit{kernel} for functions and all other probe types. The following statement retrieves the parent PID from a kernel task\_struct: \begin{vindent} \begin{verbatim} @cast(pointer, "task_struct", "kernel")->parent->tgid \end{verbatim} \end{vindent} The translator can create its own module with type information from a header surrounded by angle brackets (\texttt{< >}) if normal debugging information is not available. For kernel headers, prefix it with \texttt{kernel} to use the appropriate build system. All other headers are built with default GCC parameters into a user module. The following statements are examples. \begin{vindent} \begin{verbatim} @cast(tv, "timeval", "")->tv_sec @cast(task, "task_struct", "kernel")->tgid \end{verbatim} \end{vindent} In guru mode, the translator allows scripts to assign new values to members of typecasted pointers. Typecasting is also useful in the case of \texttt{void*} members whose type might be determinable at run time. \begin{vindent} \begin{verbatim} probe foo { if ($var->type == 1) { value = @cast($var->data, "type1")->bar } else { value = @cast($var->data, "type2")->baz } print(value) } \end{verbatim} \end{vindent} \subsubsection{\textless value\textgreater\ in \textless array\_name\textgreater} \index{index} This expression evaluates to true if the array contains an element with the specified index. \subsubsection{{[} \textless value\textgreater, ... ] in \textless array\_name\textgreater} The number of index values must match the number of indexes previously specified. \subsection{Literals passed in from the stap command line\label{sub:Literals-passed-in}} \index{literals} \emph{Literals} are either strings enclosed in double quotes ('' '') or integers. For information about integers, see Section~\ref{sub:Integers}. For information about strings, see Section~\ref{sub:Strings}. Script arguments at the end of a command line are expanded as literals. You can use these in all contexts where literals are accepted. A reference to a nonexistent argument number is an error. \subsubsection{\$1 \ldots{} \$\textless NN\textgreater\ for literal pasting} \index{\$} Use \texttt{\$1 \ldots{} \$} for pasting the entire argument string into the input stream, which will be further lexically tokenized. \subsubsection{@1 \ldots{} @\textless NN\textgreater\ for strings} Use \texttt{@1 \ldots{} @} for casting an entire argument as a string literal. \subsubsection{Examples} For example, if the following script named example.stp \begin{vindent} \begin{verbatim} probe begin { printf("%d, %s\n", $1, @2) } \end{verbatim} \end{vindent} is invoked as follows \begin{vindent} \begin{verbatim} # stap example.stp '5+5' mystring \end{verbatim} \end{vindent} then 5+5 is substituted for \$1 and \char`\"{}mystring\char`\"{} for @2. The output will be \begin{vindent} \begin{verbatim} 10, mystring \end{verbatim} \end{vindent} \subsection{Conditional compilation} \subsubsection{Conditions} \index{conditions} One of the steps of parsing is a simple preprocessing stage. The preprocessor supports conditionals with a general form similar to the ternary operator (Section~\ref{sub:Ternary-operator}). \begin{vindent} \begin{verbatim} %( CONDITION %? TRUE-TOKENS %) %( CONDITION %? TRUE-TOKENS %: FALSE-TOKENS %) \end{verbatim} \end{vindent} The CONDITION is a limited expression whose format is determined by its first keyword. The following is the general syntax. \begin{vindent} \begin{verbatim} %( %? [ %: ] %) \end{verbatim} \end{vindent} \subsubsection{Conditions based on available target variables} \index{defined target variable} The predicate @defined() is available for testing whether a particular \$variable/expression is resolvable at translation time. The following is an example of its use: \begin{vindent} \begin{verbatim} probe foo { if (@defined($bar)) log ("$bar is available here") } \end{verbatim} \end{vindent} \subsubsection{Conditions based on kernel version: kernel\_v, kernel\_vr} \index{kernel version} \index{kernel\_vr} \index{kernel\_v} If the first part of a conditional expression is the identifier \texttt{kernel\_v} or \texttt{kernel\_vr}, the second part must be one of six standard numeric comparison operators {}``\textless'', {}``\textless ='', {}``=='', {}``!='', {}``\textgreater'', or {}``\textgreater ='', and the third part must be a string literal that contains an RPM-style version-release value. The condition returns true if the version of the target kernel (as optionally overridden by the \textbf{-r} option) matches the given version string. The comparison is performed by the glibc function strverscmp. \texttt{kernel\_v} refers to the kernel version number only, such as {}``2.6.13\char`\"{}. \texttt{kernel\_vr} refers to the kernel version number including the release code suffix, such as {}``2.6.13-1.322FC3smp''. \subsubsection{Conditions based on architecture: arch} \index{arch} If the first part of the conditional expression is the identifier \texttt{arch} which refers to the processor architecture, then the second part is a string comparison operator ''=='' or ''!='', and the third part is a string literal for matching it. This comparison is a simple string equality or inequality. The currently supported architecture strings are i386, i686, x86\_64, ia64, s390, and powerpc. \subsubsection{Conditions based on privilege level: systemtap\_privilege} \index{systemtap\_privilege} If the first part of the conditional expression is the identifier \texttt{systemtap\_privilege} which refers to the privilege level the systemtap script is being compiled with, then the second part is a string comparison operator ''=='' or ''!='', and the third part is a string literal for matching it. This comparison is a simple string equality or inequality. The possible privilege strings to consider are \verb+"stapusr"+ for unprivileged scripts, and \verb+"stapsys"+ or \verb+"stapdev"+ for privileged scripts. (In general, to test for a privileged script it is best to use \verb+!= "stapusr"+.) This condition can be used to write scripts that can be run in both privileged and unprivileged modes, with additional functionality made available in the privileged case. \subsubsection{True and False Tokens} \index{tokens} TRUE-TOKENS and FALSE-TOKENS are zero or more general parser tokens, possibly including nested preprocessor conditionals, that are pasted into the input stream if the condition is true or false. For example, the following code induces a parse error unless the target kernel version is newer than 2.6.5. \begin{vindent} \begin{verbatim} %( kernel_v <= "2.6.5" %? **ERROR** %) # invalid token sequence \end{verbatim} \end{vindent} The following code adapts to hypothetical kernel version drift. \begin{vindent} \begin{verbatim} probe kernel.function ( %( kernel_v <= "2.6.12" %? "__mm_do_fault" %: %( kernel_vr == "2.6.13-1.8273FC3smp" %? "do_page_fault" %: UNSUPPORTED %) %)) { /* ... */ } %( arch == "ia64" %? probe syscall.vliw = kernel.function("vliw_widget") {} %) \end{verbatim} \end{vindent} The following code adapts to the presence of a kernel CONFIG option. \begin{vindent} \begin{verbatim} %( CONFIG_UTRACE == "y" %? probe process.syscall {} %) \end{verbatim} \end{vindent} \subsection{Preprocessor macros} This feature lets scripts eliminate some types of repetition. \subsubsection{Local macros} The preprocessor also supports a simple macro facility. Macros taking zero or more arguments are defined using the following construct: \begin{vindent} \begin{verbatim} @define NAME %( BODY %) @define NAME(PARAM_1, PARAM_2, ...) %( BODY %) \end{verbatim} \end{vindent} Macro arguments are referred to in the body by prefixing the argument name with an \texttt{@} symbol. Likewise, once defined, macros are invoked by prefixing the macro name with an \texttt{@} symbol: \begin{vindent} \begin{verbatim} @define foo %( x %) @define add(a,b) %( ((@a)+(@b)) %) @foo = @add(2,2) \end{verbatim} \end{vindent} Macro expansion is currently performed in a separate pass before conditional compilation. Therefore, both TRUE- and FALSE-tokens in conditional expressions will be macroexpanded regardless of how the condition is evaluated. This can sometimes lead to errors: \begin{vindent} \begin{verbatim} // The following results in a conflict: %( CONFIG_UTRACE == "y" %? @define foo %( process.syscall %) %: @define foo %( **ERROR** %) %) // The following works properly as expected: @define foo %( %( CONFIG_UTRACE == "y" %? process.syscall %: **ERROR** %) %) \end{verbatim} \end{vindent} The first example is incorrect because both \texttt{@define}s are evaluated in a pass prior to the conditional being evaluated. \subsubsection{Library macros} Normally, a macro definition is local to the file it occurs in. Thus, defining a macro in a tapset does not make it available to the user of the tapset. Publically available library macros can be defined by including \texttt{.stpm} files on the tapset search path. These files may only contain \texttt{@define} constructs, which become visible across all tapsets and user scripts. \section{Statement types\label{sec:Statement-Types}} Statements enable procedural control flow within functions and probe handlers. The total number of statements executed in response to any single probe event is limited to MAXACTION, which defaults to 1000. See Section~\ref{sub:SystemTap-safety}. \subsection{break and continue} \index{break} \index{continue} Use \texttt{break} or \texttt{continue} to exit or iterate the innermost nesting loop statement, such as within a \texttt{while, for,} or \texttt{foreach} statement. The syntax and semantics are the same as those used in C. \subsection{try/catch} \index{try} \index{catch} Use \texttt{try}/\texttt{catch} to handle most kinds of run-time errors within the script instead of aborting the probe handler in progress. The semantics are similar to C++ in that try/catch blocks may be nested. The error string may be captured by optionally naming a variable which is to receive it. \begin{vindent} \begin{verbatim} try { /* do something */ /* trigger error like kread(0), or divide by zero, or error("foo") */ } catch (msg) { /* omit (msg) entirely if not interested */ /* println("caught error ", msg) */ /* handle error */ } /* execution continues */ \end{verbatim} \end{vindent} \subsection{delete\label{sub:delete}} \index{delete} \texttt{delete} removes an element. The following statement removes from ARRAY the element specified by the index tuple. The value will no longer be available, and subsequent iterations will not report the element. It is not an error to delete an element that does not exist. \begin{vindent} \begin{verbatim} delete ARRAY[INDEX1, INDEX2, ...] \end{verbatim} \end{vindent} The following syntax removes all elements from ARRAY: \begin{vindent} \begin{verbatim} delete ARRAY \end{verbatim} \end{vindent} The following statement removes the value of SCALAR. Integers and strings are cleared to zero and null (\char`\"{}\char`\"{}) respectively, while statistics are reset to their initial empty state. \begin{vindent} \begin{verbatim} delete SCALAR \end{verbatim} \end{vindent} \subsection{EXP (expression)} \index{expression} An \texttt{expression} executes a string- or integer-valued expression and discards the value. \subsection{for} \index{for} General syntax: \begin{vindent} \begin{verbatim} for (EXP1; EXP2; EXP3) STMT \end{verbatim} \end{vindent} The \texttt{for} statement is similar to the \texttt{for} statement in C. The \texttt{for} expression executes EXP1 as initialization. While EXP2 is non-zero, it executes STMT, then the iteration expression EXP3. \subsection{foreach\label{sub:foreach}} \index{foreach} General syntax: \begin{vindent} \begin{verbatim} foreach (VAR in ARRAY) STMT \end{verbatim} \end{vindent} The \texttt{foreach} statement loops over each element of a named global array, assigning the current key to VAR. The array must not be modified within the statement. If you add a single plus (+) or minus (-) operator after the VAR or the ARRAY identifier, the iteration order will be sorted by the ascending or descending index or value. The following statement behaves the same as the first example, except it is used when an array is indexed with a tuple of keys. Use a sorting suffix on at most one VAR or ARRAY identifier. \begin{vindent} \begin{verbatim} foreach ([VAR1, VAR2, ...] in ARRAY) STMT \end{verbatim} \end{vindent} You can combine the first and second syntax to capture both the full tuple and the keys at the same time as follows. \begin{vindent} \begin{verbatim} foreach (VAR = [VAR1, VAR2, ...] in ARRAY) STMT \end{verbatim} \end{vindent} The following statement is the same as the first example, except that the \texttt{limit} keyword limits the number of loop iterations to EXP times. EXP is evaluated once at the beginning of the loop. \begin{vindent} \begin{verbatim} foreach (VAR in ARRAY limit EXP) STMT \end{verbatim} \end{vindent} \subsection{if} \index{if} General syntax: \begin{vindent} \begin{verbatim} if (EXP) STMT1 [ else STMT2 ] \end{verbatim} \end{vindent} The \texttt{if} statement compares an integer-valued EXP to zero. It executes the first STMT if non-zero, or the second STMT if zero. The \texttt{if} command has the same syntax and semantics as used in C. \subsection{next} \index{next} The \texttt{next} statement returns immediately from the enclosing probe handler. When used in functions, the execution will be immediately transferred to the next overloaded function. \subsection{; (null statement)} \index{;} \index{null statement} General syntax: \begin{vindent} \begin{verbatim} statement1 ; statement2 \end{verbatim} \end{vindent} The semicolon represents the null statement, or do nothing. It is useful as an optional separator between statements to improve syntax error detection and to handle certain grammar ambiguities. \subsection{return} \index{return} General syntax: \begin{vindent} \begin{verbatim} return EXP \end{verbatim} \end{vindent} The \texttt{return} statement returns the EXP value from the enclosing function. If the value of the function is not returned, then a return statement is not needed, and the function will have a special \emph{unknown} type with no return value. \subsection{\{ \} (statement block)} \index{\{ \}} \index{statement block} This is the statement block with zero or more statements enclosed within brackets. The following is the general syntax: \begin{vindent} \begin{verbatim} { STMT1 STMT2 ... } \end{verbatim} \end{vindent} The statement block executes each statement in sequence in the block. Separators or terminators are generally not necessary between statements. The statement block uses the same syntax and semantics as in C. \subsection{while} \index{while} General syntax: \begin{vindent} \begin{verbatim} while (EXP) STMT \end{verbatim} \end{vindent} The \texttt{while} statement uses the same syntax and semantics as in C. In the statement above, while the integer-valued EXP evaluates to non-zero, the parser will execute STMT. \section{Associative arrays\label{sec:Associative-Arrays}} \index{associative arrays} Associative arrays are implemented as hash tables with a maximum size set at startup. Associative arrays are too large to be created dynamically for individual probe handler runs, so they must be declared as global. The basic operations for arrays are setting and looking up elements. These operations are expressed in awk syntax: the array name followed by an opening bracket ({[}), a comma-separated list of up to nine index index expressions, and a closing bracket (]). Each index expression may be a string or a number, as long as it is consistently typed throughout the script. \subsection{Examples} \begin{vindent} \begin{verbatim} # Increment the named array slot: foo [4,"hello"] ++ # Update a statistic: processusage [uid(),execname()] ++ # Set a timestamp reference point: times [tid()] = get_cycles() # Compute a timestamp delta: delta = get_cycles() - times [tid()] \end{verbatim} \end{vindent} \subsection{Types of values} Array elements may be set to a number, a string, or an aggregate. The type must be consistent throughout the use of the array. The first assignment to the array defines the type of the elements. Unset array elements may be fetched and return a null value (zero or empty string) as appropriate, but they are not seen by a membership test. \subsection{Array capacity} Array sizes can be specified explicitly or allowed to default to the maximum size as defined by MAXMAPENTRIES. See Section~\ref{sub:SystemTap-safety} for details on changing MAXMAPENTRIES. You can explicitly specify the size of an array as follows: \begin{vindent} \begin{verbatim} global ARRAY[] \end{verbatim} \end{vindent} If you do not specify the size parameter, then the array is created to hold MAXMAPENTRIES number of elements. \subsection{Array wrapping\label{sub:Array-Wrapping}} Arrays may be wrapped using the percentage symbol (\%) causing previously entered elements to be overwritten if more elements are inserted than the array can hold. This works for both regular and statistics typed arrays. You can mark arrays for wrapping as follows: \begin{vindent} \begin{verbatim} global ARRAY1%[], ARRAY2% \end{verbatim} \end{vindent} \subsection{Iteration, foreach} \index{foreach} Like awk, SystemTap's foreach creates a loop that iterates over key tuples of an array, not only values. The iteration may be sorted by any single key or a value by adding an extra plus symbol (+) or minus symbol (-) to the code or limited to only a few elements with the limit keyword. The following are examples. \begin{vindent} \begin{verbatim} # Simple loop in arbitrary sequence: foreach ([a,b] in foo) fuss_with(foo[a,b]) # Loop in increasing sequence of value: foreach ([a,b] in foo+) { ... } # Loop in decreasing sequence of first key: foreach ([a-,b] in foo) { ... } # Print the first 10 tuples and values in the array in decreasing sequence foreach (v = [i,j] in foo- limit 10) printf("foo[%d,%s] = %d\n", i, j, v) \end{verbatim} \end{vindent} The \texttt{break} and \texttt{continue} statements also work inside foreach loops. Since arrays can be large but probe handlers must execute quickly, you should write scripts that exit iteration early, if possible. For simplicity, SystemTap forbids any modification of an array during iteration with a foreach. For a full description of \texttt{foreach} see subsection \ref{sub:foreach}. \subsection{Deletion} \index{delete} The \texttt{delete} statement can either remove a single element by index from an array or clear an entire array at once. See subsection \ref{sub:delete} for details and examples. \section{Statistics (aggregates)\label{sec:Statistics}} \index{aggregates} Aggregate instances are used to collect statistics on numerical values, when it is important to accumulate new data quickly and in large volume. These instances operate without exclusive locks, and store only aggregated stream statistics. Aggregates make sense only for global variables. They are stored individually or as elements of an associative array. For information about wrapping associative arrays with statistics elements, see section~\ref{sub:Array-Wrapping} \subsection{The aggregation (\textless\hspace{1 sp}\textless\hspace{1 sp}\textless) operator} \index{\textless\hspace{1 sp}\textless\hspace{1 sp}\textless} The aggregation operator is {}``\textless\hspace{1 sp}\textless\hspace{1 sp}\textless'', and its effect is similar to an assignment or a C++ output streaming operation. The left operand specifies a scalar or array-index \emph{l-value}, which must be declared global. The right operand is a numeric expression. The meaning is intuitive: add the given number as a sample to the set of numbers to compute their statistics. The specific list of statistics to gather is given separately by the extraction functions. The following is an example. \begin{vindent} \begin{verbatim} a <<< delta_timestamp writes[execname()] <<< count \end{verbatim} \end{vindent} \subsection{Extraction functions} \index{extraction} For each instance of a distinct extraction function operating on a given identifier, the translator computes a set of statistics. With each execution of an extraction function, the aggregation is computed for that moment across all processors. The first argument of each function is the same style of l-value as used on the left side of the aggregation operation. \subsection{Integer extractors} The following functions provide methods to extract information about aggregate. \subsubsection{@count(s)} \index{count} This statement returns the number of samples accumulated in aggregate s. \subsubsection{@sum(s)} \index{sum} This statement returns the total sum of all samples in aggregate s. \subsubsection{@min(s)} \index{min} This statement returns the minimum of all samples in aggregate s. \subsubsection{@max(s)} \index{max} This statement returns the maximum of all samples in aggregate s. \subsubsection{@avg(s)} \index{avg} This statement returns the average value of all samples in aggregate s. \subsection{Histogram extractors} \index{histograms} The following functions provide methods to extract histogram information. Printing a histogram with the print family of functions renders a histogram object as a tabular "ASCII art" bar chart. \subsubsection{@hist\_linear} \index{hist\_linear} The statement \texttt{@hist\_linear(v,L,H,W)} represents a linear histogram of aggregate \texttt{v}, where \emph{L} and \emph{H} represent the lower and upper end of a range of values and \emph{W} represents the width (or size) of each bucket within the range. The low and high values can be negative, but the overall difference (high minus low) must be positive. The width parameter must also be positive. In the output, a range of consecutive empty buckets may be replaced with a tilde (\textasciitilde{}) character. This can be controlled on the command line with -DHIST\_ELISION=\textless\hspace{1 sp}num\textgreater\hspace{1 sp}, where \textless\hspace{1 sp}num\textgreater\hspace{1 sp} specifies how many empty buckets at the top and bottom of the range to print. The default is 2. A \textless\hspace{1 sp}num\textgreater\hspace{1 sp} of 0 removes all empty buckets. A negative \textless\hspace{1 sp}num\textgreater\hspace{1 sp} disables removal. For example, if you specify -DHIST\_ELISION=3 and the histogram has 10 consecutive empty buckets, the first 3 and last 3 empty buckets will be printed and the middle 4 empty buckets will be represented by a tilde (\textasciitilde{}). The following is an example. \begin{vindent} \begin{verbatim} global reads probe netdev.receive { reads <<< length } probe end { print(@hist_linear(reads, 0, 10240, 200)) } \end{verbatim} \end{vindent} This generates the following output. \begin{samepage} \begin{vindent} \begin{verbatim} value |-------------------------------------------------- count 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1650 200 | 8 400 | 0 600 | 0 ~ 1000 | 0 1200 | 0 1400 | 1 1600 | 0 1800 | 0 \end{verbatim} \end{vindent} \end{samepage} This shows that 1650 network reads were of a size between 0 and 199 bytes, 8 reads were between 200 and 399 bytes, and 1 read was between 1200 and 1399 bytes. The tilde (\textasciitilde{}) character indicates the bucket for 800 to 999 bytes was removed because it was empty. Empty buckets for 2000 bytes and larger were also removed because they were empty. \subsubsection{@hist\_log} \index{hist\_log} The statement \texttt{@hist\_log(v)} represents a base-2 logarithmic histogram. Empty buckets are replaced with a tilde (\textasciitilde{}) character in the same way as \texttt{@hist\_linear()} (see above). The following is an example. \begin{vindent} \begin{verbatim} global reads probe netdev.receive { reads <<< length } probe end { print(@hist_log(reads)) } \end{verbatim} \end{vindent} This generates the following output. \begin{samepage} \begin{vindent} \begin{verbatim} value |-------------------------------------------------- count 8 | 0 16 | 0 32 | 254 64 | 3 128 | 2 256 | 2 512 | 4 1024 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 16689 2048 | 0 4096 | 0 \end{verbatim} \end{vindent} \end{samepage} \subsection{Deletion} \index{delete} The \texttt{delete} statement (subsection \ref{sub:delete}) applied to an aggregate variable will reset it to the initial empty state. \section{Formatted output} \subsection{print} \index{print} General syntax: \begin{vindent} \begin{verbatim} print () \end{verbatim} \end{vindent} This function prints a single value of any type. \subsection{printf} \index{printf} General syntax: \begin{vindent} \begin{verbatim} printf (fmt:string, ...) \end{verbatim} \end{vindent} The printf function takes a formatting string as an argument, and a number of values of corresponding types, and prints them all. The format must be a literal string constant. The printf formatting directives are similar to those of C, except that they are fully checked for type by the translator. The formatting string can contain tags that are defined as follows: \begin{vindent} \begin{verbatim} %[flags][width][.precision][length]specifier \end{verbatim} \end{vindent} Where \texttt{specifier} is required and defines the type and the interpretation of the value of the corresponding argument. The following table shows the details of the specifier parameter: \begin{table}[H] \caption{printf specifier values} \begin{tabular}{|>{\raggedright}p{1in}|>{\raggedright}p{3.5in}|>{\raggedright}p{1.25in}|} \hline \textbf{Specifier}& \textbf{Output}& \textbf{Example}\tabularnewline \hline \hline d or i& Signed decimal& 392\tabularnewline \hline o& Unsigned octal& 610\tabularnewline \hline s& String& sample\tabularnewline \hline u& Unsigned decimal& 7235\tabularnewline \hline x& Unsigned hexadecimal (lowercase letters)& 7fa\tabularnewline \hline X& Unsigned hexadecimal (uppercase letters)& 7FA\tabularnewline \hline p& Pointer address& 0x0000000000bc614e\tabularnewline \hline b& Writes a binary value as text using the computer's native byte order. The field width specifies the number of bytes to write. Valid specifications are \%b, \%1b, \%2b, \%4b and \%8b. The default width is 8 (64-bits).& See below\tabularnewline \hline \%& A \% followed by another \% character will write \% to stdout.& \%\tabularnewline \hline \end{tabular} \end{table} The tag can also contain \texttt{flags}, \texttt{width}, \texttt{.precision} and \texttt{modifiers} sub-specifiers, which are optional and follow these specifications: \begin{table}[H] \caption{printf flag values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Flags}& \textbf{Description}\tabularnewline \hline \hline - (minus sign)& Left-justify within the given field width. Right justification is the default (see \texttt{width} sub-specifier).\tabularnewline \hline + (plus sign)& Precede the result with a plus or minus sign even for positive numbers. By default, only negative numbers are preceded with a minus sign.\tabularnewline \hline (space)& If no sign is going to be written, a blank space is inserted before the value.\tabularnewline \hline \#& Used with \texttt{o}, \texttt{x} or \texttt{X} specifiers the value is preceded with \texttt{0}, \texttt{0x} or \texttt{0X} respectively for non-zero values.\tabularnewline \hline 0& Left-pads the number with zeroes instead of spaces, where padding is specified (see \texttt{width} sub-specifier).\tabularnewline \hline \end{tabular} \end{table} \begin{table}[H] \caption{printf width values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Width}& \textbf{Description}\tabularnewline \hline \hline (number)& Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger.\tabularnewline \hline \end{tabular} \end{table} % \begin{table}[H] \caption{printf precision values} \begin{tabular}{|>{\raggedright}p{1.5in}|>{\raggedright}p{4.5in}|} \hline \textbf{Precision}& \textbf{Description}\tabularnewline \hline \hline .number& For integer specifiers (\texttt{d, i, o, u, x, X}): \texttt{precision} specifies the minimum number of digits to be written. If the value to be written is shorter than this number, the result is padded with leading zeros. The value is not truncated even if the result is longer. A precision of 0 means that no character is written for the value 0. For s: this is the maximum number of characters to be printed. By default all characters are printed until the ending null character is encountered. When no \texttt{precision} is specified, the default is 1. If the period is specified without an explicit value for \texttt{precision}, 0 is assumed.\tabularnewline \hline \end{tabular} \end{table} \textbf{Binary Write Examples} The following is an example of using the binary write functions: \begin{vindent} \begin{verbatim} probe begin { for (i = 97; i < 110; i++) printf("%3d: %1b%1b%1b\n", i, i, i-32, i-64) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 97: aA! 98: bB" 99: cC# 100: dD$ 101: eE% 102: fF& 103: gG' 104: hH( 105: iI) 106: jJ* 107: kK+ 108: lL, 109: mM- \end{verbatim} \end{vindent} Another example: \begin{vindent} \begin{verbatim} stap -e 'probe begin{printf("%b%b", 0xc0dedbad, \ 0x12345678);exit()}' | hexdump -C \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} 00000000 ad db de c0 00 00 00 00 78 56 34 12 00 00 00 00 |........xV4.....| 00000010 \end{verbatim} \end{vindent} Another example: \begin{vindent} \begin{verbatim} probe begin{ printf("%1b%1b%1blo %1b%1brld\n", 72,101,108,87,111) exit() } \end{verbatim} \end{vindent} This prints: \begin{vindent} \begin{verbatim} Hello World \end{verbatim} \end{vindent} \subsection{printd} \index{printd} General syntax: \begin{vindent} \begin{verbatim} printd (delimiter:string, ...) \end{verbatim} \end{vindent} This function takes a string delimiter and two or more values of any type, then prints the values with the delimiter interposed. The delimiter must be a literal string constant. For example: \begin{vindent} \begin{verbatim} printd("/", "one", "two", "three", 4, 5, 6) \end{verbatim} \end{vindent} prints: \begin{vindent} \begin{verbatim} one/two/three/4/5/6 \end{verbatim} \end{vindent} \subsection{printdln} \index{printdln} General syntax: \begin{vindent} \begin{verbatim} printdln (delimiter:string, ...) \end{verbatim} \end{vindent} This function operates like \texttt{printd}, but also appends a newline. \subsection{println} \index{println} General syntax: \begin{vindent} \begin{verbatim} println () \end{verbatim} \end{vindent} This function prints a single value like \texttt{print}, but also appends a newline. \subsection{sprint} \index{sprint} General syntax: \begin{vindent} \begin{verbatim} sprint:string () \end{verbatim} \end{vindent} This function operates like \texttt{print}, but returns the string rather than printing it. \subsection{sprintf} \index{sprintf} General syntax: \begin{vindent} \begin{verbatim} sprintf:string (fmt:string, ...) \end{verbatim} \end{vindent} This function operates like \texttt{printf}, but returns the formatted string rather than printing it. \section{Tapset-defined functions\label{sec:Predefined-Functions}} Unlike built-in functions, tapset-defined functions are implemented in tapset scripts. These are individually documented in the in \texttt{tapset::*(3stap)}, \texttt{function::*(3stap)}, and \texttt{probe::*(3stap)} man pages, and implemented under \texttt{/usr/share/systemtap/tapset}. \section{For Further Reference\label{sec:For-Further-Reference}} For more information, see: \begin{itemize} \item The SystemTap tutorial at \url{http://sourceware.org/systemtap/tutorial/} \item The SystemTap wiki at \url{http://sourceware.org/systemtap/wiki} \item The SystemTap documentation page at \url{http://sourceware.org/systemtap/documentation.html} \item From an unpacked source tarball or GIT directory, the examples in in the src/examples directory, the tapsets in the src/tapset directory, and the test scripts in the src/testsuite directory. \item The man pages for tapsets. For a list, run the command \texttt{{}``man -k tapset::}''. \item The man pages for individual probe points. For a list, run the command \texttt{{}``man -k probe::}''. \item The man pages for individual systemtap functions. For a list, run the command \texttt{{}``man -k function::}''. \end {itemize} \setcounter{secnumdepth}{0} \newpage{} \addcontentsline{toc}{section}{Index} \printindex{} \end{document} systemtap-4.6/doc/tutorial.tex000066400000000000000000001475351414446751200165750ustar00rootroot00000000000000% Copyright (C) 2005-2013 Red Hat Inc. % This file is part of systemtap, and is free software. You can % redistribute it and/or modify it under the terms of the GNU General % Public License (GPL); either version 2, or (at your option) any % later version. \documentclass[compatible]{article} % \usepackage{html} \usepackage{graphicx} % \usepackage{moreverb} \usepackage{fancyvrb} \usepackage{listings} \usepackage{fullpage} \usepackage{fancybox} % \usepackage{nomencl} % \usepackage{geometry} % \geometry{letterpaper,text={7in,8.5in}} \usepackage{charter} \newenvironment{boxedminipage}%% Boxed minipage {\begin{center}\begin{Sbox}\begin{minipage}}% {\end{minipage}\end{Sbox}\fbox{\TheSbox}\end{center}} \newcommand{\nomenclature}[2]{} % \usepackage{draftcopy} % ugly \bibliographystyle{plain} \makeglossary \parindent0.0cm \parskip0.2cm \begin{document} \begin{center} \LARGE {\bf Systemtap tutorial} \end{center} \hfill \begin{minipage}{2.5in} % contributors please add your names to the list Frank Ch. Eigler {\tt \small } \\ \hfill \today \end{minipage} \tableofcontents \section{Introduction} Systemtap is a tool that allows developers and administrators to write and reuse simple scripts to deeply examine the activities of a live Linux system. Data may be extracted, filtered, and summarized quickly and safely, to enable diagnoses of complex performance or functional problems. {\bf NOTE:} This tutorial does not describe every feature available in systemtap. Please see the individual {\verb+stap+} manual pages for the most up-to-date information. These may be available installed on your system, or at \verb+http://sourceware.org/systemtap/man/+. \nomenclature{script}{A simple programming language understood by systemtap.} The essential idea behind a systemtap script is to name {\em events}, and to give them {\em handlers}. Whenever a specified event occurs, the Linux kernel runs the handler as if it were a quick subroutine, then resumes. There are several kind of events, such as entering or exiting a function, a timer expiring, or the entire systemtap session starting or stopping. A handler is a series of script language statements that specify the work to be done whenever the event occurs. This work normally includes extracting data from the event context, storing them into internal variables, or printing results. \nomenclature{event}{An identifiable instant in the operating system's execution state, such as entry to a function, or expiry of a timer.} \nomenclature{session}{A complete run of a systemtap script program.} \nomenclature{handler}{A series of statements, written in script, which is to be performed whenever an event occurs.} \nomenclature{\tt .stp}{The standard file name extension for systemtap scripts.} Systemtap works by translating the script to C, running the system C compiler to create a kernel module from that. When the module is loaded, it activates all the probed events by hooking into the kernel. Then, as events occur on any processor, the compiled handlers run. Eventually, the session stops, the hooks are disconnected, and the module removed. This entire process is driven from a single command-line program, \verb+stap+. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat hello-world.stp probe begin { print ("hello world\n") exit () } # stap hello-world.stp hello world \end{verbatim} \end{boxedminipage} \label{fig:hello-world} \caption{A systemtap smoke test.} \end{figure} This paper assumes that you have installed systemtap and its prerequisite kernel development tools and debugging data, so that you can run the scripts such as the simple one in Figure~\ref{fig:hello-world}. Log on as \verb+root+, or even better, login as a user that is a member of \verb+stapdev+ group or as a user authorized to \verb+sudo+, before running systemtap. \begin{figure}[ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat strace-open.stp probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } # stap strace-open.stp vmware-guestd(2206) open ("/etc/redhat-release", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) df(3433) open ("/etc/ld.so.cache", O_RDONLY) df(3433) open ("/lib/tls/libc.so.6", O_RDONLY) df(3433) open ("/etc/mtab", O_RDONLY) hald(2360) open ("/dev/hdc", O_RDONLY|O_EXCL|O_NONBLOCK) \end{verbatim} \end{boxedminipage} \label{fig:strace-open} \caption{A taste of systemtap: a system-wide {\tt strace}, just for the {\tt open} system call.} \end{figure} \nomenclature{strace}{A standard ptrace-based command line tool to trace system call activity of a process.} \section{Tracing} The simplest kind of probe is simply to {\em trace} an event. \nomenclature{trace}{A compact textual record of an event occurrence.} This is the effect of inserting strategically located \verb+print+ statements into a program. This is often the first step of problem solving: explore by seeing a history of what has happened. This style of instrumentation is the simplest. It just asks systemtap to print something at each event. To express this in the script language, you need to say where to probe and what to print there. \subsection{Where to probe} Systemtap supports a number of built-in events. The library of scripts that comes with systemtap, each called a ``tapset'', may define additional ones defined in terms of the built-in family. {\bf See the \verb+stapprobes+ man page for details on these and many other probe point families.} \nomenclature{tapset}{A reusable script forming part of the automatically searched tapset library.} All these events are named using a unified syntax with dot-separated parameterized identifiers: \begin{tabular}{rl} \verb+begin+ & The startup of the systemtap session. \\ \verb+end+ & The end of the systemtap session. \\ \verb+kernel.function("sys_open")+ & The entry to the function named \verb+sys_open+ in the kernel. \\ \verb+syscall.close.return+ & The return from the \verb+close+ system call. \\ \verb+module("ext3").statement(0xdeadbeef)+ & The addressed instruction in the \verb+ext3+ filesystem driver. \\ \verb+timer.ms(200)+ & A timer that fires every 200 milliseconds. \\ \verb+timer.profile+ & A timer that fires periodically on every CPU. \\ \verb+perf.hw.cache_misses+ & A particular number of CPU cache misses have occurred. \\ \verb+procfs("status").read+ & A process trying to read a synthetic file. \\ \verb+process("a.out").statement("*@main.c:200")+ & Line 200 of the \verb+a.out+ program. \end{tabular} Let's say that you would like to trace all function entries and exits in a source file, say \verb+net/socket.c+ in the kernel. The \verb+kernel.function+ probe point lets you express that easily, since systemtap examines the kernel's debugging information to relate object code to source code. It works like a debugger: if you can name or place it, you can probe it. Use \verb+kernel.function("*@net/socket.c").call+ for the function entries\footnote{Without the {\tt .call} qualifier, inlined function instances are also probed, but they have no corresponding {\tt .return}.}, and \verb+kernel.function("*@net/socket.c").return+ for matching exits. Note the use of wildcards in the function name part, and the subsequent \verb+@FILENAME+ part. You can also put wildcards into the file name, and even add a colon (\verb+:+) and a line number, if you want to restrict the search that precisely. Since systemtap will put a separate probe in every place that matches a probe point, a few wildcards can expand to hundreds or thousands of probes, so be careful what you ask for. \nomenclature{debug information}{Data created by the compiler when the kernel or application was built, sometimes packaged into {\tt debuginfo} files, for use by a symbolic debugger.} \nomenclature{wildcard}{Presence of \verb+*+ globbing patterns in probe points.} Once you identify the probe points, the skeleton of the systemtap script appears. The \verb+probe+ keyword introduces a probe point, or a comma-separated list of them. The following \verb+{+ and \verb+}+ braces enclose the handler for all listed probe points. \begin{verbatim} probe kernel.function("*@net/socket.c") { } probe kernel.function("*@net/socket.c").return { } \end{verbatim} You can run this script as is, though with empty handlers there will be no output. Put the two lines into a new file. Run \verb+stap -v FILE+. Terminate it any time with \verb+^C+. (The \verb+-v+ option tells systemtap to print more verbose messages during its processing. Try the \verb+-h+ option to see more options.) \subsection{What to print} Since you are interested in each function that was entered and exited, a line should be printed for each, containing the function name. In order to make that list easy to read, systemtap should indent the lines so that functions called by other traced functions are nested deeper. To tell each single process apart from any others that may be running concurrently, systemtap should also print the process ID in the line. Systemtap provides a variety of such contextual data, ready for formatting. They usually appear as function calls within the handler, like you already saw in Figure~\ref{fig:strace-open}. {\bf See the \verb+function::*+ man pages for those functions and more defined in the tapset library}, but here's a sampling: \begin{tabular}{rl} \verb+tid()+ & The id of the current thread. \\ \verb+pid()+ & The process (task group) id of the current thread. \\ \verb+uid()+ & The id of the current user. \\ \verb+execname()+ & The name of the current process. \\ \verb+cpu()+ & The current cpu number. \\ \verb+gettimeofday_s()+ & Number of seconds since epoch. \\ \verb+get_cycles()+ & Snapshot of hardware cycle counter. \\ \verb+pp()+ & A string describing the probe point being currently handled. \\ \verb+ppfunc()+ & If known, the the function name in which this probe was placed. \\ \verb+$$vars+ & If available, a pretty-printed listing of all local variables in scope. \\ \verb+print_backtrace()+ & If possible, print a kernel backtrace. \\ \verb+print_ubacktrace()+ & If possible, print a user-space backtrace. \\ \end{tabular} The values returned may be strings or numbers. The \verb+print()+ built-in function accepts either as its sole argument. Or, you can use the C-style \verb+printf()+ built-in, whose formatting argument may include \verb+%s+ for a string, \verb+%d+ for a number. \verb+printf+ and other functions take comma-separated arguments. Don't forget a \verb+"\n"+ at the end. There exist more printing / formatting functions too. A particularly handy function in the tapset library is \verb+thread_indent+. Given an indentation delta parameter, it stores internally an indentation counter for each thread (\verb+tid()+), and returns a string with some generic trace data plus an appropriate number of indentation spaces. That generic data includes a timestamp (number of microseconds since the initial indentation for the thread), a process name and the thread id itself. It therefore gives an idea not only about what functions were called, but who called them, and how long they took. Figure~\ref{fig:socket-trace} shows the finished script. It lacks a call to the \verb+exit()+ function, so you need to interrupt it with \verb+^C+ when you want the tracing to stop. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat socket-trace.stp probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), ppfunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), ppfunc()) } # stap socket-trace.stp 0 hald(2632): -> sock_poll 28 hald(2632): <- sock_poll [...] 0 ftp(7223): -> sys_socketcall 1159 ftp(7223): -> sys_socket 2173 ftp(7223): -> __sock_create 2286 ftp(7223): -> sock_alloc_inode 2737 ftp(7223): <- sock_alloc_inode 3349 ftp(7223): -> sock_alloc 3389 ftp(7223): <- sock_alloc 3417 ftp(7223): <- __sock_create 4117 ftp(7223): -> sock_create 4160 ftp(7223): <- sock_create 4301 ftp(7223): -> sock_map_fd 4644 ftp(7223): -> sock_map_file 4699 ftp(7223): <- sock_map_file 4715 ftp(7223): <- sock_map_fd 4732 ftp(7223): <- sys_socket 4775 ftp(7223): <- sys_socketcall [...] \end{verbatim} \end{boxedminipage} \caption{Tracing and timing functions in {\tt net/sockets.c}.} \label{fig:socket-trace} \end{figure} \subsection{Exercises} \begin{enumerate} \item Use the \verb+-L+ option to systemtap to list all the kernel functions named with the word ``nit'' in them. \item Trace some system calls (use \verb+syscall.NAME+ and \verb+.return+ probe points), with the same \verb+thread_indent+ probe handler as in Figure~\ref{fig:socket-trace}. Print parameters using \verb+$$parms+ and \verb+$$return+. Interpret the results. \item Change figure~\ref{fig:socket-trace} by removing the \verb+.call+ modifier from the first probe. Note how function entry and function return now don't match anymore. This is because now the first probe will match both normal function entry and inlined functions. Try putting the \verb+.call+ modifier back and add another probe just for \verb+probe kernel.function("*@net/socket.c").inline+ What \verb+printf+ statement can you come up with in the probe handler to show the inlined function entries nicely in between the \verb+.call+ and \verb+.return+ thread indented output? \end{enumerate} \section{Analysis} Pages of generic tracing text may give you enough information for exploring a system. With systemtap, it is possible to analyze that data, to filter, aggregate, transform, and summarize it. Different probes can work together to share data. Probe handlers can use a rich set of control constructs to describe algorithms, with a syntax taken roughly from \verb+awk+. With these tools, systemtap scripts can focus on a specific question and provide a compact response: no \verb+grep+ needed. \nomenclature{awk}{A classic UNIX stream processing language.} \subsection{Basic constructs} Most systemtap scripts include conditionals, to limit tracing or other logic to those processes or users or {\em whatever} of interest. The syntax is simple: \begin{tabular}{rl} \verb+if (+{\em EXPR}\verb+)+ {\em STATEMENT} [\verb+else+ {\em STATEMENT}\verb+]+ & if/else statement \\ \verb+while (+{\em EXPR}\verb+)+ {\em STATEMENT} & while loop \\ \verb+for (+{\em A}\verb+;+ {\em B}\verb+;+ {\em C}\verb+)+ {\em STATEMENT} & for loop \\ \end{tabular} Scripts may use \verb+break+/\verb+continue+ as in C. Probe handlers can return early using \verb+next+ as in \verb+awk+. Blocks of statements are enclosed in \verb+{+ and \verb+}+. In systemtap, the semicolon (\verb+;+) is accepted as a null statement rather than as a statement terminator, so is only rarely\footnote{Use them between consecutive expressions that place unary {\tt +},{\tt -} or mixed pre/post {\tt ++},{\tt --} in an ambiguous manner.} necessary. Shell-style (\verb+#+), C-style (\verb+/* */+), and C++-style (\verb+//+) comments are all accepted. Expressions look like C or \verb+awk+, and support the usual operators, precedences, and numeric literals. Strings are treated as atomic values rather than arrays of characters. String concatenation is done with the dot (\verb+"a" . "b"+). Some examples: \begin{tabular}{rl} \verb+(uid() > 100)+ & probably an ordinary user \\ \verb+(execname() == "sed")+ & current process is sed \\ \verb+(cpu() == 0 && gettimeofday_s() > 1140498000)+ & after Feb. 21, 2006, on CPU 0 \\ \verb+"hello" . " " . "world"+ & a string in three easy pieces \\ \end{tabular} Variables may be used as well. Just pick a name, assign to it, and use it in expressions. They are automatically initialized and declared. The type of each identifier -- string vs. number -- is automatically inferred by systemtap from the kinds of operators and literals used on it. Any inconsistencies will be reported as errors. Conversion between string and number types is done through explicit function calls. \nomenclature{type}{A designation of each identifier such as a variable, or function, or array value or index, as containing a string or number.} \nomenclature{string}{A \verb+\0+-terminated character string of up to a fixed limit in length.} \nomenclature{number}{A 64-bit signed integer.} \nomenclature{type inference}{The automatic determination of the type of each variable, function parameter, array value and index, based on their use.} \begin{tabular}{rl} \verb+foo = gettimeofday_s()+ & foo is a number \\ \verb+bar = "/usr/bin/" . execname()+ & bar is a string \\ \verb|c++| & c is a number \\ \verb+s = sprint(2345)+ & s becomes the string "2345" \\ \end{tabular} By default, variables are local to the probe they are used in. That is, they are initialized, used, and disposed of at each probe handler invocation. To share variables between probes, declare them global anywhere in the script. Because of possible concurrency (multiple probe handlers running on different CPUs), each global variable used by a probe is automatically read- or write-locked while the handler is running. \nomenclature{global variable}{A scalar, array, or aggregate that was named in a \verb+global+ declaration, sharing that object amongst all probe handlers and functions executed during a systemtap session.} \nomenclature{locking}{An automated facility used by systemtap to protect global variables against concurrent modification and/or access.} \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat timer-jiffies.stp global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } # stap timer-jiffies.stp jiffies:ms ratio 30:123 => CONFIG_HZ=243 \end{verbatim} \end{boxedminipage} \caption{Experimentally measuring {\tt CONFIG\_HZ}.} \label{fig:timer-jiffies} \end{figure} \subsection{Target variables} A class of special ``target variables'' allow access to the probe point context. \nomenclature{target variable}{A value that may be extracted from the kernel context of the probe point, such as a parameter or local variable within a probed function.} In a symbolic debugger, when you're stopped at a breakpoint, you can print values from the program's context. In systemtap scripts, for those probe points that match with specific executable point (rather than an asynchronous event like a timer), you can do the same. In addition, you can take their address (the \verb+&+ operator), pretty-print structures (the \verb+$+ and \verb+$$+ suffix), pretty-print multiple variables in scope (the \verb+$$vars+ and related variables), or cast pointers to their types (the \verb+@cast+ operator), or test their existence / resolvability (the \verb+@defined+ operator). Read about these in the manual pages. To know which variables are likely to be available, you will need to be familiar with the kernel source you are probing. In addition, you will need to check that the compiler has not optimized those values into unreachable nonexistence. You can use \verb+stap -L PROBEPOINT+ to enumerate the variables available there. Let's say that you are trying to trace filesystem reads/writes to a particular device/inode. From your knowledge of the kernel, you know that two functions of interest could be \verb+vfs_read+ and \verb+vfs_write+. Each takes a \verb+struct file *+ argument, inside there is either a \verb+struct dentry *+ or \verb+struct path *+ which has a \verb+struct dentry *+. The \verb+struct dentry *+ contains a \verb+struct inode *+, and so on. Systemtap allows limited dereferencing of such pointer chains. Two functions, \verb+user_string+ and \verb+kernel_string+, can copy \verb+char *+ target variables into systemtap strings. Figure~\ref{fig:inode-watch} demonstrates one way to monitor a particular file (identified by device number and inode number). The script selects the appropriate variants of \verb+dev_nr+ and\verb+inode_nr+ based on the kernel version. This example also demonstrates passing numeric command-line arguments (\verb+$1+ etc.) into scripts. %$ \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat inode-watch.stp probe kernel.function ("vfs_write"), kernel.function ("vfs_read") { if (@defined($file->f_path->dentry)) { dev_nr = $file->f_path->dentry->d_inode->i_sb->s_dev inode_nr = $file->f_path->dentry->d_inode->i_ino } else { dev_nr = $file->f_dentry->d_inode->i_sb->s_dev inode_nr = $file->f_dentry->d_inode->i_ino } if (dev_nr == ($1 << 20 | $2) # major/minor device && inode_nr == $3) printf ("%s(%d) %s 0x%x/%u\n", execname(), pid(), ppfunc(), dev_nr, inode_nr) } # stat -c "%D %i" /etc/crontab fd03 133099 # stap inode-watch.stp 0xfd 3 133099 more(30789) vfs_read 0xfd00003/133099 more(30789) vfs_read 0xfd00003/133099 \end{verbatim} % $ \end{boxedminipage} \caption{Watching for reads/writes to a particular file.} \label{fig:inode-watch} \end{figure} \subsection{Functions} Functions are conveniently packaged reusable software: it would be a shame to have to duplicate a complex condition expression or logging directive in every placed it's used. So, systemtap lets you define functions of your own. Like global variables, systemtap functions may be defined anywhere in the script. They may take any number of string or numeric arguments (by value), and may return a single string or number. The parameter types are inferred as for ordinary variables, and must be consistent throughout the program. Local and global script variables are available, but target variables are {\em not}. That's because there is no specific debugging-level context associated with a function. \nomenclature{function}{A clump of parametrized script statements that may be repeatedly and recursively called from probe handlers and other functions.} A function is defined with the keyword \verb+function+ followed by a name. Then comes a comma-separated formal argument list (just a list of variable names). The \verb+{ }+-enclosed body consists of any list of statements, including expressions that call functions. Recursion is possible, up to a nesting depth limit. Figure~\ref{fig:functions} displays function syntax. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # Red Hat convention; see /etc/login.defs UID_MIN function system_uid_p (u) { return u < 500 } # kernel device number assembly macro function makedev (major,minor) { return major << 20 | minor } function trace_common () { printf("%d %s(%d)", gettimeofday_s(), execname(), pid()) # no return value necessary } function fibonacci (i) { if (i < 1) return 0 else if (i < 2) return 1 else return fibonacci(i-1) + fibonacci(i-2) } \end{verbatim} \end{boxedminipage} \caption{Some functions of dubious utility.} \label{fig:functions} \end{figure} \subsection{Arrays} Often, probes will want to share data that cannot be represented as a simple scalar value. Much data is naturally tabular in nature, indexed by some tuple of thread numbers, processor ids, names, time, and so on. Systemtap offers associative arrays for this purpose. These arrays are implemented as hash tables with a maximum size that is fixed at startup. Because they are too large to be created dynamically for individual probes handler runs, they must be declared as global. \nomenclature{array}{A global \verb+[+$k_1,k_2,\ldots,k_n\verb+]+\rightarrow value$ associative lookup table, with a string, number for each index; the value may be a string, number, or an aggregate.} \begin{tabular}{rl} \verb|global a| & declare global scalar or array variable \\ \verb|global b[400]| & declare array, reserving space for up to 400 tuples \\ \end{tabular} The basic operations for arrays are setting and looking up elements. These are expressed in \verb+awk+ syntax: the array name followed by an opening \verb+[+ bracket, a comma-separated list of index expressions, and a closing \verb+]+ bracket. Each index expression may be string or numeric, as long as it is consistently typed throughout the script. \nomenclature{arity}{Number of indexes to an array, or number of parameters to a function.} \begin{tabular}{rl} \verb|foo [4,"hello"] ++ | & increment the named array slot \\ \verb|processusage [uid(),execname()] ++| & update a statistic \\ \verb|times [tid()] = get_cycles()| & set a timestamp reference point \\ \verb|delta = get_cycles() - times [tid()]| & compute a timestamp delta \\ \end{tabular} Array elements that have not been set {\em may} be fetched, and return a dummy null value (zero or an empty string) as appropriate. However, assigning a null value does not delete the element: an explicit \verb|delete| statement is required. \nomenclature{null value}{A default initialized value for globals and array elements: a zero or an empty string, depending on type.} Systemtap provides syntactic sugar for these operations, in the form of explicit membership testing and deletion. \begin{tabular}{rl} \verb|if ([4,"hello"] in foo) { }| & membership test \\ \verb|delete times[tid()]| & deletion of a single element \\ \verb|delete times| & deletion of all elements \\ \end{tabular} One final and important operation is iteration over arrays. This uses the keyword \verb+foreach+. Like \verb+awk+, this creates a loop that {\em iterates over key tuples} of an array, not just {\em values}. In addition, the iteration may be {\em sorted} by any single key or the value by adding an extra \verb|+| or \verb|-| code. The \verb+break+ and \verb+continue+ statements work inside \verb+foreach+ loops, too. Since arrays can be large but probe handlers must not run for long, it is a good idea to exit iteration early if possible. The \verb+limit+ option in the \verb+foreach+ expression is one way. For simplicity, systemtap forbids any {\em modification} of an array while it is being iterated using a \verb+foreach+. \begin{tabular}{rp{0.4\textwidth}} \verb|foreach (x = [a,b] in foo) { fuss_with(x) }| & simple loop in arbitrary sequence \\ \verb|foreach ([a,b] in foo+ limit 5) { }| & loop in increasing sequence of value, stop after 5 \\ \verb|foreach ([a-,b] in foo) { }| & loop in decreasing sequence of first key \\ \end{tabular} \subsection{Aggregates} When we said above that values can only be strings or numbers, we lied a little. There is a third type: statistics aggregates, or aggregates for short. Instances of this type are used to collect statistics on numerical values, where it is important to accumulate new data quickly ({\em without} exclusive locks) and in large volume (storing only aggregated stream statistics). This type only makes sense for global variables, and may be stored individually or as elements of an array. \nomenclature{aggregate}{A special ``write-mostly'' data type used to efficiently store aggregated statistical values of a potentially huge data stream.} To add a value to a statistics aggregate, systemtap uses the special operator \verb+<<<+. Think of it like C++'s \verb+<<+ output streamer: the left hand side object accumulates the data sample given on the right hand side. This operation is efficient (taking a shared lock) because the aggregate values are kept separately on each processor, and are only aggregated across processors on request. \begin{verbatim} a <<< delta_timestamp writes[execname()] <<< count \end{verbatim} To read the aggregate value, special functions are available to extract a selected statistical function. {\em The aggregate value cannot be read by simply naming it as if it were an ordinary variable.} These operations take an exclusive lock on the respective globals, and should therefore be relatively rare. The simple ones are: \verb+@min+, \verb+@max+, \verb+@count+, \verb+@avg+, and \verb+@sum+, and evaluate to a single number. In addition, histograms of the data stream may be extracted using the \verb+@hist_log+ and \verb+@hist_linear+. These evaluate to a special sort of array that may at present\footnote{We anticipate support for indexing and looping using {\tt foreach} shortly.} only be printed. \nomenclature{extractor}{A function-like expression in a script that computes a single statistic for a given aggregate.} \begin{tabular}{rp{0.5\textwidth}} \verb+@avg(a)+ & the average of all the values accumulated into \verb+a+ \\ \verb+print(@hist_linear(a,0,100,10))+ & print an ``ascii art'' linear histogram of the same data stream, bounds $0 \ldots 100$, bucket width is $10$ \\ \verb|@count(writes["zsh"])| & the number of times ``zsh'' ran the probe handler \\ \verb+print(@hist_log(writes["zsh"]))+ & print an ``ascii art'' logarithmic histogram of the same data stream \\ \end{tabular} \subsection{Safety} \label{sec:safety} The full expressivity of the scripting language raises good questions of safety. Here is a set of Q\&A: \begin{description} \item{\bf What about infinite loops? recursion?} A probe handler is bounded in time. The C code generated by systemtap includes explicit checks that limit the total number of statements executed to a small number. A similar limit is imposed on the nesting depth of function calls. When either limit is exceeded, that probe handler cleanly aborts and signals an error. The systemtap session is normally configured to abort as a whole at that time. \item{\bf What about running out of memory?} No dynamic memory allocation whatsoever takes place during the execution of probe handlers. Arrays, function contexts, and buffers are allocated during initialization. These resources may run out during a session, and generally result in errors. \item{\bf What about locking?} If multiple probes seek conflicting locks on the same global variables, one or more of them will time out, and be aborted. Such events are tallied as ``skipped'' probes, and a count is displayed at session end. A configurable number of skipped probes can trigger an abort of the session. \item{\bf What about null pointers? division by zero?} The C code generated by systemtap translates potentially dangerous operations to routines that check their arguments at run time. These signal errors if they are invalid. Many arithmetic and string operations silently overflow if the results exceed representation limits. \item{\bf What about bugs in the translator? compiler?} While bugs in the translator, or the runtime layer certainly exist\footnote{See \tt http://sourceware.org/bugzilla}, our test suite gives some assurance. Plus, the entire generated C code may be inspected (try the \verb+-p3+ option). Compiler bugs are unlikely to be of any greater concern for systemtap than for the kernel as a whole. In other words, if it was reliable enough to build the kernel, it will build the systemtap modules properly too. \item{\bf Is that the whole truth?} In practice, there are several weak points in systemtap and the underlying kprobes system at the time of writing. Putting probes indiscriminately into unusually sensitive parts of the kernel (low level context switching, interrupt dispatching) has reportedly caused crashes in the past. We are fixing these bugs as they are found, and constructing a probe point ``blocklist'', but it is not complete. \nomenclature{blocklist}{A list of probe point patterns encoded into the translator or the kernel, where probing is prohibited for safety reasons.} \nomenclature{kprobes}{A breakpoint dispatching system for dynamic kernel probes, used by systemtap to implement some families of probe points.} \end{description} \subsection{Exercises} \begin{enumerate} \item Alter the last probe in \verb+timer-jiffies.stp+ to reset the counters and continue reporting instead of exiting. \item Write a script that, every ten seconds, displays the top five most frequent users of \verb+open+ system call during that interval. \item Write a script that experimentally measures the speed of the \verb+get_cycles()+ counter on each processor. \item Use any suitable probe point to get an approximate profile of process CPU usage: which processes/users use how much of each CPU. \end{enumerate} \section{Tapsets} After writing enough analysis scripts for yourself, you may become known as an expert to your colleagues, who will want to use your scripts. Systemtap makes it possible to share in a controlled manner; to build libraries of scripts that build on each other. In fact, all of the functions (\verb+pid()+, etc.) used in the scripts above come from tapset scripts like that. A ``tapset'' is just a script that designed for reuse by installation into a special directory. \subsection{Automatic selection} Systemtap attempts to resolve references to global symbols (probes, functions, variables) that are not defined within the script by a systematic search through the tapset library for scripts that define those symbols. Tapset scripts are installed under the default directory named \verb+/usr/share/systemtap/tapset+. A user may give additional directories with the \verb+-I DIR+ option. Systemtap searches these directories for script (\verb+.stp+) files. The search process includes subdirectories that are specialized for a particular kernel version and/or architecture, and ones that name only larger kernel families. Naturally, the search is ordered from specific to general, as shown in Figure~\ref{fig:tapset-search}. \nomenclature{tapset search path}{A list of subdirectories searched by systemtap for tapset scripts, allowing specialization by version architecture.} \begin{figure}[!ht] \begin{boxedminipage}{6in} \begin{verbatim} # stap -p1 -vv -e 'probe begin { }' > /dev/null Created temporary directory "/tmp/staplnEBh7" Searched '/usr/share/systemtap/tapset/2.6.15/i686/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6.15/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6/i686/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/2.6/*.stp', match count 0 Searched '/usr/share/systemtap/tapset/i686/*.stp', match count 1 Searched '/usr/share/systemtap/tapset/*.stp', match count 12 Pass 1: parsed user script and 13 library script(s) in 350usr/10sys/375real ms. Running rm -rf /tmp/staplnEBh7 \end{verbatim} \end{boxedminipage} \caption{Listing the tapset search path.} \label{fig:tapset-search} \end{figure} When a script file is found that {\em defines} one of the undefined symbols, that {\em entire file} is added to the probing session being analyzed. This search is repeated until no more references can become satisfied. Systemtap signals an error if any are still unresolved. This mechanism enables several programming idioms. First, it allows some global symbols to be defined only for applicable kernel version/architecture pairs, and cause an error if their use is attempted on an inapplicable host. Similarly, the same symbol can be defined differently depending on kernels, in much the same way that different kernel \verb+include/asm/ARCH/+ files contain macros that provide a porting layer. Another use is to separate the default parameters of a tapset routine from its implementation. For example, consider a tapset that defines code for relating elapsed time intervals to process scheduling activities. The data collection code can be generic with respect to which time unit (jiffies, wall-clock seconds, cycle counts) it can use. It should have a default, but should not require additional run-time checks to let a user choose another. Figure~\ref{fig:tapset-default} shows a way. \begin{figure}[!ht] \begin{boxedminipage}{6in} \begin{verbatim} # cat tapset/time-common.stp global __time_vars function timer_begin (name) { __time_vars[name] = __time_value () } function timer_end (name) { return __time_value() - __time_vars[name] } # cat tapset/time-default.stp function __time_value () { return gettimeofday_us () } # cat tapset-time-user.stp probe begin { timer_begin ("bench") for (i=0; i<100; i++) ; printf ("%d cycles\n", timer_end ("bench")) exit () } function __time_value () { return get_ticks () } # override for greater precision \end{verbatim} \end{boxedminipage} \caption{Providing an overrideable default.} \label{fig:tapset-default} \end{figure} A tapset that exports only {\em data} may be as useful as ones that exports functions or probe point aliases (see below). Such global data can be computed and kept up-to-date using probes internal to the tapset. Any outside reference to the global variable would incidentally activate all the required probes. \subsection{Probe point aliases} \nomenclature{probe point alias}{A probe point that is defined in terms of another probe point.} Probe point aliases allow creation of new probe points from existing ones. This is useful if the new probe points are named to provide a higher level of abstraction. For example, the system-calls tapset defines probe point aliases of the form \verb+syscall.open+ etc., in terms of lower level ones like \verb+kernel.function("sys_open")+. Even if some future kernel renames \verb+sys_open+, the aliased name can remain valid. A probe point alias definition looks like a normal probe. Both start with the keyword \verb+probe+ and have a probe handler statement block at the end. But where a normal probe just lists its probe points, an alias creates a new name using the assignment (\verb+=+) operator. Another probe that names the new probe point will create an actual probe, with the handler of the alias {\em prepended}. This prepending behavior serves several purposes. It allows the alias definition to ``preprocess'' the context of the probe before passing control to the user-specified handler. This has several possible uses: \begin{tabular}{rl} \verb+if ($flag1 != $flag2) next+ & skip probe unless given condition is met \\ \verb+name = "foo"+ & supply probe-describing values \\ \verb+var = $var+ & extract target variable to plain local variable \\ %$ \end{tabular} Figure~\ref{fig:probe-alias} demonstrates a probe point alias definition as well as its use. It demonstrates how a single probe point alias can expand to multiple probe points, even to other aliases. It also includes probe point wildcarding. These functions are designed to compose sensibly. \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat probe-alias.stp probe syscallgroup.io = syscall.open, syscall.close, syscall.read, syscall.write { groupname = "io" } probe syscallgroup.process = syscall.fork, syscall.execve { groupname = "process" } probe syscallgroup.* { groups [execname() . "/" . groupname] ++ } probe end { foreach (eg+ in groups) printf ("%s: %d\n", eg, groups[eg]) } global groups # stap probe-alias.stp 05-wait_for_sys/io: 19 10-udev.hotplug/io: 17 20-hal.hotplug/io: 12 X/io: 73 apcsmart/io: 59 [...] make/io: 515 make/process: 16 [...] xfce-mcs-manage/io: 3 xfdesktop/io: 5 [...] xmms/io: 7070 zsh/io: 78 zsh/process: 5 \end{verbatim} \end{boxedminipage} \caption{Classified system call activity.} \label{fig:probe-alias} \end{figure} \subsection{Embedded C} \label{embedded-c} Sometimes, a tapset needs provide data values from the kernel that cannot be extracted using ordinary target variables (\verb+$var+). %$ This may be because the values are in complicated data structures, may require lock awareness, or are defined by layers of macros. Systemtap provides an ``escape hatch'' to go beyond what the language can safely offer. In certain contexts, you may embed plain raw C in tapsets, exchanging power for the safety guarantees listed in section~\ref{sec:safety}. End-user scripts {\em may not} include embedded C code, unless systemtap is run with the \verb+-g+ (``guru'' mode) option. Tapset scripts get guru mode privileges automatically. \nomenclature{embedded C}{Special syntax permitting tapsets to include literal C code.} Embedded C can be the body of a script function. Instead enclosing the function body statements in \verb+{+ and \verb+}+, use \verb+%{+ and \verb+%}+. Any enclosed C code is literally transcribed into the kernel module: it is up to you to make it safe and correct. In order to take parameters and return a value, macros \verb+STAP_ARG_*+ and \verb+STAP_RETVALUE+ are made available. The familiar data-gathering functions \verb+pid()+, \verb+execname()+, and their neighbours are all embedded C functions. Figure~\ref{fig:embedded-C} contains another example. Since systemtap cannot examine the C code to infer these types, an optional\footnote{This is only necessary if the types cannot be inferred from other sources, such as the call sites.} annotation syntax is available to assist the type inference process. Simply suffix parameter names and/or the function name with \verb+:string+ or \verb+:long+ to designate the string or numeric type. In addition, the script may include a \verb+%{+ \verb+%}+ block at the outermost level of the script, in order to transcribe declarative code like \verb+#include +. These enable the embedded C functions to refer to general kernel types. There are a number of safety-related constraints that should be observed by developers of embedded C code. \begin{enumerate} \item Do not dereference pointers that are not known or testable valid. \item Do not call any kernel routine that may cause a sleep or fault. \item Consider possible undesirable recursion, where your embedded C function calls a routine that may be the subject of a probe. If that probe handler calls your embedded C function, you may suffer infinite regress. Similar problems may arise with respect to non-reentrant locks. \item If locking of a data structure is necessary, use a \verb+trylock+ type call to attempt to take the lock. If that fails, give up, do not block. \end{enumerate} \begin{figure}[!ht] \begin{boxedminipage}{4.5in} \begin{verbatim} # cat embedded-C.stp %{ #include #include %} function task_execname_by_pid:string (pid:long) %{ struct task_struct *p; struct list_head *_p, *_n; list_for_each_safe(_p, _n, ¤t->tasks) { p = list_entry(_p, struct task_struct, tasks); if (p->pid == (int)STAP_ARG_pid) snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%s", p->comm); } %} probe begin { printf("%s(%d)\n", task_execname_by_pid(target()), target()) exit() } # pgrep emacs 16641 # stap -g embedded-C.stp -x 16641 emacs(16641) \end{verbatim} \end{boxedminipage} \caption{Embedded C function.} \label{fig:embedded-C} \end{figure} \subsection{Naming conventions} Using the tapset search mechanism just described, potentially many script files can become selected for inclusion in a single session. This raises the problem of name collisions, where different tapsets accidentally use the same names for functions/globals. This can result in errors at translate or run time. To control this problem, systemtap tapset developers are advised to follow naming conventions. Here is some of the guidance. \nomenclature{naming convention}{Guidelines for naming variables and functions to prevent unintentional duplication.} \begin{enumerate} \item Pick a unique name for your tapset, and substitute it for {\em TAPSET} below. \item Separate identifiers meant to be used by tapset users from those that are internal implementation artifacts. \item Document the first set in the appropriate \verb+man+ pages. \item Prefix the names of external identifiers with {\em TAPSET}\_ if there is any likelihood of collision with other tapsets or end-user scripts. \item Prefix any probe point aliases with an appropriate prefix. \item Prefix the names of internal identifiers with \_\_{\em TAPSET}\_. \end{enumerate} \subsection{Exercises} \begin{enumerate} \item Write a tapset that implements deferred and ``cancelable'' logging. Export a function that enqueues a text string (into some private array), returning an id token. Include a timer-based probe that periodically flushes the array to the standard log output. Export another function that, if the entry was not already flushed, allows a text string to be cancelled from the queue. One might speculate that similar functions and tapsets exist. \item Create a ``relative timestamp'' tapset with functions return all the same values as the ones in the timestamp tapset, except that they are made relative to the start time of the script. \item Create a tapset that exports a global array that contains a mapping of recently seen process ID numbers to process names. Intercept key system calls (\verb+execve+?) to update the list incrementally. \item Send your tapset ideas to the mailing list! \end{enumerate} \section{Further information} For further information about systemtap, several sources are available. There are \verb+man+ pages: \begin{tabular}{rl} \verb+stap+ & systemtap program usage, language summary \\ \verb+stappaths+ & your systemtap installation paths \\ \verb+stapprobes+ & probes / probe aliases provided by built-in tapsets \\ \verb+stapex+ & a few basic example scripts \\ \verb+tapset::*+ & summaries of the probes and functions in each tapset \\ \verb+probe::*+ & detailed descriptions of each probe \\ \verb+function::*+ & detailed descriptions of each function \end{tabular} There is much more documentation and sample scripts included. You may find them under \verb+/usr/share/doc/systemtap*/+. Then, there is the source code itself. Since systemtap is {\em free software}, you should have available the entire source code. The source files in the \verb+tapset/+ directory are also packaged along with the systemtap binary. Since systemtap reads these files rather than their documentation, they are the most reliable way to see what's inside all the tapsets. Use the \verb+-v+ (verbose) command line option, several times if you like, to show inner workings. \nomenclature{free software}{Software licensed under terms such as the GNU GPL, which aims to enforce certain specified user freedoms such as study, modification, and sharing.} Finally, there is the project web site (\verb+http://sourceware.org/systemtap/+) with several articles, an archived public mailing list for users and developers (\verb+systemtap@sourceware.org+), IRC channels, and a live GIT source repository. Come join us! \appendix % \section{Glossary} % \renewcommand{\nomname}{} % \printglossary % \begin{htmlonly} % {\em Sorry, no glossary available.} % \end{htmlonly} \section{Errors} We explain some common systemtap error messages in this section. Most error messages include line/character numbers with which one can locate the precise location of error in the script code. There is sometimes a subsequent or prior line that elaborates. {\large {\em error} {\tt at:} {\em filename}:{\em line}:{\em column}: {\em details}} Many error messages contain a man-page key like this \verb+[man foo]+. This indicates that more details are available as a \verb+man+ page \verb+foo+, so use the \verb+% man foo+ command to view it. \subsection{Parse errors} \begin{description} \item{\bf parse error: expected {\em foo}, saw {\em bar} $\ldots$} \\ The script contained a grammar error. A different type of construct was expected in the given context. \item{\bf parse error: embedded code in unprivileged script} \\ The script contained unsafe constructs such as embedded C (section \ref{embedded-c}), but was run without the \verb+-g+ (guru mode) option. Confirm that the constructs are used safely, then try again with \verb+-g+. \end{description} \subsection{Type errors} \begin{description} \item{\bf semantic error: type mismatch for identifier '{\em foo}' $\ldots$ string vs. long} \\ In this case, the identifier {\em foo} was previously inferred as a numeric type (``long''), but at the given point is being used as a string. Similar messages appear if an array index or function parameter slot is used with conflicting types. \item{\bf semantic error: unresolved type for identifier '{\em foo}'} \\ The identifier {\em foo} was used, for example in a \verb+print+, but without any operations that could assign it a type. Similar messages may appear if a symbol is misspelled by a typo. \item{\bf semantic error: Expecting symbol or array index expression} \\ Something other than an assignable lvalue was on the left hand sign of an assignment. \end{description} \subsection{Symbol errors} \begin{description} \item{\bf while searching for arity {\em N} function, semantic error: unresolved function call} \\ The script calls a function with {\em N} arguments that does not exist. The function may exist with different arity. \item{\bf semantic error: array locals not supported: $\ldots$} \\ An array operation is present for which no matching global declaration was found. Similar messages appear if an array is used with inconsistent arities. \item{\bf semantic error: variable '{\em foo}' modified during 'foreach'} \\ The array {\em foo} is being modified (being assigned to or deleted from) within an active \verb+foreach+ loop. This invalid operation is also detected within a function called from within the loop. \end{description} \subsection{Probing errors } \begin{description} \item{\bf semantic error: probe point mismatch at position {\em N}, while resolving probe point {\em foo}} \\ A probe point was named that neither directly understood by systemtap, nor defined as an alias by a tapset script. The divergence from the ``tree'' of probe point namespace is at position {\em N} (starting with zero at left). \item{\bf semantic error: no match for probe point, while resolving probe point {\em foo}} \\ A probe point cannot be resolved for any of a variety of reasons. It may be a debuginfo-based probe point such as \verb+kernel.function("foobar")+ where no \verb+foobar+ function was found. This can occur if the script specifies a wildcard on function names, or an invalid file name or source line number. \item{\bf semantic error: unresolved target-symbol expression} \\ A target variable was referred to in a probe handler that was not resolvable. Or, a target variable is not valid at all in a context such as a script function. This variable may have been elided by an optimizing compiler, or may not have a suitable type, or there might just be an annoying bug somewhere. Try again with a slightly different probe point (use \verb+statement()+ instead of \verb+function()+) to search for a more cooperative neighbour in the same area. \item{\bf semantic error: libdwfl failure $\ldots$} \\ There was a problem processing the debugging information. It may simply be missing, or may have some consistency / correctness problems. Later compilers tend to produce better debugging information, so if you can upgrade and recompile your kernel/application, it may help. \item{\bf semantic error: cannot find {\em foo} debuginfo} \\ Similarly, suitable debugging information was not found. Check that your kernel build/installation includes a matching version of debugging data. \end{description} \subsection{Runtime errors} Usually, run-time errors cause a script to terminate. Some of these may be caught with the \verb+try { ... } catch { ... }+ construct. \begin{description} \item{\bf WARNING: Number of errors: {\em N}, skipped probes: {\em M}} \\ Errors and/or skipped probes occurred during this run. \nomenclature{skipped probe}{A probe handler that should have run but couldn't, due to contention or temporary resource problems.} \item{\bf division by 0} \\ The script code performed an invalid division. \item{\bf aggregate element not found} \\ An statistics extractor function other than \verb+@count+ was invoked on an aggregate that has not had any values accumulated yet. This is similar to a division by zero. \item{\bf aggregation overflow} \\ An array containing aggregate values contains too many distinct key tuples at this time. \item{\bf MAXNESTING exceeded} \\ Too many levels of function call nesting were attempted. \item{\bf MAXACTION exceeded} \\ The probe handler attempted to execute too many statements. \item{\bf kernel/user string copy fault at {\em 0xaddr}} \\ The probe handler attempted to copy a string from kernel or user space at an invalid address. \item{\bf pointer dereference fault} \\ There was a fault encountered during a pointer dereference operation such as a target variable evaluation. \end{description} \section{Acknowledgments} The author thanks Martin Hunt, Will Cohen, and Jim Keniston for improvement advice for this paper. \end{document} systemtap-4.6/doc/tutorial/000077500000000000000000000000001414446751200160345ustar00rootroot00000000000000systemtap-4.6/doc/tutorial/embedded-C.stp000066400000000000000000000007061414446751200205000ustar00rootroot00000000000000%{ #include #include %} function task_execname_by_pid:string (pid:long) %{ struct task_struct *p; struct list_head *_p, *_n; list_for_each_safe(_p, _n, ¤t->tasks) { p = list_entry(_p, struct task_struct, tasks); if (p->pid == (int)STAP_ARG_pid) snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%s", p->comm); } %} probe begin { printf("%s(%d)\n", task_execname_by_pid(target()), target()) exit() } systemtap-4.6/doc/tutorial/functions.stp000066400000000000000000000006551414446751200206020ustar00rootroot00000000000000# Red Hat convention; see /etc/login.defs UID_MIN function system_uid_p (u) { return u < 500 } # kernel device number assembly macro function makedev (major,minor) { return major << 20 | minor } function trace_common () { printf("%d %s(%d)", gettimeofday_s(), execname(), pid()) # no return value } function fibonacci (i) { if (i < 1) return 0 else if (i < 2) return 1 else return fibonacci(i-1) + fibonacci(i-2) } systemtap-4.6/doc/tutorial/hello-world.stp000066400000000000000000000000651414446751200210150ustar00rootroot00000000000000probe begin { print ("hello world\n") exit () } systemtap-4.6/doc/tutorial/inode-watch.stp000066400000000000000000000007761414446751200210000ustar00rootroot00000000000000probe kernel.function ("vfs_write"), kernel.function ("vfs_read") { if (@defined($file->f_path->dentry)) { dev_nr = $file->f_path->dentry->d_inode->i_sb->s_dev inode_nr = $file->f_path->dentry->d_inode->i_ino } else { dev_nr = $file->f_dentry->d_inode->i_sb->s_dev inode_nr = $file->f_dentry->d_inode->i_ino } if (dev_nr == ($1 << 20 | $2) # major/minor device && inode_nr == $3) printf ("%s(%d) %s 0x%x/%u\n", execname(), pid(), probefunc(), dev_nr, inode_nr) } systemtap-4.6/doc/tutorial/probe-alias.stp000066400000000000000000000005701414446751200207640ustar00rootroot00000000000000probe syscallgroup.io = syscall.open, syscall.close, syscall.read, syscall.write { groupname = "io" } probe syscallgroup.process = syscall.fork, syscall.execve { groupname = "process" } probe syscallgroup.* { groups [execname() . "/" . groupname] ++ } probe end { foreach (eg+ in groups) printf ("%s: %d\n", eg, groups[eg]) } global groups systemtap-4.6/doc/tutorial/socket-trace.stp000066400000000000000000000003231414446751200211460ustar00rootroot00000000000000probe kernel.function("*@net/socket.c").call { printf ("%s -> %s\n", thread_indent(1), probefunc()) } probe kernel.function("*@net/socket.c").return { printf ("%s <- %s\n", thread_indent(-1), probefunc()) } systemtap-4.6/doc/tutorial/strace-open.stp000066400000000000000000000002101414446751200207750ustar00rootroot00000000000000probe syscall.open { printf ("%s(%d) open (%s)\n", execname(), pid(), argstr) } probe timer.ms(4000) # after 4 seconds { exit () } systemtap-4.6/doc/tutorial/tapset-time-user.stp000066400000000000000000000002671414446751200220010ustar00rootroot00000000000000probe begin { timer_begin ("bench") for (i=0; i<100; i++) ; printf ("%d cycles\n", timer_end ("bench")) exit () } function __time_value () { return get_cycles () } # override systemtap-4.6/doc/tutorial/tapset/000077500000000000000000000000001414446751200173345ustar00rootroot00000000000000systemtap-4.6/doc/tutorial/tapset/time-common.stp000066400000000000000000000002401414446751200223040ustar00rootroot00000000000000global __time_vars function timer_begin (name) { __time_vars[name] = __time_value () } function timer_end (name) { return __time_value() - __time_vars[name] } systemtap-4.6/doc/tutorial/tapset/time-default.stp000066400000000000000000000000701414446751200224410ustar00rootroot00000000000000function __time_value () { return gettimeofday_us () } systemtap-4.6/doc/tutorial/timer-jiffies.stp000066400000000000000000000004221414446751200213170ustar00rootroot00000000000000global count_jiffies, count_ms probe timer.jiffies(100) { count_jiffies ++ } probe timer.ms(100) { count_ms ++ } probe timer.ms(12345) { hz=(1000*count_jiffies) / count_ms printf ("jiffies:ms ratio %d:%d => CONFIG_HZ=%d\n", count_jiffies, count_ms, hz) exit () } systemtap-4.6/dtrace.in000066400000000000000000000412611414446751200152220ustar00rootroot00000000000000#!@preferred_python@ # vim: et sta sts=4 sw=4 ts=8 # This handles the systemtap equivalent of # $(DTRACE) $(DTRACEFLAGS) -G -s $^ -o $@ # $(DTRACE) $(DTRACEFLAGS) -h -s $^ -o $@ # which is a step that builds DTrace provider and probe definitions # Copyright (C) 2009-2018 Red Hat Inc. # # This file is part of systemtap, and is free software. You can # redistribute it and/or modify it under the terms of the GNU General # Public License (GPL); either version 2, or (at your option) any # later version. # ignore line too long, missing docstring, method could be a function, # too many public methods # pylint: disable=C0301 # pylint: disable=C0111 # pylint: disable=R0201 # pylint: disable=R0904 import os import sys from shlex import split from subprocess import call from tempfile import mkstemp try: from pyparsing import alphas, cStyleComment, delimitedList, Group, \ Keyword, lineno, Literal, nestedExpr, nums, oneOf, OneOrMore, \ Optional, ParseException, ParserElement, restOfLine, restOfLine, \ Suppress, SkipTo, Word, ZeroOrMore HAVE_PYP = True except ImportError: HAVE_PYP = False # Common file creation methods for pyparsing and string pattern matching class _HeaderCreator(object): def init_semaphores(self, fdesc): # dummy declaration just to make the object file non-empty fdesc.write("/* Generated by the Systemtap dtrace wrapper */\n\n") fdesc.write("static void __dtrace (void) __attribute__((unused));\n") fdesc.write("static void __dtrace (void) {}\n") fdesc.write("\n#include \n\n") def init_probes(self, fdesc): fdesc.write("/* Generated by the Systemtap dtrace wrapper */\n\n") fdesc.write("\n#define _SDT_HAS_SEMAPHORES 1\n\n") fdesc.write("\n#define STAP_HAS_SEMAPHORES 1 /* deprecated */\n\n") fdesc.write("\n#include \n\n") def add_semaphore(self, this_provider, this_probe): # NB: unsigned short is fixed in ABI semaphores_def = '\n#if defined STAP_SDT_V1\n' semaphores_def += '#define %s_%s_semaphore %s_semaphore\n' % \ (this_provider, this_probe, this_probe) semaphores_def += '#endif\n' semaphores_def += '#if defined STAP_SDT_V1 || defined STAP_SDT_V2 \n' semaphores_def += "__extension__ unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % \ (this_provider, this_probe) semaphores_def += '#else\n' semaphores_def += "__extension__ unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\"))) __attribute__ ((visibility (\"hidden\")));\n" % \ (this_provider, this_probe) semaphores_def += '#endif\n' return semaphores_def def add_probe(self, this_provider, this_probe, args): stap_str = "" this_probe_canon = this_provider.upper() + "_" + this_probe.replace("__", "_").upper() define_str = "#define %s(" % (this_probe_canon) comment_str = "/* %s (" % (this_probe_canon) if len(args) == 0: stap_str += "DTRACE_PROBE (" else: stap_str += "DTRACE_PROBE%d (" % len(args) stap_str += "%s, %s" % (this_provider, this_probe) i = 0 while i < len(args): if i != 0: define_str += ", " comment_str += "," define_str = define_str + "arg%s" % (i + 1) stap_str = stap_str + ", arg%s" % (i + 1) for argi in args[i]: if len(argi) > 0: comment_str += " %s" % argi i += 1 stap_str += ")" comment_str += " ) */" define_str += ") \\\n" probe_def = '%s\n' % (comment_str) probe_def += ('#if defined STAP_SDT_V1\n') probe_def += ('#define %s_ENABLED() __builtin_expect (%s_semaphore, 0)\n' % \ (this_probe_canon, this_probe)) probe_def += ('#define %s_%s_semaphore %s_semaphore\n' % \ (this_provider, this_probe, this_probe)) probe_def += ('#else\n') probe_def += ('#define %s_ENABLED() __builtin_expect (%s_%s_semaphore, 0)\n' % \ (this_probe_canon, this_provider, this_probe)) probe_def += ('#endif\n') # NB: unsigned short is fixed in ABI probe_def += ("__extension__ extern unsigned short %s_%s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % \ (this_provider, this_probe)) probe_def += (define_str + stap_str + "\n\n") return probe_def # Parse using pyparsing if it is available class _PypProvider(_HeaderCreator): def __init__(self): self.ast = [] self.bnf = None self.dtrace_statements = None def dtrace_bnf(self): self.current_probe = "" if self.dtrace_statements is not None: return ParserElement.setDefaultWhitespaceChars(' \f\r\n\t\v') ident = Word(alphas+"_", alphas+nums+"_$") probe_ident = Word(alphas+nums+"_$") semi = Literal(";").suppress() integer = Word( nums ) lbrace = Literal("{").suppress() rbrace = Literal("}").suppress() type_name = ident varname = ident PROBE = Keyword("probe") PROVIDER = Keyword("provider") array_size = integer | ident varname_spec = varname + Optional("[" + array_size + "]") struct_decl = Group(oneOf("struct union") + varname + Suppress(nestedExpr('{','}')) + semi) enum_decl = Group("enum" + varname + Suppress(nestedExpr('{','}')) + semi) member_decl = Group((Optional(oneOf("struct unsigned const")) + type_name + Optional(Keyword("const"))) + Optional(Word("*"), default="") + Optional(varname_spec)) struct_typedef = Group(Literal("typedef") + Literal("struct") + varname + Suppress(nestedExpr('{','}'))) + Optional(varname) + semi typedef = ZeroOrMore("typedef" + (member_decl)) + semi decls = OneOrMore(struct_typedef | struct_decl | typedef | enum_decl) def memoize_probe(instring, loc, tokens): self.current_probe = tokens[0][1] self.current_lineno = lineno(loc,instring) probe_decl = Group(PROBE + probe_ident + "(" + Optional(Group(delimitedList(member_decl))) + ")" + Optional(Group(Literal(":") + "(" + Optional(Group(delimitedList(member_decl))) + ")")) + Optional(semi)) probe_decl.setParseAction(memoize_probe) probe_decls = OneOrMore(probe_decl) provider_decl = (PROVIDER + Optional(ident) + lbrace + Group(probe_decls) + rbrace + Optional(semi)) dtrace_statement = Group (SkipTo("provider", include=False) + provider_decl) self.dtrace_statements = ZeroOrMore(dtrace_statement) cplusplus_linecomment = Literal("//") + restOfLine cpp_linecomment = Literal("#") + restOfLine self.dtrace_statements.ignore(cStyleComment) self.dtrace_statements.ignore(cplusplus_linecomment) self.dtrace_statements.ignore(cpp_linecomment) self.bnf = self.dtrace_statements def semaphore_write(self, fdesc): semaphores_def = "" self.init_semaphores(fdesc) for asti in self.ast: if len(asti) == 0: continue # ignore SkipTo token if asti[0] != "provider": del asti[0] if asti[0] == "provider": # list of probes for prb in asti[2]: semaphores_def += self.add_semaphore(asti[1], prb[1]) fdesc.write(semaphores_def) def probe_write(self, provider, header): hdr = open(header, mode='w') self.init_probes(hdr) self.dtrace_bnf() try: try: self.ast = self.bnf.parseFile(provider, parseAll=True).asList() except TypeError: # pyparsing-1.5.0 does not support parseAll self.ast = self.bnf.parseFile(provider).asList() except ParseException: err = sys.exc_info()[1] if len(self.current_probe): print("Warning: %s:%s:%d: syntax error near:\nprobe %s\n" % (sys.argv[0], provider, self.current_lineno, self.current_probe)) else: print("Warning: %s:%s:%d syntax error near:\n%s\n" % (sys.argv[0], provider, err.lineno, err.line)) raise err probes_def = "" for asti in self.ast: if len(asti) == 0: continue # ignore SkipTo token if asti[0] != "provider": del asti[0] if asti[0] == "provider": # list of probes for prb in asti[2]: if prb[3] == ')': # No parsed argument list alist = [] else: alist = prb[3] probes_def += self.add_probe(asti[1], prb[1], alist) hdr.write(probes_def) hdr.close() # Parse using regular expressions if pyparsing is not available class _ReProvider(_HeaderCreator): def __init__(self): self.semaphores_def = "\n" self.provider = [] def __semaphore_append(self, this_probe): self.semaphores_def += self.add_semaphore(self.provider, this_probe) def semaphore_write(self, fdesc): self.init_semaphores(fdesc) fdesc.write(self.semaphores_def) def probe_write(self, provider, header): have_provider = False fdesc = open(provider) hdr = open(header, mode='w') self.init_probes(hdr) in_comment = False probes_def = "" while True: line = fdesc.readline() if line == "": break if line.find("/*") != -1: in_comment = True if line.find("*/") != -1: in_comment = False continue if in_comment: continue if line.find("provider") != -1: tokens = line.split() have_provider = True self.provider = tokens[1] elif have_provider and line.find("probe ") != -1: while line.find(")") < 0: line += fdesc.readline() this_probe = line[line.find("probe ")+5:line.find("(")].strip() argstr = (line[line.find("(")+1:line.find(")")]) arg = "" i = 0 args = [] self.__semaphore_append(this_probe) while i < len(argstr): if argstr[i:i+1] == ",": args.append(arg.split()) arg = "" else: arg = arg + argstr[i] i += 1 if len(arg) > 0: args.append(arg.split()) probes_def += self.add_probe(self.provider, this_probe, args) elif line.find("}") != -1 and have_provider: have_provider = False hdr.write(probes_def) hdr.close() def usage(): print("Usage " + sys.argv[0] + " [--help] [-h | -G] [-C [-I]] -s File.d [-o ]") def dtrace_help(): usage() print("Where -h builds a systemtap header file from the .d file") print(" -C when used with -h, also run cpp preprocessor") print(" -o specifies an explicit output file name,") print(" the default for -G is file.o and -h is file.h") print(" -I when running cpp pass through this -I include Path") print(" -s specifies the name of the .d input file") print(" -G builds a stub file.o from file.d,") print(" which is required by some packages that use dtrace.") sys.exit(1) ######################################################################## # main ######################################################################## def main(): if len(sys.argv) < 2: usage() return 1 global HAVE_PYP i = 1 build_header = False build_source = False keep_temps = False use_cpp = False suffix = "" filename = "" s_filename = "" includes = [] defines = [] ignore_options = ["-64", "-32", "-fpic", "-fPIC"] ignore_options2 = ["-x"] # with parameter while i < len(sys.argv): if sys.argv[i] == "-o": i += 1 filename = sys.argv[i] elif sys.argv[i] == "-s": i += 1 s_filename = sys.argv[i] elif sys.argv[i] == "-C": use_cpp = True elif sys.argv[i].startswith("-D"): defines.append(sys.argv[i]) elif sys.argv[i] == "-h": build_header = True suffix = ".h" elif sys.argv[i].startswith("-I"): includes.append(sys.argv[i]) elif sys.argv[i] == "-G": build_source = True suffix = ".o" elif sys.argv[i] == "-k": keep_temps = True elif sys.argv[i] == "--no-pyparsing": HAVE_PYP = False elif sys.argv[i] == "--types": print(sys.argv[0] + ": note: obsolete option --types used") elif sys.argv[i] in ignore_options: pass # dtrace users sometimes pass these flags elif sys.argv[i] in ignore_options2: i += 1 pass # dtrace users sometimes pass these flags elif sys.argv[i] == "--help": dtrace_help() elif sys.argv[i][0] == "-": print(sys.argv[0], "invalid option", sys.argv[i]) usage() return 1 i += 1 if not build_header and not build_source: usage() return 1 if s_filename != "" and use_cpp: (ignore, fname) = mkstemp(suffix=".d") cpp = os.environ.get("CPP", "cpp") retcode = call(split(cpp) + includes + defines + [s_filename, '-o', fname]) if retcode != 0: print("\"cpp includes s_filename\" failed") usage() return 1 s_filename = fname if filename == "": if s_filename != "": (filename, ignore) = os.path.splitext(s_filename) filename = os.path.basename(filename) else: usage() return 1 else: suffix = "" if build_header: if HAVE_PYP: providers = _PypProvider() else: providers = _ReProvider() while True: try: providers.probe_write(s_filename, filename + suffix) break; # complex C declarations can fool the pyparsing grammar. # we could increase the complexity of the grammar # instead we fall back to string pattern matching except ParseException: err = sys.exc_info()[1] print("Warning: Proceeding as if --no-pyparsing was given.\n") providers = _ReProvider() elif build_source: if HAVE_PYP: providers = _PypProvider() else: providers = _ReProvider() (ignore, fname) = mkstemp(suffix=".h") while True: try: providers.probe_write(s_filename, fname) break; except ParseException: err = sys.exc_info()[1] print("Warning: Proceeding as if --no-pyparsing was given.\n") providers = _ReProvider() if not keep_temps: os.remove(fname) else: print("header: " + fname) try: # for reproducible-builds purposes, prefer a fixed path name pattern fname = filename + ".dtrace-temp.c" fdesc = open(fname, mode='w') except: # but that doesn't work for -o /dev/null - see rhbz1504009 (ignore,fname) = mkstemp(suffix=".c") fdesc = open(fname, mode='w') providers.semaphore_write(fdesc) fdesc.close() cc1 = os.environ.get("CC", "gcc") cflags = "-g " + os.environ.get("CFLAGS", "").replace('\\\n', ' ').replace('\\\r',' ') # sanitize any embedded \n etc. goo; PR21063 retcode = call(split(cc1) + defines + includes + split(cflags) + ["-fPIC", "-I.", "-I@prefix@/include", "-c", fname, "-o", filename + suffix], shell=False) if retcode != 0: print("\"gcc " + fname + "\" failed") usage() return 1 if not keep_temps: os.remove(fname) else: print("source: " + fname) if use_cpp: if not keep_temps: os.remove(s_filename) else: print("cpp: " + s_filename) return 0 if __name__ == "__main__": sys.exit(main()) systemtap-4.6/dwarf_wrappers.cxx000066400000000000000000000165531414446751200172100ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2008-2014 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "dwarf_wrappers.h" #include "staptree.h" #include "util.h" #include #include #include #include #include using namespace std; void dwfl_assert(const string& desc, int rc, const string& file, int line) { if (rc == 0) return; string msg = _F("libdwfl failure (%s): ", desc.c_str()); if (rc < 0) msg += (dwfl_errmsg (rc) ?: "?"); else msg += std::strerror (rc); throw semantic_error (file+":"+lex_cast(line), msg); } void dwarf_assert(const string& desc, int rc, const string& file, int line) { if (rc == 0) return; string msg = _F("libdw failure (%s): ", desc.c_str()); if (rc < 0) msg += dwarf_errmsg (rc); else msg += std::strerror (rc); throw semantic_error (file+":"+lex_cast(line), msg); } #if !_ELFUTILS_PREREQ(0, 143) // Elfutils prior to 0.143 didn't use attr_integrate when looking up the // decl_file or decl_line, so the attributes would sometimes be missed. For // those old versions, we define custom implementations to do the integration. const char * dwarf_decl_file_integrate (Dwarf_Die *die) { Dwarf_Attribute attr_mem; Dwarf_Sword idx = 0; if (dwarf_formsdata (dwarf_attr_integrate (die, DW_AT_decl_file, &attr_mem), &idx) != 0 || idx == 0) return NULL; Dwarf_Die cudie; Dwarf_Files *files = NULL; if (dwarf_getsrcfiles (dwarf_diecu (die, &cudie, NULL, NULL), &files, NULL) != 0) return NULL; return dwarf_filesrc(files, idx, NULL, NULL); } int dwarf_decl_line_integrate (Dwarf_Die *die, int *linep) { Dwarf_Attribute attr_mem; Dwarf_Sword line; int res = dwarf_formsdata (dwarf_attr_integrate (die, DW_AT_decl_line, &attr_mem), &line); if (res == 0) *linep = line; return res; } #endif // !_ELFUTILS_PREREQ(0, 143) static bool dwarf_type_name(Dwarf_Die *type_die, ostream& o, Dwarf_Die& subroutine) { // if we've gotten down to a basic type, then we're done bool done = true; switch (dwarf_tag(type_die)) { case DW_TAG_enumeration_type: o << "enum "; break; case DW_TAG_structure_type: o << "struct "; break; case DW_TAG_union_type: o << "union "; break; case DW_TAG_class_type: o << "class "; break; case DW_TAG_typedef: case DW_TAG_base_type: break; // modifier types that require recursion first case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: case DW_TAG_pointer_type: case DW_TAG_array_type: case DW_TAG_const_type: case DW_TAG_volatile_type: case DW_TAG_restrict_type: done = false; break; case DW_TAG_subroutine_type: // Subroutine types (function pointers) are a weird case. The modifiers // we've recursed so far need to go in the middle, with the return type // on the left and parameter types on the right. We'll back out now to // get those modifiers, getting the return and parameters separately. subroutine = *type_die; return true; // unknown tag default: return false; } if (done) { // this follows gdb precedent that anonymous structs/unions // are displayed as "struct {...}" and "union {...}". o << (dwarf_diename(type_die) ?: "{...}"); return true; } // otherwise, this die is a type modifier. // recurse into the referent type Dwarf_Die subtype_die_mem, *subtype_die; subtype_die = dwarf_attr_die(type_die, DW_AT_type, &subtype_die_mem); // NB: va_list is a builtin type that shows up in the debuginfo as a // "struct __va_list_tag*", but it has to be called only va_list. if (subtype_die != NULL && dwarf_tag(type_die) == DW_TAG_pointer_type && dwarf_tag(subtype_die) == DW_TAG_structure_type && strcmp(dwarf_diename(subtype_die) ?: "", "__va_list_tag") == 0) { o << "va_list"; return true; } // if it can't be named, just call it "void" if (subtype_die == NULL || !dwarf_type_name(subtype_die, o, subroutine)) o << "void"; switch (dwarf_tag(type_die)) { case DW_TAG_reference_type: o << "&"; break; case DW_TAG_rvalue_reference_type: o << "&&"; break; case DW_TAG_pointer_type: o << "*"; break; case DW_TAG_array_type: o << "[]"; break; case DW_TAG_const_type: // NB: the debuginfo may sometimes have an extra const tag // on reference types, which is redundant to us. if (subtype_die == NULL || (dwarf_tag(subtype_die) != DW_TAG_reference_type && dwarf_tag(subtype_die) != DW_TAG_rvalue_reference_type)) o << " const"; break; case DW_TAG_volatile_type: o << " volatile"; break; case DW_TAG_restrict_type: o << " restrict"; break; default: return false; } return true; } static bool dwarf_subroutine_name(Dwarf_Die *subroutine, ostream& o, const string& modifier) { // First add the return value. Dwarf_Die ret_type; string ret_string; if (dwarf_attr_die (subroutine, DW_AT_type, &ret_type) == NULL) o << "void"; else if (dwarf_type_name (&ret_type, ret_string)) o << ret_string; else return false; // Now the subroutine modifiers. o << " (" << modifier << ")"; // Then write each parameter. o << " ("; bool first = true; Dwarf_Die child; if (dwarf_child (subroutine, &child) == 0) do { auto tag = dwarf_tag (&child); if (tag == DW_TAG_unspecified_parameters || tag == DW_TAG_formal_parameter) { if (first) first = false; else o << ", "; if (tag == DW_TAG_unspecified_parameters) o << "..."; else if (tag == DW_TAG_formal_parameter) { Dwarf_Die param_type; string param_string; if (dwarf_attr_die (&child, DW_AT_type, ¶m_type) == NULL) o << "void"; else if (dwarf_type_name (¶m_type, param_string)) o << param_string; else return false; } } } while (dwarf_siblingof (&child, &child) == 0); if (first) o << "void"; o << ")"; return true; } bool dwarf_type_decl(Dwarf_Die *type_die, const string& var_name, string& decl) { ostringstream o; Dwarf_Die subroutine = { 0, 0, 0, 0 }; if (!dwarf_type_name (type_die, o, subroutine)) return false; if (!var_name.empty()) o << " " << var_name; if (subroutine.addr != 0) { ostringstream subo; if (!dwarf_subroutine_name (&subroutine, subo, o.str())) return false; decl = subo.str(); } else decl = o.str(); return true; } bool dwarf_type_name(Dwarf_Die *type_die, string& type_name) { return dwarf_type_decl(type_die, "", type_name); } string dwarf_type_name(Dwarf_Die *type_die) { string o; return dwarf_type_name (type_die, o) ? o : ""; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/dwarf_wrappers.h000066400000000000000000000131171414446751200166260ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2008-2014 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef DWARF_WRAPPERS_H #define DWARF_WRAPPERS_H 1 #include "config.h" extern "C" { #include #include #include } #include #if ! _ELFUTILS_PREREQ(0, 148) #define DW_AT_linkage_name 0x6e #endif #if ! _ELFUTILS_PREREQ(0, 153) #define DW_TAG_GNU_call_site 0x4109 #define DW_AT_GNU_tail_call 0x2115 #endif #if ! _ELFUTILS_PREREQ(0, 155) #define DW_ATE_UTF 0x10 #endif #define DWFL_ASSERT(desc, arg) \ dwfl_assert(desc, arg, __FILE__, __LINE__) // NB: "rc == 0" means OK in this case void dwfl_assert(const std::string& desc, int rc, const std::string& file, int line); // Throw error if pointer is NULL inline void dwfl_assert(const std::string& desc, const void* ptr, const std::string& file, int line) { if (!ptr) dwfl_assert(desc, -1, file, line); } // Throw error if condition is false inline void dwfl_assert(const std::string& desc, bool condition, const std::string& file, int line) { if (!condition) dwfl_assert(desc, -1, file, line); } #define DWARF_ASSERT(desc, arg) \ dwarf_assert(desc, arg, __FILE__, __LINE__) // NB: "rc == 0" means OK in this case void dwarf_assert(const std::string& desc, int rc, const std::string& file, int line); // Throw error if pointer is NULL inline void dwarf_assert(const std::string& desc, const void* ptr, const std::string& file, int line) { if (!ptr) dwarf_assert(desc, -1, file, line); } #define DWARF_LINENO(line) \ safe_dwarf_lineno(line, __FILE__, __LINE__) inline int safe_dwarf_lineno(const Dwarf_Line* line, const std::string& errfile, int errline) { int lineno; dwarf_assert("dwarf_lineno", dwarf_lineno(const_cast(line), &lineno), errfile, errline); return lineno; } #define DWARF_LINEADDR(line) \ safe_dwarf_lineaddr(line, __FILE__, __LINE__) inline Dwarf_Addr safe_dwarf_lineaddr(const Dwarf_Line* line, const std::string& errfile, int errline) { Dwarf_Addr addr; dwarf_assert("dwarf_lineaddr", dwarf_lineaddr(const_cast(line), &addr), errfile, errline); return addr; } #define DWARF_LINESRC(line) \ safe_dwarf_linesrc(line, NULL, NULL, __FILE__, __LINE__) #define DWARF_LINESRC2(line, mtime) \ safe_dwarf_linesrc(line, mtime, NULL, __FILE__, __LINE__) #define DWARF_LINESRC3(line, mtime, length) \ safe_dwarf_linesrc(line, mtime, length, __FILE__, __LINE__) inline const char* safe_dwarf_linesrc(const Dwarf_Line* line, Dwarf_Word* mtime, Dwarf_Word* length, const std::string& errfile, int errline) { const char* linesrc = dwarf_linesrc(const_cast(line), mtime, length); dwarf_assert("dwarf_linesrc", linesrc, errfile, errline); return linesrc; } #define DWARF_LINEPROLOGUEEND(line) \ safe_dwarf_lineprologueend(line, __FILE__, __LINE__) inline bool safe_dwarf_lineprologueend(const Dwarf_Line* line, const std::string& errfile, int errline) { bool flag; dwarf_assert("is_prologue_end", dwarf_lineprologueend(const_cast(line), &flag), errfile, errline); return flag; } // Look up the DIE for a reference-form attribute name inline Dwarf_Die * dwarf_attr_die (Dwarf_Die *die, unsigned int attr, Dwarf_Die *result) { Dwarf_Attribute attr_mem; if (dwarf_formref_die (dwarf_attr_integrate (die, attr, &attr_mem), result) != NULL) { /* If we want a type make sure we get the actual DIE describing the real type. */ if (attr == DW_AT_type) { Dwarf_Attribute sigm; Dwarf_Attribute *sig = dwarf_attr (result, DW_AT_signature, &sigm); if (sig != NULL) result = dwarf_formref_die (sig, result); /* A DW_AT_signature might point to a type_unit, then the actual type DIE we want is the first child. */ if (result != NULL && dwarf_tag (result) == DW_TAG_type_unit) DWFL_ASSERT("type_unit child", dwarf_child (result, result)); } return result; } return NULL; } // Retrieve the linkage name of a die, either by the MIPS vendor extension or // DWARF4's standardized attribute. inline const char * dwarf_linkage_name (Dwarf_Die *die) { Dwarf_Attribute attr_mem; return dwarf_formstring (dwarf_attr_integrate (die, DW_AT_MIPS_linkage_name, &attr_mem) ?: dwarf_attr_integrate (die, DW_AT_linkage_name, &attr_mem)); } #if !_ELFUTILS_PREREQ(0, 143) // Elfutils prior to 0.143 didn't use attr_integrate when looking up the // decl_file or decl_line, so the attributes would sometimes be missed. For // those old versions, we define custom implementations to do the integration. const char *dwarf_decl_file_integrate (Dwarf_Die *die); #define dwarf_decl_file dwarf_decl_file_integrate int dwarf_decl_line_integrate (Dwarf_Die *die, int *linep) __nonnull_attribute__ (2); #define dwarf_decl_line dwarf_decl_line_integrate #endif // !_ELFUTILS_PREREQ(0, 143) // Resolve a C declaration for dwarf types bool dwarf_type_decl(Dwarf_Die *type_die, const std::string& var_name, std::string& decl); // Resolve a full name for dwarf types bool dwarf_type_name(Dwarf_Die *type_die, std::string& type_name); std::string dwarf_type_name(Dwarf_Die *type_die); #endif /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/dwflpp.cxx000066400000000000000000004716401414446751200154600ustar00rootroot00000000000000// C++ interface to dwfl // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2005-2007 Intel Corporation. // Copyright (C) 2008 James.Bottomley@HansenPartnership.com // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "dwflpp.h" #include "config.h" #include #include "staptree.h" #include "elaborate.h" #include "tapsets.h" #include "task_finder.h" #include "translate.h" #include "session.h" #include "util.h" #include "buildrun.h" #include "dwarf_wrappers.h" #include "hash.h" #include "rpm_finder.h" #include "setupdwfl.h" #include "loc2stap.h" #include #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include #include #include #include #include #include #define __STDC_FORMAT_MACROS #include } // Older glibc elf.h don't know about this new constant. #ifndef STB_GNU_UNIQUE #define STB_GNU_UNIQUE 10 #endif // debug flag to compare to the uncached version from libdw // #define DEBUG_DWFLPP_GETSCOPES 1 using namespace std; using namespace __gnu_cxx; static string TOK_KERNEL("kernel"); dwflpp::dwflpp(systemtap_session & session, const string& name, bool kernel_p, bool debuginfo_needed): sess(session), module(NULL), module_bias(0), mod_info(NULL), module_start(0), module_end(0), cu(NULL), dwfl(NULL), module_dwarf(NULL), function(NULL), blocklist_func(), blocklist_func_ret(), blocklist_file(), blocklist_enabled(false) { if (kernel_p) setup_kernel(name, session, debuginfo_needed); else { vector modules; modules.push_back(name); setup_user(modules); } } dwflpp::dwflpp(systemtap_session & session, const vector& names, bool kernel_p): sess(session), module(NULL), module_bias(0), mod_info(NULL), module_start(0), module_end(0), cu(NULL), dwfl(NULL), module_dwarf(NULL), function(NULL), blocklist_enabled(false) { if (kernel_p) setup_kernel(names); else setup_user(names); } dwflpp::~dwflpp() { delete_map(module_cu_cache); delete_map(cu_function_cache); delete_map(mod_function_cache); delete_map(cu_inl_function_cache); delete_map(cu_call_sites_cache); delete_map(global_alias_cache); delete_map(cu_die_parent_cache); for (auto i = cu_lines_cache.begin(); i != cu_lines_cache.end(); ++i) delete_map(*i->second); delete_map(cu_lines_cache); delete_map(cu_entry_pc_cache); if (dwfl) dwfl_end(dwfl); // NB: don't "delete mod_info;", as that may be shared // between dwflpp instances, and are stored in // session.module_cache[] anyway. } module_cache::~module_cache () { delete_map(cache); } void dwflpp::get_module_dwarf(bool required, bool report) { module_dwarf = dwfl_module_getdwarf(module, &module_bias); mod_info->dwarf_status = (module_dwarf ? info_present : info_absent); if (!module_dwarf && report) { string msg = _("cannot find "); if (module_name == "") msg += "kernel"; else msg += string("module ") + module_name; msg += " debuginfo"; int i = dwfl_errno(); if (i) msg += string(": ") + dwfl_errmsg (i); msg += " [man warning::debuginfo]"; /* add module_name to list to find rpm */ find_debug_rpms(sess, module_name.c_str()); if (required) throw SEMANTIC_ERROR (msg); else sess.print_warning(msg); } } void dwflpp::focus_on_module(Dwfl_Module * m, module_info * mi) { module = m; mod_info = mi; if (m) { module_name = dwfl_module_info(module, NULL, &module_start, &module_end, NULL, NULL, NULL, NULL) ?: "module"; } else { assert(mi && mi->name && mi->name == TOK_KERNEL); module_name = mi->name; module_start = 0; module_end = 0; module_bias = mi->bias; } // Reset existing pointers and names module_dwarf = NULL; cu = NULL; function_name.clear(); function = NULL; } void dwflpp::focus_on_cu(Dwarf_Die * c) { assert(c); assert(module); cu = c; // Reset existing pointers and names function_name.clear(); function = NULL; } string dwflpp::cu_name(void) { return dwarf_diename(cu) ?: ""; } void dwflpp::focus_on_function(Dwarf_Die * f) { assert(f); assert(module); assert(cu); function = f; function_name = dwarf_diename(function) ?: "function"; } /* Return the Dwarf_Die for the given address in the current module. * The address should be in the module address address space (this * function will take care of any dw bias). */ Dwarf_Die * dwflpp::query_cu_containing_address(Dwarf_Addr a) { Dwarf_Addr bias; assert(dwfl); assert(module); get_module_dwarf(); Dwarf_Die* cudie = dwfl_module_addrdie(module, a, &bias); assert(bias == module_bias); return cudie; } bool dwflpp::module_name_matches(const string& pattern) { bool t = (fnmatch(pattern.c_str(), module_name.c_str(), 0) == 0); if (t && sess.verbose>3) clog << _F("pattern '%s' matches module '%s'\n", pattern.c_str(), module_name.c_str()); if (!t && sess.verbose>4) clog << _F("pattern '%s' does not match module '%s'\n", pattern.c_str(), module_name.c_str()); return t; } bool dwflpp::name_has_wildcard (const string& pattern) { return (pattern.find('*') != string::npos || pattern.find('?') != string::npos || pattern.find('[') != string::npos); } bool dwflpp::module_name_final_match(const string& pattern) { // Assume module_name_matches(). Can there be any more matches? // Not unless the pattern is a wildcard, since module names are // presumed unique. return !name_has_wildcard(pattern); } bool dwflpp::function_name_matches_pattern(const string& name, const string& pattern) { bool t = (fnmatch(pattern.c_str(), name.c_str(), 0) == 0); if (t && sess.verbose>3) clog << _F("pattern '%s' matches function '%s'\n", pattern.c_str(), name.c_str()); return t; } bool dwflpp::function_name_matches(const string& pattern) { assert(function); return function_name_matches_pattern(function_name, pattern); } bool dwflpp::function_scope_matches(const vector& scopes) { // walk up the containing scopes Dwarf_Die* die = function; for (int i = scopes.size() - 1; i >= 0; --i) { die = get_parent_scope(die); // check if this scope matches, and prepend it if so // NB: a NULL die is the global scope, compared as "" string name = dwarf_diename(die) ?: ""; if (name_has_wildcard(scopes[i]) ? function_name_matches_pattern(name, scopes[i]) : name == scopes[i]) function_name = name + "::" + function_name; else return false; // make sure there's no more if we're at the global scope if (!die && i > 0) return false; } return true; } void dwflpp::setup_kernel(const string& name, systemtap_session & s, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); unsigned offline_search_matches = 0; dwfl = setup_dwfl_kernel(name, &offline_search_matches, sess); if (offline_search_matches < 1) { if (debuginfo_needed) { // Suggest a likely kernel dir to find debuginfo rpm for string dir = string(sess.sysroot + "/lib/modules/" + sess.kernel_release ); find_debug_rpms(sess, dir.c_str()); throw SEMANTIC_ERROR (_F("missing %s kernel/module debuginfo [man warning::debuginfo] under '%s'", sess.architecture.c_str(), sess.kernel_build_tree.c_str())); } } if (dwfl != NULL) { ptrdiff_t off = 0; do { assert_no_interrupts(); off = dwfl_getmodules (dwfl, &add_module_build_id_to_hash, &s, off); } while (off > 0); DWFL_ASSERT("dwfl_getmodules", off == 0); } build_kernel_blocklist(); } void dwflpp::setup_kernel(const vector &names, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); unsigned offline_search_matches = 0; set offline_search_names(names.begin(), names.end()); dwfl = setup_dwfl_kernel(offline_search_names, &offline_search_matches, sess); if (offline_search_matches < offline_search_names.size()) { if (debuginfo_needed) { // Suggest a likely kernel dir to find debuginfo rpm for string dir = string(sess.sysroot + "/lib/modules/" + sess.kernel_release ); find_debug_rpms(sess, dir.c_str()); throw SEMANTIC_ERROR (_F("missing %s kernel/module debuginfo [man warning::debuginfo] under '%s'", sess.architecture.c_str(), sess.kernel_build_tree.c_str())); } } build_kernel_blocklist(); } void dwflpp::setup_user(const vector& modules, bool debuginfo_needed) { if (! sess.module_cache) sess.module_cache = new module_cache (); auto it = modules.begin(); dwfl = setup_dwfl_user(it, modules.end(), debuginfo_needed, sess); if (debuginfo_needed && it != modules.end()) DWFL_ASSERT (string(_F("missing process %s %s debuginfo", (*it).c_str(), sess.architecture.c_str())), dwfl); build_user_blocklist(); } template<> void dwflpp::iterate_over_modules(int (*callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void*), void *data) { dwfl_getmodules (dwfl, callback, data, 0); // Don't complain if we exited dwfl_getmodules early. // This could be a $target variable error that will be // reported soon anyway. // DWFL_ASSERT("dwfl_getmodules", off == 0); // PR6864 XXX: For dwarfless case (if .../vmlinux is missing), then the // "kernel" module is not reported in the loop above. However, we // may be able to make do with symbol table data. } template<> void dwflpp::iterate_over_cus(int (*callback)(Dwarf_Die*, void*), void *data, bool want_types) { get_module_dwarf(false); Dwarf *dw = module_dwarf; if (!dw) return; vector* v = module_cu_cache[dw]; if (v == 0) { v = new vector; module_cu_cache[dw] = v; Dwarf_Off off = 0; size_t cuhl; Dwarf_Off noff; while (dwarf_nextcu (dw, off, &noff, &cuhl, NULL, NULL, NULL) == 0) { assert_no_interrupts(); Dwarf_Die die_mem; Dwarf_Die *die; die = dwarf_offdie (dw, off + cuhl, &die_mem); /* Skip partial units. */ if (dwarf_tag (die) == DW_TAG_compile_unit) v->push_back (*die); /* copy */ off = noff; } } if (want_types && module_tus_read.find(dw) == module_tus_read.end()) { // Process type units. Dwarf_Off off = 0; size_t cuhl; Dwarf_Off noff; uint64_t type_signature; while (dwarf_next_unit (dw, off, &noff, &cuhl, NULL, NULL, NULL, NULL, &type_signature, NULL) == 0) { assert_no_interrupts(); Dwarf_Die die_mem; Dwarf_Die *die; die = dwarf_offdie_types (dw, off + cuhl, &die_mem); /* Skip partial units. */ if (dwarf_tag (die) == DW_TAG_type_unit) v->push_back (*die); /* copy */ off = noff; } module_tus_read.insert(dw); } for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&*i, data); assert_no_interrupts(); if (rc != DWARF_CB_OK) break; } } bool dwflpp::func_is_inline() { assert (function); return dwarf_func_inline (function) != 0; } bool dwflpp::func_is_exported() { const char *name = dwarf_linkage_name (function) ?: dwarf_diename (function); assert (function); int syms = dwfl_module_getsymtab (module); DWFL_ASSERT (_("Getting symbols"), syms >= 0); for (int i = 0; i < syms; i++) { GElf_Sym sym; GElf_Word shndxp; const char *symname = dwfl_module_getsym(module, i, &sym, &shndxp); if (symname && strcmp (name, symname) == 0) { if (GELF_ST_TYPE(sym.st_info) == STT_FUNC && (GELF_ST_BIND(sym.st_info) == STB_GLOBAL || GELF_ST_BIND(sym.st_info) == STB_WEAK || GELF_ST_BIND(sym.st_info) == STB_GNU_UNIQUE)) return true; else return false; } } return false; } void dwflpp::cache_inline_instances (Dwarf_Die* die) { // If this is an inline instance, link it back to its origin Dwarf_Die origin; if (dwarf_tag(die) == DW_TAG_inlined_subroutine && dwarf_attr_die(die, DW_AT_abstract_origin, &origin)) { vector*& v = cu_inl_function_cache[origin.addr]; if (!v) v = new vector; v->push_back(*die); } // Recurse through other scopes that may contain inlines Dwarf_Die child, import; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // tags that could contain inlines case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_inlined_subroutine: case DW_TAG_subprogram: cache_inline_instances(&child); break; // imported dies should be followed case DW_TAG_imported_unit: if (dwarf_attr_die(&child, DW_AT_import, &import)) cache_inline_instances(&import); break; // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } template<> void dwflpp::iterate_over_inline_instances(int (*callback)(Dwarf_Die*, void*), void *data) { assert (function); assert (func_is_inline ()); if (cu_inl_function_cache_done.insert(cu->addr).second) cache_inline_instances(cu); vector* v = cu_inl_function_cache[function->addr]; if (!v) return; for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&*i, data); assert_no_interrupts(); if (rc != DWARF_CB_OK) break; } } void dwflpp::cache_call_sites (Dwarf_Die* die, Dwarf_Die *function) { Dwarf_Die origin; if (dwarf_tag(die) == DW_TAG_GNU_call_site && dwarf_attr_die(die, DW_AT_abstract_origin, &origin)) { vector*& v = cu_call_sites_cache[origin.addr]; if (!v) v = new vector; call_site_cache_t c (*die, *function); v->push_back(c); } Dwarf_Die child; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // tags that could contain call sites case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_GNU_call_site: cache_call_sites(&child, function); break; case DW_TAG_subprogram: case DW_TAG_inlined_subroutine: cache_call_sites(&child, &child); // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } template<> void dwflpp::iterate_over_call_sites (int (*callback)(Dwarf_Die*, Dwarf_Die*, void*), void *data) { assert (cu); assert (function); if (cu_call_sites_cache_done.insert(cu->addr).second) cache_call_sites(cu, NULL); vector* v = cu_call_sites_cache[function->addr]; if (!v) return; for (auto i = v->begin(); i != v->end(); ++i) { int rc = (*callback)(&i->first, &i->second, data); if (rc != DWARF_CB_OK) break; } } void dwflpp::cache_die_parents(cu_die_parent_cache_t* parents, Dwarf_Die* die) { // Record and recurse through DIEs we care about Dwarf_Die child, import; if (dwarf_child(die, &child) == 0) do { switch (dwarf_tag (&child)) { // normal tags to recurse case DW_TAG_compile_unit: case DW_TAG_module: case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: case DW_TAG_inlined_subroutine: case DW_TAG_subprogram: case DW_TAG_namespace: case DW_TAG_class_type: case DW_TAG_structure_type: parents->insert(make_pair(child.addr, *die)); cache_die_parents(parents, &child); break; // record only, nothing to recurse case DW_TAG_label: parents->insert(make_pair(child.addr, *die)); break; // imported dies should be followed case DW_TAG_imported_unit: if (dwarf_attr_die(&child, DW_AT_import, &import)) { parents->insert(make_pair(import.addr, *die)); cache_die_parents(parents, &import); } break; // nothing to do for other tags default: break; } } while (dwarf_siblingof(&child, &child) == 0); } cu_die_parent_cache_t* dwflpp::get_die_parents() { assert (cu); cu_die_parent_cache_t *& parents = cu_die_parent_cache[cu->addr]; if (!parents) { parents = new cu_die_parent_cache_t; cache_die_parents(parents, cu); if (sess.verbose > 4) clog << _F("die parent cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), parents->size()) << endl; } return parents; } vector dwflpp::getscopes_die(Dwarf_Die* die) { cu_die_parent_cache_t *parents = get_die_parents(); vector scopes; Dwarf_Die *scope = die; auto it = parents->end(); do { scopes.push_back(*scope); it = parents->find(scope->addr); scope = &it->second; } while (it != parents->end()); #ifdef DEBUG_DWFLPP_GETSCOPES Dwarf_Die *dscopes = NULL; int nscopes = dwarf_getscopes_die(die, &dscopes); assert(nscopes == (int)scopes.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == dscopes[i].addr); free(dscopes); #endif return scopes; } std::vector dwflpp::getscopes(Dwarf_Die* die) { cu_die_parent_cache_t *parents = get_die_parents(); vector scopes; Dwarf_Die origin; Dwarf_Die *scope = die; auto it = parents->end(); do { scopes.push_back(*scope); if (dwarf_tag(scope) == DW_TAG_inlined_subroutine && dwarf_attr_die(scope, DW_AT_abstract_origin, &origin)) scope = &origin; it = parents->find(scope->addr); scope = &it->second; } while (it != parents->end()); #ifdef DEBUG_DWFLPP_GETSCOPES // there isn't an exact libdw equivalent, but if dwarf_getscopes on the // entrypc returns the same first die, then all the scopes should match Dwarf_Addr pc; if (die_entrypc(die, &pc)) { Dwarf_Die *dscopes = NULL; int nscopes = dwarf_getscopes(cu, pc, &dscopes); if (nscopes > 0 && dscopes[0].addr == die->addr) { assert(nscopes == (int)scopes.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == dscopes[i].addr); } free(dscopes); } #endif return scopes; } std::vector dwflpp::getscopes(Dwarf_Addr pc) { // The die_parent_cache doesn't help us without knowing where the pc is // contained, so we have to do this one the old fashioned way. assert (cu); vector scopes; Dwarf_Die* dwarf_scopes; int nscopes = dwarf_getscopes(cu, pc, &dwarf_scopes); if (nscopes > 0) { scopes.assign(dwarf_scopes, dwarf_scopes + nscopes); free(dwarf_scopes); } #ifdef DEBUG_DWFLPP_GETSCOPES // check that getscopes on the starting die gets the same result if (!scopes.empty()) { vector other = getscopes(&scopes[0]); assert(scopes.size() == other.size()); for (unsigned i = 0; i < scopes.size(); ++i) assert(scopes[i].addr == other[i].addr); } #endif return scopes; } Dwarf_Die* dwflpp::get_parent_scope(Dwarf_Die* die) { Dwarf_Die specification; if (dwarf_attr_die(die, DW_AT_specification, &specification)) die = &specification; cu_die_parent_cache_t *parents = get_die_parents(); auto it = parents->find(die->addr); while (it != parents->end()) { Dwarf_Die* scope = &it->second; switch (dwarf_tag (scope)) { case DW_TAG_namespace: case DW_TAG_class_type: case DW_TAG_structure_type: return scope; default: break; } it = parents->find(scope->addr); } return NULL; } static const char* cache_type_prefix(Dwarf_Die* type) { switch (dwarf_tag(type)) { case DW_TAG_enumeration_type: return "enum "; case DW_TAG_structure_type: case DW_TAG_class_type: // treating struct/class as equals return "struct "; case DW_TAG_union_type: return "union "; } return ""; } /* GCC might generate a struct/class without DW_AT_declaration, but that only contains members which have DW_AT_declaration set. We aren't interested in those. PR14434 (GCC bug #54181). */ static bool has_only_decl_members (Dwarf_Die *die) { Dwarf_Die child, import; if (dwarf_child(die, &child) != 0) return false; /* no members */ do { if (! dwarf_hasattr(&child, DW_AT_declaration)) return false; /* real member found. */ int tag = dwarf_tag(&child); if ((tag == DW_TAG_namespace || tag == DW_TAG_structure_type || tag == DW_TAG_class_type) && ! has_only_decl_members (&child)) return false; /* real grand child member found. */ // Unlikely to ever happen, but if there is an imported unit // then check its children as if they are children of this DIE. if (tag == DW_TAG_imported_unit && dwarf_attr_die(&child, DW_AT_import, &import) && ! has_only_decl_members (&import)) return false; } while (dwarf_siblingof(&child, &child) == 0); return true; /* Tried all children and grandchildren. */ } int dwflpp::global_alias_caching_callback(Dwarf_Die *die, bool has_inner_types, const string& prefix, cu_type_cache_t *cache) { const char *name = dwarf_diename(die); if (!name || dwarf_hasattr(die, DW_AT_declaration) || has_only_decl_members(die)) return DWARF_CB_OK; int tag = dwarf_tag(die); if (has_inner_types && (tag == DW_TAG_namespace || tag == DW_TAG_structure_type || tag == DW_TAG_class_type)) iterate_over_types(die, has_inner_types, prefix + name + "::", global_alias_caching_callback, cache); if (tag != DW_TAG_namespace) { string type_name = prefix + cache_type_prefix(die) + name; if (cache->find(type_name) == cache->end()) (*cache)[type_name] = *die; } return DWARF_CB_OK; } int dwflpp::global_alias_caching_callback_cus(Dwarf_Die *die, dwflpp *dw) { mod_cu_type_cache_t *global_alias_cache; global_alias_cache = &dw->global_alias_cache; cu_type_cache_t *v = (*global_alias_cache)[die->addr]; if (v != 0) return DWARF_CB_OK; v = new cu_type_cache_t; (*global_alias_cache)[die->addr] = v; iterate_over_globals(die, global_alias_caching_callback, v); return DWARF_CB_OK; } Dwarf_Die * dwflpp::declaration_resolve_other_cus(const string& name) { iterate_over_cus(global_alias_caching_callback_cus, this, true); for (auto i = global_alias_cache.begin(); i != global_alias_cache.end(); ++i) { cu_type_cache_t *v = (*i).second; if (v->find(name) != v->end()) return & ((*v)[name]); } return NULL; } Dwarf_Die * dwflpp::declaration_resolve(const string& name) { cu_type_cache_t *v = global_alias_cache[cu->addr]; if (v == 0) // need to build the cache, just once per encountered module/cu { v = new cu_type_cache_t; global_alias_cache[cu->addr] = v; iterate_over_globals(cu, global_alias_caching_callback, v); if (sess.verbose > 4) clog << _F("global alias cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), v->size()) << endl; } // XXX: it may be desirable to search other modules' declarations // too, in case a module/shared-library processes a // forward-declared pointer type only, where the actual definition // may only be in vmlinux or the application. if (v->find(name) == v->end()) return declaration_resolve_other_cus(name); return & ((*v)[name]); } Dwarf_Die * dwflpp::declaration_resolve(Dwarf_Die *type) { const char* name = dwarf_diename(type); if (!name) return NULL; string type_name = cache_type_prefix(type) + string(name); return declaration_resolve(type_name); } int dwflpp::cu_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v) { const char *name = dwarf_diename(func); if (!name) return DWARF_CB_OK; v->insert(make_pair(name, *func)); return DWARF_CB_OK; } int dwflpp::mod_function_caching_callback (Dwarf_Die* cu, cu_function_cache_t *v) { // need to cast callback to func which accepts void* dwarf_getfuncs (cu, (int (*)(Dwarf_Die*, void*))cu_function_caching_callback, v, 0); return DWARF_CB_OK; } template<> int dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), void *data, const string& function) { int rc = DWARF_CB_OK; assert (module); assert (cu); cu_function_cache_t *v = cu_function_cache[cu->addr]; if (v == 0) { v = new cu_function_cache_t; cu_function_cache[cu->addr] = v; // need to cast callback to func which accepts void* dwarf_getfuncs (cu, (int (*)(Dwarf_Die*, void*))cu_function_caching_callback, v, 0); if (sess.verbose > 4) clog << _F("function cache %s:%s size %zu", module_name.c_str(), cu_name().c_str(), v->size()) << endl; mod_info->update_symtab(v); } auto range = v->equal_range(function); if (range.first != range.second) { for (auto it = range.first; it != range.second; ++it) { Dwarf_Die& die = it->second; if (sess.verbose > 4) clog << _F("function cache %s:%s hit %s", module_name.c_str(), cu_name().c_str(), function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } else if (startswith(function, "_Z")) { // C++ names are mangled starting with a "_Z" prefix. Most of the time // we can discover the mangled name from a die's MIPS_linkage_name // attribute, so we read that to match against the user's function // pattern. Note that this isn't perfect, as not all will have that // attribute (notably ctors and dtors), but we do what we can... for (auto it = v->begin(); it != v->end(); ++it) { if (pending_interrupts) return DWARF_CB_ABORT; Dwarf_Die& die = it->second; const char* linkage_name = NULL; if ((linkage_name = dwarf_linkage_name (&die)) && function_name_matches_pattern (linkage_name, function)) { if (sess.verbose > 4) clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), cu_name().c_str(), linkage_name, function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } } else if (name_has_wildcard (function)) { for (auto it = v->begin(); it != v->end(); ++it) { if (pending_interrupts) return DWARF_CB_ABORT; const string& func_name = it->first; Dwarf_Die& die = it->second; if (function_name_matches_pattern (func_name, function)) { if (sess.verbose > 4) clog << _F("function cache %s:%s match %s vs %s", module_name.c_str(), cu_name().c_str(), func_name.c_str(), function.c_str()) << endl; rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } } else // not a linkage name or wildcard and no match in this CU { // do nothing } return rc; } template<> int dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), void *data, const string& function) { int rc = DWARF_CB_OK; assert (module); get_module_dwarf(false); if (!module_dwarf) return rc; cu_function_cache_t *v = mod_function_cache[module_dwarf]; if (v == 0) { v = new cu_function_cache_t; mod_function_cache[module_dwarf] = v; iterate_over_cus (mod_function_caching_callback, v, false); if (sess.verbose > 4) clog << _F("module function cache %s size %zu", module_name.c_str(), v->size()) << endl; mod_info->update_symtab(v); } auto range = v->equal_range(function); if (range.first != range.second) { for (auto it = range.first; it != range.second; ++it) { Dwarf_Die cu_mem; Dwarf_Die& die = it->second; if (sess.verbose > 4) clog << _F("module function cache %s hit %s", module_name.c_str(), function.c_str()) << endl; // since we're iterating out of cu-context, we need each focus focus_on_cu(dwarf_diecu(&die, &cu_mem, NULL, NULL)); rc = (*callback)(& die, data); if (rc != DWARF_CB_OK) break; } } // undo the focus_on_cu this->cu = NULL; this->function_name.clear(); this->function = NULL; return rc; } /* This basically only goes one level down from the compile unit so it * only picks up top level stuff (i.e. nothing in a lower scope) */ template<> int dwflpp::iterate_over_globals(Dwarf_Die *cu_die, int (*callback)(Dwarf_Die*, bool, const string&, void*), void *data) { assert (cu_die); assert (dwarf_tag(cu_die) == DW_TAG_compile_unit || dwarf_tag(cu_die) == DW_TAG_type_unit || dwarf_tag(cu_die) == DW_TAG_partial_unit); // Ignore partial_unit, if they get imported by a real unit, then // iterate_over_types will traverse them. if (dwarf_tag(cu_die) == DW_TAG_partial_unit) return DWARF_CB_OK; // If this is C++, recurse for any inner types bool has_inner_types = dwarf_srclang(cu_die) == DW_LANG_C_plus_plus; return iterate_over_types(cu_die, has_inner_types, "", callback, data); } template<> int dwflpp::iterate_over_types(Dwarf_Die *top_die, bool has_inner_types, const string& prefix, int (* callback)(Dwarf_Die*, bool, const string&, void*), void *data) { int rc = DWARF_CB_OK; Dwarf_Die die, import; assert (top_die); if (dwarf_child(top_die, &die) != 0) return rc; do /* We're only currently looking for named types, * although other types of declarations exist */ switch (dwarf_tag(&die)) { case DW_TAG_base_type: case DW_TAG_enumeration_type: case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_typedef: case DW_TAG_union_type: case DW_TAG_namespace: rc = (*callback)(&die, has_inner_types, prefix, data); break; case DW_TAG_imported_unit: // Follow the imported_unit and iterate over its contents // (either a partial_unit or a full compile_unit), all its // children should be treated as if they appear in this place. if (dwarf_attr_die(&die, DW_AT_import, &import)) rc = iterate_over_types(&import, has_inner_types, prefix, callback, data); break; } while (rc == DWARF_CB_OK && dwarf_siblingof(&die, &die) == 0); return rc; } /* For each notes section in the current module call 'callback', use * 'data' for the notes buffer and pass 'object' back in case * 'callback' is a method */ template<> int dwflpp::iterate_over_notes(void *object, void (*callback)(void*, const string&, const string&, int, const char*, size_t)) { Dwarf_Addr bias; // Note we really want the actual elf file, not the dwarf .debug file. // Older binutils had a bug where they mangled the SHT_NOTE type during // --keep-debug. Elf* elf = dwfl_module_getelf (module, &bias); size_t shstrndx; if (elf_getshdrstrndx (elf, &shstrndx)) return elf_errno(); Elf_Scn *scn = NULL; vector notes; while ((scn = elf_nextscn (elf, scn)) != NULL) { GElf_Shdr shdr; if (gelf_getshdr (scn, &shdr) == NULL) continue; switch (shdr.sh_type) { case SHT_NOTE: if (!(shdr.sh_flags & SHF_ALLOC)) { string scn_name = elf_strptr(elf, shstrndx, shdr.sh_name); Elf_Data *data = elf_getdata (scn, NULL); size_t next; GElf_Nhdr nhdr; size_t name_off; size_t desc_off; for (size_t offset = 0; (next = gelf_getnote (data, offset, &nhdr, &name_off, &desc_off)) > 0; offset = next) { const char *note_name_addr = (const char *)data->d_buf + name_off; const char *note_desc_addr = (const char *)data->d_buf + desc_off; string note_name = nhdr.n_namesz > 1 // n_namesz includes NULL ? string(note_name_addr, nhdr.n_namesz-1) : ""; (*callback) (object, scn_name, note_name, nhdr.n_type, note_desc_addr, nhdr.n_descsz); } } break; } } return 0; } /* For each entry in the .dynamic section in the current module call 'callback' * returning 'object' in case 'callback' is a method */ template<> void dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), void *data) { std::set added; string interpreter; assert (this->module_name.length() != 0); Dwarf_Addr bias; // We cannot use this: dwarf_getelf (dwfl_module_getdwarf (module, &bias)) Elf *elf = dwfl_module_getelf (module, &bias); // elf_getphdrnum (elf, &phnum) is not available in all versions of elfutils // needs libelf from elfutils 0.144+ for (int i = 0; ; i++) { GElf_Phdr mem; GElf_Phdr *phdr; phdr = gelf_getphdr (elf, i, &mem); if (phdr == NULL) break; if (phdr->p_type == PT_INTERP) { size_t maxsize; char *filedata = elf_rawfile (elf, &maxsize); if (filedata != NULL && phdr->p_offset < maxsize) interpreter = (char*) (filedata + phdr->p_offset); break; } } if (interpreter.length() == 0) return; // If it gets cumbersome to maintain this passlist, we could just check for // startswith("/lib/ld") || startswith("/lib64/ld"), and trust that no admin // would install untrustworthy loaders in those paths. // See also http://sourceware.org/git/?p=glibc.git;a=blob;f=shlib-versions;hb=HEAD if (interpreter != "/lib/ld.so.1" // s390, ppc && interpreter != "/lib/ld64.so.1" // s390x, ppc64 && interpreter != "/lib64/ld64.so.1" && interpreter != "/lib/ld-linux-ia64.so.2" // ia64 && interpreter != "/usr/lib/ld-linux-x86-64.so.2" // && interpreter != "/emul/ia32-linux/lib/ld-linux.so.2" && interpreter != "/lib64/ld-linux-x86-64.so.2" // x8664 && interpreter != "/lib/ld-linux.so.2" // x86 && interpreter != "/lib/ld-linux.so.3" // arm && interpreter != "/lib/ld-linux-armhf.so.3" // arm && interpreter != "/lib/ld-linux-aarch64.so.1" // arm64 && interpreter != "/lib64/ld64.so.2" // ppc64le ) { sess.print_warning (_F("module %s --ldd skipped: unsupported interpreter: %s", module_name.c_str(), interpreter.c_str())); return; } vector ldd_command; ldd_command.push_back("/usr/bin/env"); ldd_command.push_back("LD_TRACE_LOADED_OBJECTS=1"); ldd_command.push_back("LD_WARN=yes"); ldd_command.push_back("LD_BIND_NOW=yes"); ldd_command.push_back(interpreter); ldd_command.push_back(module_name); FILE *fp; int child_fd; pid_t child = stap_spawn_piped(sess.verbose, ldd_command, NULL, &child_fd); if (child <= 0 || !(fp = fdopen(child_fd, "r"))) clog << _F("library iteration on %s failed: %s", module_name.c_str(), strerror(errno)) << endl; else { while (1) { char linebuf[256]; char soname[256]; char shlib[256]; unsigned long int addr = 0; char *line = fgets (linebuf, 256, fp); if (line == 0) break; // EOF or error // Try soname => shlib (0xaddr) int nf = sscanf (line, "%255s => %255s (0x%lx)", soname, shlib, &addr); if (nf != 3 || shlib[0] != '/') { // Try shlib (0xaddr) nf = sscanf (line, " %255s (0x%lx)", shlib, &addr); if (nf != 2 || shlib[0] != '/') continue; // fewer than expected fields, or bad shlib. } if (added.find (shlib) == added.end()) { if (sess.verbose > 2) { clog << _F("Added -d '%s", shlib); if (nf == 3) clog << _F("' due to '%s'", soname); else clog << "'"; clog << endl; } added.insert (shlib); } } if ((fclose(fp) || stap_waitpid(sess.verbose, child))) sess.print_warning("failed to read libraries from " + module_name + ": " + strerror(errno)); } for (auto it = added.begin(); it != added.end(); it++) { const string& modname = *it; (callback) (data, modname.c_str()); } } /* For each plt section in the current module call 'callback', pass the plt entry * 'address' and 'name' back, and pass 'object' back in case 'callback' is a method */ template<> int dwflpp::iterate_over_plt(void *object, void (*callback)(void*, const char*, size_t)) { Dwarf_Addr load_addr; // Note we really want the actual elf file, not the dwarf .debug file. Elf* elf = dwfl_module_getelf (module, &load_addr); size_t shstrndx; assert (elf_getshdrstrndx (elf, &shstrndx) >= 0); // Get the load address for (int i = 0; ; i++) { GElf_Phdr mem; GElf_Phdr *phdr; phdr = gelf_getphdr (elf, i, &mem); if (phdr == NULL) break; if (phdr->p_type == PT_LOAD) { load_addr = phdr->p_vaddr; break; } } // Get the plt section header Elf_Scn *scn = NULL; GElf_Shdr *plt_shdr = NULL; GElf_Shdr plt_shdr_mem; while ((scn = elf_nextscn (elf, scn))) { GElf_Shdr *shdr = gelf_getshdr (scn, &plt_shdr_mem); assert (shdr != NULL); if (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".plt") == 0) { plt_shdr = shdr; break; } } if (plt_shdr == NULL) return 0; // Layout of the plt section int plt0_entry_size; int plt_entry_size; GElf_Ehdr ehdr_mem; GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); switch (em->e_machine) { case EM_386: plt0_entry_size = 16; plt_entry_size = 16; break; case EM_X86_64: plt0_entry_size = 16; plt_entry_size = 16; break; case EM_ARM: plt0_entry_size = 20; plt_entry_size = 12; break; case EM_AARCH64:plt0_entry_size = 32; plt_entry_size = 16; break; case EM_PPC64: case EM_S390: case EM_PPC: default: throw SEMANTIC_ERROR(".plt is not supported on this architecture"); } scn = NULL; while ((scn = elf_nextscn (elf, scn))) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); bool have_rela = false; bool have_rel = false; if (shdr == NULL) continue; assert (shdr != NULL); if ((have_rela = (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".rela.plt") == 0)) || (have_rel = (strcmp (elf_strptr (elf, shstrndx, shdr->sh_name), ".rel.plt") == 0))) { /* Get the data of the section. */ Elf_Data *data = elf_getdata (scn, NULL); assert (data != NULL); /* Get the symbol table information. */ Elf_Scn *symscn = elf_getscn (elf, shdr->sh_link); GElf_Shdr symshdr_mem; GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem); assert (symshdr != NULL); Elf_Data *symdata = elf_getdata (symscn, NULL); assert (symdata != NULL); unsigned int nsyms = shdr->sh_size / shdr->sh_entsize; for (unsigned int cnt = 0; cnt < nsyms; ++cnt) { GElf_Ehdr ehdr_mem; GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); if (em == 0) { DWFL_ASSERT ("dwfl_getehdr", dwfl_errno()); } GElf_Rela relamem; GElf_Rela *rela = NULL; GElf_Rel relmem; GElf_Rel *rel = NULL; if (have_rela) { rela = gelf_getrela (data, cnt, &relamem); assert (rela != NULL); } else if (have_rel) { rel = gelf_getrel (data, cnt, &relmem); assert (rel != NULL); } GElf_Sym symmem; Elf32_Word xndx; Elf_Data *xndxdata = NULL; GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (have_rela ? rela->r_info : rel->r_info), &symmem, &xndx); assert (sym != NULL); Dwarf_Addr addr = plt_shdr->sh_offset + plt0_entry_size + cnt * plt_entry_size; if (elf_strptr (elf, symshdr->sh_link, sym->st_name)) (*callback) (object, elf_strptr (elf, symshdr->sh_link, sym->st_name), addr + load_addr); } break; // while scn } } return 0; } // Comparator function for sorting static bool compare_lines(Dwarf_Line* a, Dwarf_Line* b) { if (a == b) return false; int lineno_a = DWARF_LINENO(a); int lineno_b = DWARF_LINENO(b); if (lineno_a == lineno_b) return DWARF_LINEADDR(a) < DWARF_LINEADDR(b); return lineno_a < lineno_b; } // Comparator object for searching Dwarf_Lines with a specific lineno when we // don't have a Dwarf_Line of our own to search for (hence why a or b is always // NULL). struct lineno_comparator { int lineno; lineno_comparator(int lineno): lineno(lineno) {} bool operator() (Dwarf_Line* a, Dwarf_Line* b) { assert(a || b); if (a) return DWARF_LINENO(a) < lineno; else return lineno < DWARF_LINENO(b); } }; // Returns a range of lines in between begin and end with wanted lineno. If // none exist, points to where it would have been. static lines_range_t lineno_equal_range(lines_t* v, int lineno) { lineno_comparator lc(lineno); return equal_range(v->begin(), v->end(), (Dwarf_Line*)NULL, lc); } // Interface to CU lines cache sorted by lineno lines_t* dwflpp::get_cu_lines_sorted_by_lineno(const char *srcfile) { assert(cu); srcfile_lines_cache_t *srcfile_lines = cu_lines_cache[cu]; if (!srcfile_lines) { srcfile_lines = new srcfile_lines_cache_t(); cu_lines_cache[cu] = srcfile_lines; } lines_t *lines = (*srcfile_lines)[srcfile]; if (!lines) { size_t nlines_cu = 0; Dwarf_Lines *lines_cu = NULL; DWARF_ASSERT("dwarf_getsrclines", dwarf_getsrclines(cu, &lines_cu, &nlines_cu)); lines = new lines_t(); (*srcfile_lines)[srcfile] = lines; for (size_t i = 0; i < nlines_cu; i++) { Dwarf_Line *line = dwarf_onesrcline(lines_cu, i); const char *linesrc = DWARF_LINESRC(line); if (strcmp(srcfile, linesrc)) continue; lines->push_back(line); } if (lines->size() > 1) sort(lines->begin(), lines->end(), compare_lines); if (sess.verbose > 3) { clog << _F("found the following lines for %s:", srcfile) << endl; for (auto i = lines->begin(); i != lines->end(); ++i) cout << DWARF_LINENO(*i) << " = " << hex << DWARF_LINEADDR(*i) << dec << endl; } } return lines; } static Dwarf_Line* get_func_first_line(Dwarf_Die *cu, base_func_info& func) { // dwarf_getsrc_die() uses binary search to find the Dwarf_Line, but will // return the wrong line if not found. Dwarf_Line *line = dwarf_getsrc_die(cu, func.entrypc); if (line && DWARF_LINEADDR(line) == func.entrypc) return line; // Line not found (or line at wrong addr). We have to resort to a slower // linear method. We won't find an exact match (probably this is an inlined // instance), so just settle on the first Dwarf_Line with lowest addr which // falls in the die. size_t nlines = 0; Dwarf_Lines *lines = NULL; DWARF_ASSERT("dwarf_getsrclines", dwarf_getsrclines(cu, &lines, &nlines)); for (size_t i = 0; i < nlines; i++) { line = dwarf_onesrcline(lines, i); if (dwarf_haspc(&func.die, DWARF_LINEADDR(line))) return line; } return NULL; } static lines_t collect_lines_in_die(lines_range_t range, Dwarf_Die *die) { lines_t lines_in_die; for (auto line = range.first; line != range.second; ++line) if (dwarf_haspc(die, DWARF_LINEADDR(*line))) lines_in_die.push_back(*line); return lines_in_die; } static void add_matching_lines_in_func(Dwarf_Die *cu, lines_t *cu_lines, base_func_info& func, lines_t& matching_lines) { Dwarf_Line *start_line = get_func_first_line(cu, func); if (!start_line) return; for (int lineno = DWARF_LINENO(start_line);;) { lines_range_t range = lineno_equal_range(cu_lines, lineno); // We consider the lineno still part of the die if at least one of them // falls in the die. lines_t lines_in_die = collect_lines_in_die(range, &func.die); if (lines_in_die.empty()) break; // Just pick the first LR even if there are more than one. Since the lines // are sorted by lineno and then addr, the first one is the one with the // lowest addr. matching_lines.push_back(lines_in_die[0]); // break out if there are no more lines, otherwise, go to the next lineno if (range.second == cu_lines->end()) break; lineno = DWARF_LINENO(*range.second); } } void dwflpp::collect_all_lines(char const * srcfile, base_func_info_map_t& funcs, lines_t& matching_lines) { // This is where we handle WILDCARD lineno types. lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); for (auto func = funcs.begin(); func != funcs.end(); ++func) add_matching_lines_in_func(cu, cu_lines, *func, matching_lines); } static void add_matching_line_in_die(lines_t *cu_lines, lines_t& matching_lines, Dwarf_Die *die, int lineno) { lines_range_t lineno_range = lineno_equal_range(cu_lines, lineno); lines_t lines_in_die = collect_lines_in_die(lineno_range, die); if (lines_in_die.empty()) return; // Even if there are more than 1 LRs, just pick the first one. Since the lines // are sorted by lineno and then addr, the first one is the one with the // lowest addr. This is similar to what GDB does. matching_lines.push_back(lines_in_die[0]); } void dwflpp::collect_lines_for_single_lineno(char const * srcfile, int lineno, bool is_relative, base_func_info_map_t& funcs, lines_t& matching_lines) { /* Here, we handle ABSOLUTE and RELATIVE lineno types. Relative line numbers * are a bit special. The issue is that functions (esp. inlined ones) may not * even have a LR corresponding to the first valid line of code. So, applying * an offset to the 'first' LR found in the DIE can be quite imprecise. * Instead, we use decl_line, which although does not necessarily have a * LR associated with it (it can sometimes still happen esp. if the code is * written in OTB-style), it serves as an anchor on which we can apply the * offset to yield a lineno that will not change with compiler optimization. * It also has the added benefit of being consistent with the lineno * printed by e.g. stap -l kernel.function("vfs_read"), so users can be * confident from what lineno we adjust. */ lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); for (auto func = funcs.begin(); func != funcs.end(); ++func) add_matching_line_in_die(cu_lines, matching_lines, &func->die, is_relative ? lineno + func->decl_line : lineno); } static bool functions_have_lineno(base_func_info_map_t& funcs, lines_t *lines, int lineno) { lines_range_t lineno_range = lineno_equal_range(lines, lineno); if (lineno_range.first == lineno_range.second) return false; // no LRs at this lineno for (auto func = funcs.begin(); func != funcs.end(); ++func) if (!collect_lines_in_die(lineno_range, &func->die).empty()) return true; return false; } // returns pair of valid linenos surrounding target lineno pair dwflpp::get_nearest_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); lines_t *cu_lines = get_cu_lines_sorted_by_lineno(srcfile); // Look around lineno for linenos with LRs. pair nearest_linenos = make_pair(-1, -1); for (size_t i = 1; i < 6; ++i) { if (nearest_linenos.first == -1 && functions_have_lineno(funcs, cu_lines, lineno-i)) nearest_linenos.first = lineno - i; if (nearest_linenos.second == -1 && functions_have_lineno(funcs, cu_lines, lineno+i)) nearest_linenos.second = lineno + i; } return nearest_linenos; } // returns nearest valid lineno to target lineno int dwflpp::get_nearest_lineno(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); pair nearest_linenos = get_nearest_linenos(srcfile, lineno, funcs); if (nearest_linenos.first > 0 && nearest_linenos.second > 0) { // pick the nearest line number (break tie to upper) if (lineno - nearest_linenos.first < nearest_linenos.second - lineno) return nearest_linenos.first; else return nearest_linenos.second; } else if (nearest_linenos.first > 0) return nearest_linenos.first; else if (nearest_linenos.second > 0) return nearest_linenos.second; else return -1; } void dwflpp::suggest_alternative_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs) { assert(cu); pair nearest_linenos = get_nearest_linenos(srcfile, lineno, funcs); stringstream advice; advice << _F("no line records for %s:%d [man error::dwarf]", srcfile, lineno); if (nearest_linenos.first > 0 || nearest_linenos.second > 0) { //TRANSLATORS: Here we are trying to advise what source file //TRANSLATORS: to attempt. advice << _(" (try "); if (nearest_linenos.first > 0) advice << ":" << nearest_linenos.first; if (nearest_linenos.first > 0 && nearest_linenos.second > 0) advice << _(" or "); if (nearest_linenos.second > 0) advice << ":" << nearest_linenos.second; advice << ")"; } throw SEMANTIC_ERROR (advice.str()); } static base_func_info_map_t get_funcs_in_srcfile(base_func_info_map_t& funcs, const char * srcfile) { base_func_info_map_t matching_funcs; for (auto func = funcs.begin(); func != funcs.end(); ++func) if (func->decl_file == string(srcfile)) matching_funcs.push_back(*func); return matching_funcs; } template<> void dwflpp::iterate_over_srcfile_lines(char const * srcfile, const vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (* callback) (Dwarf_Addr, int, void*), bool has_nearest, void *data) { /* Matching line records (LRs) to user-provided linenos is trickier than it * seems. The fate of all functions is one of three possibilities: * 1. it's a normal function, with a subprogram DIE and a bona fide lowpc * and highpc attribute. * 2. it's an inlined function (one/multiple inlined_subroutine DIE, with one * abstract_origin DIE) * 3. it's both a normal function and an inlined function. For example, if * the funtion has been inlined only in some places, we'll have a DIE for * the normal subprogram DIE as well as inlined_subroutine DIEs. * * Multiple LRs for the same lineno but different addresses can simply happen * due to the function appearing in multiple forms. E.g. a function inlined * in two spots can yield two sets of LRs for its linenos at the different * addresses where it is inlined. * This is why the collect_* functions used here try to match up LRs back * to their originating DIEs. For example, in the function * collect_lines_for_single_lineno(), we filter first by DIE so that a lineno * corresponding to multiple addrs in multiple inlined_subroutine DIEs yields * a probe for each of them. */ assert(cu); // only work on the functions found in the current srcfile base_func_info_map_t current_funcs = get_funcs_in_srcfile(funcs, srcfile); if (current_funcs.empty()) return; // collect lines lines_t matching_lines; if (lineno_type == ABSOLUTE) collect_lines_for_single_lineno(srcfile, linenos[0], false, /* is_relative */ current_funcs, matching_lines); else if (lineno_type == RELATIVE) collect_lines_for_single_lineno(srcfile, linenos[0], true, /* is_relative */ current_funcs, matching_lines); else if (lineno_type == WILDCARD) collect_all_lines(srcfile, current_funcs, matching_lines); else if (lineno_type == ENUMERATED) { set collected_linenos; for (auto it = linenos.begin(); it != linenos.end(); it++) { // have we already collected this lineno? if (collected_linenos.find(*it) != collected_linenos.end()) continue; // remember end iterator so we can tell if things were found later auto itend = matching_lines.end(); collect_lines_for_single_lineno(srcfile, *it, false, /* is_relative */ current_funcs, matching_lines); // add to set if we found LRs if (itend != matching_lines.end()) collected_linenos.insert(*it); // if we didn't find anything and .nearest is given, then try nearest if (itend == matching_lines.end() && has_nearest) { int nearest_lineno = get_nearest_lineno(srcfile, *it, current_funcs); if (nearest_lineno <= 0) // no valid nearest linenos continue; bool new_lineno = collected_linenos.insert(nearest_lineno).second; if (new_lineno) collect_lines_for_single_lineno(srcfile, nearest_lineno, false, /* is_relative */ current_funcs, matching_lines); } } } // should we try to collect the nearest lines if we didn't collect everything // on first try? (ABSOLUTE and RELATIVE only: ENUMERATED handles it already // and WILDCARD doesn't need it) if (matching_lines.empty() && has_nearest && (lineno_type == ABSOLUTE || lineno_type == RELATIVE)) { int lineno = linenos[0]; if (lineno_type == RELATIVE) // just pick the first function and make it relative to that lineno += current_funcs[0].decl_line; int nearest_lineno = get_nearest_lineno(srcfile, lineno, current_funcs); if (nearest_lineno > 0) collect_lines_for_single_lineno(srcfile, nearest_lineno, false, /* is_relative */ current_funcs, matching_lines); } // call back with matching lines if (!matching_lines.empty()) { set probed_addrs; for (auto line = matching_lines.begin(); line != matching_lines.end(); ++line) { int lineno = DWARF_LINENO(*line); Dwarf_Addr addr = DWARF_LINEADDR(*line); bool is_new_addr = probed_addrs.insert(addr).second; if (is_new_addr) callback(addr, lineno, data); } } // No LRs found at the wanted lineno. So let's suggest other ones if user was // targeting a specific lineno (ABSOLUTE or RELATIVE). else if (lineno_type == ABSOLUTE || lineno_type == RELATIVE) { int lineno = linenos[0]; if (lineno_type == RELATIVE) // just pick the first function and make it relative to that lineno += current_funcs[0].decl_line; suggest_alternative_linenos(srcfile, lineno, current_funcs); } else if (lineno_type == WILDCARD) { // PR23760: It's not an error to come across a srcfile that has // no line records, if we're just happening across it as a // wildcard case. Only best effort matches are expected here. // // throw SEMANTIC_ERROR(_F("no line records for %s [man error::dwarf]", srcfile)); } } template<> void dwflpp::iterate_over_labels(Dwarf_Die *begin_die, const string& sym, const base_func_info& function, const vector& linenos, enum lineno_t lineno_type, void *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*)) { get_module_dwarf(); Dwarf_Die die, import; const char *name; int res = dwarf_child (begin_die, &die); if (res != 0) return; // die without children, bail out. do { switch (dwarf_tag(&die)) { case DW_TAG_label: name = dwarf_diename (&die); if (name && (name == sym || (name_has_wildcard(sym) && function_name_matches_pattern (name, sym)))) { // Don't try to be smart. Just drop no addr labels. Dwarf_Addr stmt_addr; if (dwarf_lowpc (&die, &stmt_addr) == 0) { // Get the file/line number for this label int dline; const char *file = dwarf_decl_file (&die) ?: ""; dwarf_decl_line (&die, &dline); vector scopes = getscopes_die(&die); if (scopes.size() > 1) { Dwarf_Die scope; if (!inner_die_containing_pc(scopes[1], stmt_addr, scope)) { sess.print_warning(_F("label '%s' at address %s (dieoffset: %s) is not " "contained by its scope '%s' (dieoffset: %s) -- bad" " debuginfo? [man error::dwarf]", name, lex_cast_hex(stmt_addr).c_str(), lex_cast_hex(dwarf_dieoffset(&die)).c_str(), (dwarf_diename(&scope) ?: ""), lex_cast_hex(dwarf_dieoffset(&scope)).c_str())); } bool matches_lineno; if (lineno_type == ABSOLUTE) matches_lineno = dline == linenos[0]; else if (lineno_type == RELATIVE) matches_lineno = dline == linenos[0] + function.decl_line; else if (lineno_type == ENUMERATED) matches_lineno = (binary_search(linenos.begin(), linenos.end(), dline)); else // WILDCARD matches_lineno = true; if (matches_lineno) callback(function, name, file, dline, &scope, stmt_addr, data); } } } break; case DW_TAG_subprogram: case DW_TAG_inlined_subroutine: // Stay within our filtered function break; case DW_TAG_imported_unit: // Iterate over the children of the imported unit as if they // were inserted in place. if (dwarf_attr_die(&die, DW_AT_import, &import)) iterate_over_labels (&import, sym, function, linenos, lineno_type, data, callback); break; default: if (dwarf_haschildren (&die)) iterate_over_labels (&die, sym, function, linenos, lineno_type, data, callback); break; } } while (dwarf_siblingof (&die, &die) == 0); } // Mini 'query-like' struct to help us navigate callbacks during // external function resolution struct external_function_query { dwflpp* dw; const string name; Dwarf_Die die; Dwarf_Addr addr; bool resolved; external_function_query(dwflpp* dw, const string& name): dw(dw), name(name), die(), addr(0), resolved(false) {} }; int dwflpp::external_function_cu_callback (Dwarf_Die* cu, external_function_query *efq) { efq->dw->focus_on_cu(cu); return efq->dw->iterate_over_functions(external_function_func_callback, efq, efq->name); } int dwflpp::external_function_func_callback (Dwarf_Die* func, external_function_query *efq) { Dwarf_Attribute external; Dwarf_Addr func_addr; if (dwarf_attr_integrate(func, DW_AT_external, &external) != NULL && dwarf_lowpc(func, &func_addr) == 0) { efq->die = *func; efq->addr = func_addr; efq->resolved = true; return DWARF_CB_ABORT; // we found it so stop here } return DWARF_CB_OK; } template<> void dwflpp::iterate_over_callees(Dwarf_Die *begin_die, const string& sym, int64_t recursion_depth, void *data, void (* callback)(base_func_info&, base_func_info&, stack*, void*), base_func_info& caller, stack *callers) { get_module_dwarf(); Dwarf_Die die, import; // DIE of abstract_origin found in die Dwarf_Die origin; // callee's entry pc (= where we'll probe) Dwarf_Addr func_addr; // caller's unwind pc during call (to match against bt for filtering) Dwarf_Addr caller_uw_addr; Dwarf_Attribute attr; base_func_info callee; if (dwarf_child(begin_die, &die) != 0) return; // die without children, bail out. bool free_callers = false; if (callers == NULL) /* first call */ { callers = new stack(); free_callers = true; } do { bool inlined = false; switch (dwarf_tag(&die)) { case DW_TAG_inlined_subroutine: inlined = true; /* FALLTHROUGH */ /* thanks mjw */ case DW_TAG_GNU_call_site: callee.name = dwarf_diename(&die) ?: ""; if (callee.name.empty()) continue; if (callee.name != sym) { if (!name_has_wildcard(sym)) continue; if (!function_name_matches_pattern(callee.name, sym)) continue; } /* In both cases (call sites and inlines), we want the * abstract_origin. The difference is that in inlines, the addr is * in the die itself, whereas for call sites, the addr is in the * abstract_origin's die. * Note that in the case of inlines, we're only calling back * for that inline instance, not all. This is what we want, since * it will only be triggered when 'called' from the target func, * which is something we have to emulate for non-inlined funcs * (which is the purpose of the caller_uw_addr below) */ if (dwarf_attr_die(&die, DW_AT_abstract_origin, &origin) == NULL) continue; // the low_pc of the die in either cases is the pc that would // show up in a backtrace (inlines are a special case in which // the die's low_pc is also the abstract_origin's low_pc = the // 'start' of the inline instance) if (dwarf_lowpc(&die, &caller_uw_addr) != 0) continue; if (inlined) func_addr = caller_uw_addr; else if (dwarf_lowpc(&origin, &func_addr) != 0) { // function doesn't have a low_pc, is it external? if (dwarf_attr_integrate(&origin, DW_AT_external, &attr) != NULL) { // let's iterate over the CUs and find it. NB: it's // possible we could have also done this by creating a // probe point with .exported tacked on and rerunning it // through derive_probe(). But since we're already on the // dwflpp side of things, and we already have access to // everything we need, let's try to be self-sufficient. // remember old focus Dwarf_Die *old_cu = cu; external_function_query efq(this, dwarf_linkage_name(&origin) ?: callee.name); iterate_over_cus(external_function_cu_callback, &efq, false); // restore focus cu = old_cu; if (!efq.resolved) // did we resolve it? continue; func_addr = efq.addr; origin = efq.die; } // non-external function without low_pc, jump ship else continue; } // We now have the addr to probe in func_addr, and the DIE // from which to obtain file/line info in origin // Get the file/line number for this callee callee.decl_file = dwarf_decl_file (&origin) ?: ""; dwarf_decl_line (&origin, &callee.decl_line); // add as a caller to match against if (!inlined) callers->push(caller_uw_addr); callee.die = inlined ? die : origin; callee.entrypc = func_addr; callback(callee, caller, callers, data); // If it's a tail call, print a warning that it may not be caught if (!inlined && dwarf_attr_integrate(&die, DW_AT_GNU_tail_call, &attr) != NULL) sess.print_warning (_F("Callee \"%s\" in function \"%s\" is a tail call: " ".callee probe may not fire. Try placing the probe " "directly on the callee function instead.", callee.name.to_string().c_str(), caller.name.to_string().c_str())); // For .callees(N) probes, we recurse on this callee. Note that we // pass the callee we just found as the caller arg for this recursion, // since it (the callee we just found) will be the caller of whatever // callees found inside this recursion. if (recursion_depth > 1) iterate_over_callees(inlined ? &die : &origin, sym, recursion_depth-1, data, callback, callee, callers); if (!inlined) callers->pop(); break; case DW_TAG_subprogram: break; // don't leave our filtered func case DW_TAG_imported_unit: // Iterate over the children of the imported unit as if they // were inserted in place. if (dwarf_attr_die(&die, DW_AT_import, &import)) // NB: we pass the same caller arg into it iterate_over_callees (&import, sym, recursion_depth, data, callback, caller, callers); break; default: if (dwarf_haschildren (&die)) // NB: we pass the same caller arg into it iterate_over_callees (&die, sym, recursion_depth, data, callback, caller, callers); break; } } while (dwarf_siblingof (&die, &die) == 0); if (free_callers && callers != NULL) delete callers; } void dwflpp::collect_srcfiles_matching (string const & pattern, set & filtered_srcfiles) { assert (module); assert (cu); size_t nfiles; Dwarf_Files *srcfiles; // PR 5049: implicit * in front of given path pattern. // NB: fnmatch() is used without FNM_PATHNAME. string prefixed_pattern = string("*/") + pattern; DWARF_ASSERT ("dwarf_getsrcfiles", dwarf_getsrcfiles (cu, &srcfiles, &nfiles)); { for (size_t i = 0; i < nfiles; ++i) { char const * fname = dwarf_filesrc (srcfiles, i, NULL, NULL); if (strcmp (fname, "???") == 0) // elfutils represents index=0 null_file this way sometimes continue; if (fnmatch (pattern.c_str(), fname, 0) == 0 || fnmatch (prefixed_pattern.c_str(), fname, 0) == 0) { filtered_srcfiles.insert (fname); if (sess.verbose>2) clog << _F("selected source file '%s'\n", fname); } } } } void dwflpp::resolve_prologue_endings (func_info_map_t & funcs) { // When a program is compiled with no optimization, GCC does no variable // tracking, which means that location info is actually only really valid // after the prologue, even though GCC reports it as valid during. So we need // to find the prologue ends to get accurate info. This may or may not be the // first address that has a source line distinct from the function // declaration's. assert(module); assert(cu); size_t nlines = 0; Dwarf_Lines *lines = NULL; /* trouble cases: malloc do_symlink in init/initramfs.c tail-recursive/tiny then no-prologue sys_get?id in kernel/timer.c no-prologue sys_exit_group tail-recursive {do_,}sys_open extra-long-prologue (gcc 3.4) cpu_to_logical_apicid NULL-decl_file */ // Fetch all srcline records, sorted by address. No need to free lines, it's a // direct pointer to the CU's cached lines. if (dwarf_getsrclines(cu, &lines, &nlines) != 0 || lines == NULL || nlines == 0) { if (sess.verbose > 2) clog << _F("aborting prologue search: no source lines found for cu '%s'\n", cu_name().c_str()); return; } // Dump them into our own array for easier searching. They should already be // sorted by addr, but we doublecheck that here. We want to keep the indices // between lines and addrs the same. vector addrs; for (size_t i = 0; i < nlines; i++) { Dwarf_Line* line = dwarf_onesrcline(lines, i); Dwarf_Addr addr = DWARF_LINEADDR(line); if (!addrs.empty() && addr < addrs.back()) throw SEMANTIC_ERROR(_("lines from dwarf_getsrclines() not sorted")); addrs.push_back(addr); } // We normally ignore a function's decl_line, since it is associated with the // line at which the identifier appears in the declaration, and has no // meaningful relation to the lineno associated with the entrypc (which is // normally the lineno of '{', which could occur at the same line as the // declaration, or lower down). // However, if the CU was compiled using GCC < 4.4, then the decl_line // actually represents the lineno of '{' as well, in which case if the lineno // associated with the entrypc is != to the decl_line, it means the compiler // scraped/optimized off some of the beginning of the function and the safest // thing we can do is consider it naked. bool consider_decl_line = false; { string prod, vers; if (is_gcc_producer(cu, prod, vers) && strverscmp(vers.c_str(), "4.4.0") < 0) consider_decl_line = true; } for(auto it = funcs.begin(); it != funcs.end(); it++) { Dwarf_Addr entrypc = it->entrypc; unsigned entrypc_srcline_idx = 0; Dwarf_Line *entrypc_srcline = NULL; { auto it_addr = lower_bound(addrs.cbegin(), addrs.cend(), entrypc); if (it_addr != addrs.cend() && *it_addr == entrypc) { entrypc_srcline_idx = it_addr - addrs.cbegin(); entrypc_srcline = dwarf_onesrcline(lines, entrypc_srcline_idx); } } if (!entrypc_srcline) { if (sess.verbose > 2) clog << _F("missing entrypc dwarf line record for function '%s'\n", it->name.to_string().c_str()); // This is probably an inlined function. We'll end up using // its lowpc as a probe address. continue; } if (entrypc == 0) { if (sess.verbose > 2) clog << _F("null entrypc dwarf line record for function '%s'\n", it->name.to_string().c_str()); // This is probably an inlined function. We'll skip this instance; // it is messed up. continue; } if (sess.verbose>2) clog << _F("searching for prologue of function '%s' %#" PRIx64 "@%s:%d\n", it->name.to_string().c_str(), entrypc, it->decl_file.to_string().c_str(), it->decl_line); // For each function, we look for the prologue-end marker (e.g. clang // outputs one). If there is no explicit marker (e.g. GCC does not), we // accept a bigger or equal lineno as a prologue end (this catches GCC's // 0-line advances). // We may have to skip a few because some old compilers plop // in dummy line records for longer prologues. If we go too // far (outside function), we take the previous one. Or, it may // be the first one, if the function had no prologue, and thus // the entrypc maps to a statement in the body rather than the // declaration. int entrypc_srcline_lineno = DWARF_LINENO(entrypc_srcline); unsigned postprologue_srcline_idx = entrypc_srcline_idx; Dwarf_Line *postprologue_srcline = entrypc_srcline; while (postprologue_srcline_idx < nlines) { postprologue_srcline = dwarf_onesrcline(lines, postprologue_srcline_idx); Dwarf_Addr lineaddr = DWARF_LINEADDR(postprologue_srcline); const char* linesrc = DWARF_LINESRC(postprologue_srcline); int lineno = DWARF_LINENO(postprologue_srcline); bool lineprologue_end = DWARF_LINEPROLOGUEEND(postprologue_srcline); if (sess.verbose>2) clog << _F("checking line record %#" PRIx64 "@%s:%d%s\n", lineaddr, linesrc, lineno, lineprologue_end ? " (marked)" : ""); // have we passed the function? if (dwarf_haspc (& it->die, lineaddr) != 1) break; // is there an explicit prologue_end marker? if (lineprologue_end) break; // is it a different file? if (it->decl_file != string(linesrc)) break; // OK, it's the same file, but is it a different line? if (lineno != entrypc_srcline_lineno) break; // Same file and line, is this a second line record (e.g. 0-line advance)? if (postprologue_srcline_idx != entrypc_srcline_idx) break; // This is the first iteration. Is decl_line meaningful and is the // lineno past the decl_line? if (consider_decl_line && lineno != it->decl_line) break; // Let's try the next srcline. postprologue_srcline_idx ++; } // loop over srclines Dwarf_Addr postprologue_addr = DWARF_LINEADDR(postprologue_srcline); if (dwarf_haspc (& it->die, postprologue_addr) != 1) { // pick addr of previous line record Dwarf_Line *lr = dwarf_onesrcline(lines, postprologue_srcline_idx-1); postprologue_addr = DWARF_LINEADDR(lr); } it->prologue_end = postprologue_addr; if (sess.verbose>2) { clog << _F("prologue found function '%s'", it->name.to_string().c_str()); // Add a little classification datum //TRANSLATORS: Here we're adding some classification datum (ie Prologue Free) if (postprologue_addr == entrypc) clog << _(" (naked)"); //TRANSLATORS: Here we're adding some classification datum (ie we went over) if (dwarf_haspc (& it->die, DWARF_LINEADDR(postprologue_srcline)) != 1) clog << _(" (tail-call?)"); //TRANSLATORS: Here we're adding some classification datum (ie it was marked) if (DWARF_LINEPROLOGUEEND(postprologue_srcline)) clog << _(" (marked)"); clog << " = 0x" << hex << postprologue_addr << dec << "\n"; } } // loop over functions } bool dwflpp::function_entrypc (Dwarf_Addr * addr) { assert (function); // assign default value *addr = 0; // PR10574: reject 0, which tends to be eliminated COMDAT if (dwarf_entrypc (function, addr) == 0 && *addr != 0) return true; /* Assume the entry pc is the base address, or (if zero) the first address of the ranges covering this DIE. */ Dwarf_Addr start = 0, end; if (dwarf_ranges (function, 0, addr, &start, &end) >= 0) { if (*addr == 0) *addr = start; return *addr != 0; } return false; } bool dwflpp::die_entrypc (Dwarf_Die * die, Dwarf_Addr * addr) { int rc = 0; string lookup_method; * addr = 0; lookup_method = "dwarf_entrypc"; rc = dwarf_entrypc (die, addr); if (rc) { lookup_method = "dwarf_ranges"; Dwarf_Addr base; Dwarf_Addr begin; Dwarf_Addr end; ptrdiff_t offset = dwarf_ranges (die, 0, &base, &begin, &end); if (offset < 0) rc = -1; else if (offset > 0) { * addr = begin; rc = 0; // Now we need to check that there are no more ranges // associated with this function, which could conceivably // happen if a function is inlined, then pieces of it are // split amongst different conditional branches. It's not // obvious which of them to favour. As a heuristic, we // pick the beginning of the first range, and ignore the // others (but with a warning). unsigned extra = 0; while ((offset = dwarf_ranges (die, offset, &base, &begin, &end)) > 0) extra ++; if (extra) lookup_method += _F(", ignored %s more", lex_cast(extra).c_str()); } } // PR10574: reject subprograms where the entrypc address turns out // to be 0, since they tend to correspond to duplicate-eliminated // COMDAT copies of C++ functions. if (rc == 0 && *addr == 0) { lookup_method += _(" (skip comdat)"); rc = 1; } if (sess.verbose > 2) clog << _F("entry-pc lookup (%s dieoffset: %s) = %#" PRIx64 " (rc %d)", lookup_method.c_str(), lex_cast_hex(dwarf_dieoffset(die)).c_str(), *addr, rc) << endl; return (rc == 0); } void dwflpp::function_die (Dwarf_Die *d) { assert (function); *d = *function; } void dwflpp::function_file (char const ** c) { assert (function); assert (c); *c = dwarf_decl_file (function); if (*c == NULL) { // The line table might know. Dwarf_Addr pc; if (dwarf_lowpc(function, &pc) == 0) *c = pc_line (pc, NULL, NULL); if (*c == NULL) *c = ""; } } void dwflpp::function_line (int *linep) { assert (function); if (dwarf_decl_line (function, linep) != 0) { // The line table might know. Dwarf_Addr pc; if (dwarf_lowpc(function, &pc) == 0) pc_line (pc, linep, NULL); } } bool dwflpp::die_has_pc (Dwarf_Die & die, Dwarf_Addr pc) { int res = dwarf_haspc (&die, pc); // dwarf_ranges will return -1 if a function die has no DW_AT_ranges // if (res == -1) // DWARF_ASSERT ("dwarf_haspc", res); return res == 1; } bool dwflpp::inner_die_containing_pc(Dwarf_Die& scope, Dwarf_Addr addr, Dwarf_Die& result) { result = scope; // Sometimes we're in a bad scope to begin with -- just let it be. This can // happen for example if the compiler outputs a label PC that's just outside // the lexical scope. We can't really do anything about that, but variables // will probably not be accessible in this case. if (!die_has_pc(scope, addr)) return false; Dwarf_Die child, import; int rc = dwarf_child(&result, &child); while (rc == 0) { switch (dwarf_tag (&child)) { case DW_TAG_imported_unit: // The children of the imported unit need to be treated as if // they are inserted here. So look inside and set result if // found. if (dwarf_attr_die(&child, DW_AT_import, &import)) { Dwarf_Die import_result; if (inner_die_containing_pc(import, addr, import_result)) { result = import_result; return true; } } break; // lexical tags to recurse within the same starting scope // NB: this intentionally doesn't cross into inlines! case DW_TAG_lexical_block: case DW_TAG_with_stmt: case DW_TAG_catch_block: case DW_TAG_try_block: case DW_TAG_entry_point: if (die_has_pc(child, addr)) { result = child; rc = dwarf_child(&result, &child); continue; } } rc = dwarf_siblingof(&child, &child); } return true; } void dwflpp::get_locals(vector& scopes, set& locals) { // XXX Shouldn't this be walking up to outer scopes too? get_locals_die(scopes[0], locals); } void dwflpp::get_locals_die(Dwarf_Die& die, set& locals) { // Try to get the first child of die. Dwarf_Die child, import; if (dwarf_child (&die, &child) == 0) { do { const char *name; // Output each sibling's name (that is a variable or // parameter) to 'o'. switch (dwarf_tag (&child)) { case DW_TAG_variable: case DW_TAG_formal_parameter: name = dwarf_diename (&child); if (name) locals.insert(string("$") + name); break; case DW_TAG_imported_unit: // Treat the imported unit children as if they are // children of the given DIE. if (dwarf_attr_die(&child, DW_AT_import, &import)) get_locals_die (import, locals); break; default: break; } } while (dwarf_siblingof (&child, &child) == 0); } } int dwflpp::dwarf_get_enum (Dwarf_Die *scopes, int nscopes, const char *name, Dwarf_Die *result, Dwarf_Die *enum_type) { // subprogram { enumeration_type {enumerator,...}} // lexical block { enumeration_type {enumerator,...}} // enumeration_type {enumerator,...}} for (int out = 0; out < nscopes; ++out) if (dwarf_haschildren (&scopes[out]) && dwarf_child (&scopes[out], result) == 0) do { *enum_type = *result; if (dwarf_tag (result) == DW_TAG_enumerator || (dwarf_tag (result) == DW_TAG_enumeration_type && dwarf_child (result, result) == 0)) do { if (dwarf_tag (result) == DW_TAG_enumerator) { const char *diename = dwarf_diename (result); if (diename != NULL && !strcmp (name, diename)) { Dwarf_Attribute attr_mem; dwarf_formref_die (dwarf_attr_integrate (enum_type, DW_AT_type, &attr_mem), enum_type); return out; } } } while (dwarf_siblingof (result, result) == 0); *result = *enum_type; } while (dwarf_siblingof (result, result) == 0); return -1; } Dwarf_Attribute * dwflpp::find_variable_and_frame_base (vector& scopes, Dwarf_Addr pc, string const & local, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, Dwarf_Attribute *fb_attr_mem, Dwarf_Die *funcdie) { Dwarf_Die *scope_die = &scopes[0]; Dwarf_Attribute *fb_attr = NULL; assert (cu); int declaring_scope = dwarf_getscopevar (&scopes[0], scopes.size(), local.c_str(), 0, NULL, 0, 0, vardie); if (declaring_scope < 0) if ((declaring_scope = dwarf_get_enum (&scopes[0], scopes.size(), local.c_str(), vardie, typedie)) < 0) { // XXX: instead: add suggested locals and let a caller throw a single error set locals; get_locals(scopes, locals); string sugs = levenshtein_suggest(local, locals, 5); if (pc) throw SEMANTIC_ERROR (_F("unable to find local '%s', [man error::dwarf] dieoffset %s in %s, near pc %s %s %s %s (%s)", local.c_str(), lex_cast_hex(dwarf_dieoffset(scope_die)).c_str(), module_name.c_str(), lex_cast_hex(pc).c_str(), (scope_die == NULL) ? "" : _("in"), (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: ""), (sugs.empty() ? (_("")) : (_("alternatives: ") + sugs + ")")).c_str()), e->tok); else throw SEMANTIC_ERROR (_F("unable to find global '%s', [man error::dwarf] dieoffset %s in %s, %s %s %s (%s)", local.c_str(), lex_cast_hex(dwarf_dieoffset(scope_die)).c_str(), module_name.c_str(), (scope_die == NULL) ? "" : _("in"), (dwarf_diename(scope_die) ?: ""), cu_name().c_str(), (sugs.empty() ? (_("")) : (_("alternatives: ") + sugs + ")")).c_str()), e->tok); } *funcdie = scopes[declaring_scope]; /* Some GCC versions would output duplicate external variables, one without a location attribute. If so, try to find the other if it exists in the same scope. See GCC PR51410. */ Dwarf_Attribute attr_mem; if (dwarf_attr_integrate (vardie, DW_AT_const_value, &attr_mem) == NULL && dwarf_attr_integrate (vardie, DW_AT_location, &attr_mem) == NULL && dwarf_attr_integrate (vardie, DW_AT_external, &attr_mem) != NULL && dwarf_tag(&scopes[declaring_scope]) == DW_TAG_compile_unit) { Dwarf_Die orig_vardie = *vardie; bool alt_found = false; if (dwarf_child(&scopes[declaring_scope], vardie) == 0) do { // Note, not handling DW_TAG_imported_unit, assuming GCC // version is recent enough to not need this workaround if // we would see an imported unit. if (dwarf_tag (vardie) == DW_TAG_variable && strcmp (dwarf_diename (vardie), local.c_str ()) == 0 && (dwarf_attr_integrate (vardie, DW_AT_external, &attr_mem) != NULL) && ((dwarf_attr_integrate (vardie, DW_AT_const_value, &attr_mem) != NULL) || (dwarf_attr_integrate (vardie, DW_AT_location, &attr_mem) != NULL))) alt_found = true; } while (!alt_found && dwarf_siblingof(vardie, vardie) == 0); if (! alt_found) *vardie = orig_vardie; } // Global vars don't need (cannot use) frame base in location descriptor. if (pc == 0) return NULL; /* We start out walking the "lexical scopes" as returned by * as returned by dwarf_getscopes for the address, starting with the * declaring_scope that the variable was found in. */ vector physcopes, *fbscopes = &scopes; for (size_t inner = declaring_scope; inner < fbscopes->size() && fb_attr == NULL; ++inner) { Dwarf_Die& scope = (*fbscopes)[inner]; switch (dwarf_tag (&scope)) { default: continue; case DW_TAG_subprogram: case DW_TAG_entry_point: fb_attr = dwarf_attr_integrate (&scope, DW_AT_frame_base, fb_attr_mem); break; case DW_TAG_inlined_subroutine: /* Unless we already are going through the "pyshical die tree", * we now need to start walking the die tree where this * subroutine is inlined to find the appropriate frame base. */ if (declaring_scope != -1) { physcopes = getscopes_die(&scope); if (physcopes.empty()) throw SEMANTIC_ERROR (_F("unable to get die scopes for '%s' in an inlined subroutine", local.c_str()), e->tok); fbscopes = &physcopes; inner = 0; // zero is current scope, for look will increase. declaring_scope = -1; } break; } } return fb_attr; } /* Returns a human readable string with suggested locations where a DIE attribute is valid. */ static string suggested_locations_string(Dwarf_Attribute *attr) { string locsstr; if (attr == NULL) locsstr = ""; else { #if _ELFUTILS_PREREQ (0, 158) Dwarf_Op *expr; size_t exprlen; Dwarf_Addr base, start, end; ptrdiff_t off = 0; off = dwarf_getlocations (attr, off, &base, &start, &end, &expr, &exprlen); if (off > 0) { locsstr = _("alternative locations: "); while (off > 0) { locsstr += "["; locsstr += lex_cast_hex(start); locsstr += ","; locsstr += lex_cast_hex(end); locsstr += "]"; off = dwarf_getlocations (attr, off, &base, &start, &end, &expr, &exprlen); if (off > 0) locsstr += ", "; } } else if (off == 0) locsstr = _(""); else locsstr = _F("", dwarf_errmsg(-1)); #else locsstr = ""; #endif /* _ELFUTILS_PREREQ (0, 158) */ } return locsstr; } /* Produce a human readable name for a DIE. */ static string die_name_string (Dwarf_Die *die) { string res; const char *name = dwarf_linkage_name(die); if (name == NULL) name = dwarf_diename (die); size_t demangle_buffer_len = 0; char *demangle_buffer = NULL; if (name != NULL && name[0] == '_' && name[1] == 'Z') { int status = -1; char *dsymname = abi::__cxa_demangle (name, demangle_buffer, &demangle_buffer_len, &status); if (status == 0) name = demangle_buffer = dsymname; } if (name != NULL) res = name; else res = _(" 0) { linestr += ":" + lex_cast(lineno); if (col > 0) linestr += ":" + lex_cast(col); } } else linestr += _("unknown source"); return linestr; } /* Returns a human readable DIE offset for use in error messages. Includes DIE offset and DWARF file used. */ string dwflpp::die_location_as_string(Dwarf_Die *die) { string locstr; /* DIE offset */ locstr += _("dieoffset: "); locstr += lex_cast_hex(dwarf_dieoffset(die)); /* DWARF file */ const char *mainfile, *debugfile; locstr += _(" from "); if (dwfl_module_info (module, NULL, NULL, NULL, NULL, NULL, &mainfile, &debugfile) == NULL || (mainfile == NULL && debugfile == NULL)) { locstr += _("unknown debug file for "); locstr += module_name; } else { if (debugfile != NULL) locstr += debugfile; else locstr += mainfile; } return locstr; } /* Returns a human readable (inlined) function and source file/line location for a pc location. */ string dwflpp::pc_location_as_function_string(Dwarf_Addr pc) { string locstr; locstr = _("function: "); /* Find the first function-like DIE with a name in scope. */ Dwarf_Die funcdie_mem; Dwarf_Die *funcdie = NULL; string funcname = ""; Dwarf_Die *scopes = NULL; int nscopes = dwarf_getscopes (cu, pc, &scopes); for (int i = 0; funcname == "" && i < nscopes; i++) { Dwarf_Die *scope = &scopes[i]; int tag = dwarf_tag (scope); if (tag == DW_TAG_subprogram || tag == DW_TAG_inlined_subroutine || tag == DW_TAG_entry_point) funcname = die_name_string (scope); if (funcname != "") { funcdie_mem = *scope; funcdie = &funcdie_mem; } } free (scopes); /* source location */ if (funcname == "") locstr += _(" at ") + pc_die_line_string (pc, NULL); else { int nscopes = dwarf_getscopes_die (funcdie, &scopes); if (nscopes > 0) { /* scopes[0] == funcdie, the lowest level, for which we already have the name. This is the actual source location where it happened. */ locstr += funcname; locstr += _(" at "); locstr += pc_die_line_string (pc, NULL); /* last_scope is the source location where the next inlined frame/function call was done. */ Dwarf_Die *last_scope = &scopes[0]; for (int i = 1; i < nscopes; i++) { Dwarf_Die *scope = &scopes[i]; int tag = dwarf_tag (scope); if (tag != DW_TAG_inlined_subroutine && tag != DW_TAG_entry_point && tag != DW_TAG_subprogram) continue; locstr += _(" inlined by "); locstr += die_name_string (scope); locstr += _(" at "); locstr += pc_die_line_string (pc, last_scope); /* Found the "top-level" in which everything was inlined. */ if (tag == DW_TAG_subprogram) break; last_scope = scope; } } else { locstr += funcname; locstr += _(" at "); locstr += pc_die_line_string (pc, NULL); } free (scopes); } return locstr; } struct location * dwflpp::translate_location(location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Addr pc, Dwarf_Attribute *fb_attr, const target_symbol *e, location *input) { /* DW_AT_data_member_location, can be either constant offsets (struct member fields), or full blown location expressions. */ /* There is no location expression, but a constant value instead. */ if (dwarf_whatattr (attr) == DW_AT_const_value) return ctx->translate_constant (attr); Dwarf_Op *expr; size_t len; /* PR9768: formerly, we added pc+module_bias here. However, that bias value is not present in the pc value by the time we get it, so adding it would result in false negatives of variable reachibility. In other instances further below, the c_translate_FOO functions, the module_bias value used to be passed in, but instead should now be zero for the same reason. */ retry: switch (dwarf_getlocation_addr (attr, pc /*+ module_bias*/, &expr, &len, 1)) { case 1: /* Should always happen. */ if (len > 0) break; /* Fall through. */ case 0: /* Shouldn't happen.... but can, e.g. due to PR15123. */ { Dwarf_Addr pc2 = pr15123_retry_addr (pc, die); if (pc2 != 0) { pc = pc2; goto retry; } } /* FALLTHROUGH */ { string msg = _F("not accessible at this address (pc: %s) [man error::dwarf]", lex_cast_hex(pc).c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(die)); err.details.push_back(pc_location_as_function_string(pc)); err.details.push_back(suggested_locations_string(attr)); throw err; } default: /* Shouldn't happen. */ case -1: { string msg = _F("dwarf_getlocation_addr failed at this address (pc: %s) [man error::dwarf]", lex_cast_hex(pc).c_str()); semantic_error err(ERR_SRC, msg, e->tok); string dwarf_err = _F("dwarf_error: %s", dwarf_errmsg(-1)); err.details.push_back(dwarf_err); err.details.push_back(die_location_as_string(die)); err.details.push_back(pc_location_as_function_string(pc)); err.details.push_back(suggested_locations_string(attr)); throw err; } } Dwarf_Op *cfa_ops = NULL; // pc is in the dw address space of the current module, which is what // c_translate_location expects. get_cfa_ops wants the global dwfl address. // cfa_ops only make sense for locals. if (pc) { Dwarf_Addr addr = pc + module_bias; cfa_ops = get_cfa_ops (addr); } // ??? Reset these afterward. ctx->cfa_ops = cfa_ops; ctx->fb_attr = fb_attr; ctx->pc = pc; ctx->dw = this; try { return ctx->translate_location (expr, len, input); } catch (const semantic_error& er) { // copy lower level loc2stap exception; add a DIE# to it so user // has a chance to find the problematic raw debuginfo semantic_error err(er); err.details.push_back(die_location_as_string(die)); throw err; } } void dwflpp::get_members(Dwarf_Die *typedie, set& members, set &dupes) { const int typetag = dwarf_tag (typedie); /* compile and partial unit included for recursion through imported_unit below. */ if (typetag != DW_TAG_structure_type && typetag != DW_TAG_class_type && typetag != DW_TAG_union_type && typetag != DW_TAG_compile_unit && typetag != DW_TAG_partial_unit) { throw SEMANTIC_ERROR(_F("Type %s isn't a struct/class/union", dwarf_type_name(typedie).c_str())); } // Try to get the first child of vardie. Dwarf_Die die_mem, import; Dwarf_Die *die = &die_mem; switch (dwarf_child (typedie, die)) { case 1: // No children. throw SEMANTIC_ERROR(_F("Type %s is empty", dwarf_type_name(typedie).c_str())); case -1: // Error. default: // Shouldn't happen. throw SEMANTIC_ERROR(_F("Type %s: %s", dwarf_type_name(typedie).c_str(), dwarf_errmsg(-1))); case 0: // Success. break; } // Add each sibling's name to members set do { int tag = dwarf_tag(die); /* The children of an imported_unit should be treated as members too. */ if (tag == DW_TAG_imported_unit && dwarf_attr_die(die, DW_AT_import, &import)) get_members(&import, members, dupes); if (tag != DW_TAG_member && tag != DW_TAG_inheritance) continue; const char *member = dwarf_diename (die) ; if ( tag == DW_TAG_member && member != NULL ) { // Only output if this is new, to avoid inheritance dupes. if (dupes.insert(member).second) members.insert(member); } else { Dwarf_Die temp_die; if (!dwarf_attr_die (die, DW_AT_type, &temp_die)) { string source = dwarf_decl_file(die) ?: ""; int line = -1; dwarf_decl_line(die, &line); throw SEMANTIC_ERROR(_F("Couldn't obtain type attribute for anonymous " "member at %s:%d", source.c_str(), line)); } get_members(&temp_die, members, dupes); } } while (dwarf_siblingof (die, die) == 0); } bool dwflpp::find_struct_member(const target_symbol::component& c, Dwarf_Die *parentdie, Dwarf_Die *memberdie, vector& dies, vector& locs) { Dwarf_Attribute attr; Dwarf_Die die; /* With inheritance, a subclass may mask member names of parent classes, so * our search among the inheritance tree must be breadth-first rather than * depth-first (recursive). The parentdie is still our starting point. */ deque inheritees(1, *parentdie); for (; !inheritees.empty(); inheritees.pop_front()) { switch (dwarf_child (&inheritees.front(), &die)) { case 0: /* First child found. */ break; case 1: /* No children. */ continue; case -1: /* Error. */ default: /* Shouldn't happen */ throw SEMANTIC_ERROR (dwarf_type_name(&inheritees.front()) + ": " + string (dwarf_errmsg (-1)), c.tok); } do { int tag = dwarf_tag(&die); /* recurse into imported units as if they are anonymoust structs */ Dwarf_Die import; if (tag == DW_TAG_imported_unit && dwarf_attr_die(&die, DW_AT_import, &import) && find_struct_member(c, &import, memberdie, dies, locs)) goto success; if (tag != DW_TAG_member && tag != DW_TAG_inheritance && tag != DW_TAG_enumeration_type) continue; const char *name = dwarf_diename(&die); if (tag == DW_TAG_inheritance) { /* Remember inheritee for breadth-first search. */ Dwarf_Die inheritee; if (dwarf_attr_die (&die, DW_AT_type, &inheritee)) inheritees.push_back(inheritee); } else if (tag == DW_TAG_enumeration_type) { Dwarf_Die enum_item; Dwarf_Die enum_type; if (dwarf_get_enum (&die, 1, c.member.c_str(), &enum_item, &enum_type) >= 0 && dwarf_attr_integrate (&enum_item, DW_AT_const_value, &attr)) { /* We have a matching enum so use its die and attr */ *parentdie = die; *memberdie = enum_item; dies.insert(dies.begin(), enum_item); locs.insert(locs.begin(), attr); goto success; } } else if (name == NULL) { /* Need to recurse for anonymous structs/unions. */ Dwarf_Die subdie; if (dwarf_attr_die (&die, DW_AT_type, &subdie) && find_struct_member(c, &subdie, memberdie, dies, locs)) goto success; } else if (name == c.member) { *memberdie = die; goto success; } } while (dwarf_siblingof (&die, &die) == 0); } return false; success: /* As we unwind the recursion, we need to build the chain of * locations that got to the final answer. */ if (dwarf_attr_integrate (&die, DW_AT_data_member_location, &attr)) { dies.insert(dies.begin(), die); locs.insert(locs.begin(), attr); } /* Union members don't usually have a location, * but just use the containing union's location. * Enumerators don't have a location, treat as a constant. */ else if (dwarf_tag(parentdie) != DW_TAG_union_type && dwarf_tag(&die) != DW_TAG_enumeration_type) throw SEMANTIC_ERROR (_F("no location for field '%s':%s", c.member.c_str(), dwarf_errmsg(-1)), c.tok); return true; } static inline void dwarf_die_type (Dwarf_Die *die, Dwarf_Die *typedie_mem, const token *tok=NULL) { if (!dwarf_attr_die (die, DW_AT_type, typedie_mem)) throw SEMANTIC_ERROR (_F("cannot get type of field: %s", dwarf_errmsg(-1)), tok); } void dwflpp::translate_components(location_context *ctx, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, unsigned first) { unsigned i = first; while (i < e->components.size()) { const target_symbol::component& c = e->components[i]; switch (dwarf_tag (typedie)) { case DW_TAG_typedef: case DW_TAG_const_type: case DW_TAG_volatile_type: case DW_TAG_restrict_type: /* Just iterate on the referent type. */ dwarf_die_type (typedie, typedie, c.tok); break; case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: translate_pointer (*ctx, typedie, lvalue); dwarf_die_type (typedie, typedie, c.tok); break; case DW_TAG_pointer_type: /* A pointer with no type is a void* -- can't dereference it. */ if (!dwarf_hasattr_integrate (typedie, DW_AT_type)) throw SEMANTIC_ERROR (_F("invalid access '%s' vs '%s'", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str()), c.tok); if (!ctx->locations.empty()) translate_pointer (*ctx, typedie, lvalue); if (c.type != target_symbol::comp_literal_array_index && c.type != target_symbol::comp_expression_array_index) { dwarf_die_type (typedie, typedie, c.tok); break; } /* Fallthrough */ /* else an array access */ case DW_TAG_array_type: if (c.type == target_symbol::comp_literal_array_index) { if (c.num_index != 0 && !ctx->locations.empty()) ctx->translate_array(typedie, ctx->locations.back(), new literal_number(c.num_index)); } else if (c.type == target_symbol::comp_expression_array_index) { if (!ctx->locations.empty()) ctx->translate_array(typedie, ctx->locations.back(), c.expr_index); } else throw SEMANTIC_ERROR (_F("invalid access '%s' for array type", lex_cast(c).c_str()), c.tok); dwarf_die_type (typedie, typedie, c.tok); *vardie = *typedie; ++i; break; case DW_TAG_structure_type: case DW_TAG_union_type: case DW_TAG_class_type: if (c.type != target_symbol::comp_struct_member) throw SEMANTIC_ERROR (_F("invalid access '%s' for %s", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str())); if (dwarf_hasattr(typedie, DW_AT_declaration)) { Dwarf_Die *tmpdie = declaration_resolve(typedie); if (tmpdie == NULL) throw SEMANTIC_ERROR (_F("unresolved %s", dwarf_type_name(typedie).c_str()), c.tok); *typedie = *tmpdie; } { vector dies; vector locs; if (!find_struct_member(c, typedie, vardie, dies, locs)) { /* Add a file:line hint for anonymous types */ string source; if (!dwarf_hasattr_integrate(typedie, DW_AT_name)) { int line; const char *file = dwarf_decl_file(typedie); if (file && dwarf_decl_line(typedie, &line) == 0) source = " (" + string(file) + ":" + lex_cast(line) + ")"; } set members, member_dupes; get_members(typedie, members, member_dupes); string sugs = levenshtein_suggest(c.member, members); if (!sugs.empty()) sugs = " (alternatives: " + sugs + ")"; throw SEMANTIC_ERROR(_F("unable to find member '%s' for %s%s%s", c.member.c_str(), dwarf_type_name(typedie).c_str(), source.c_str(), sugs.c_str()), c.tok); } if (dwarf_tag (vardie) == DW_TAG_enumerator) { location *n = ctx->locations.back(); /* Fold all locations except this enum constant */ ctx->locations.erase(ctx->locations.begin(), ctx->locations.end()-1); n = translate_location (ctx, &locs[0], &dies[0], pc, NULL, e, n); ctx->locations.push_back(n); return; } if (!ctx->locations.empty()) { location *n = ctx->locations.back(); for (unsigned j = 0; j < locs.size(); ++j) n = translate_location (ctx, &locs[j], &dies[j], pc, NULL, e, n); ctx->locations.push_back(n); } } dwarf_die_type (vardie, typedie, c.tok); ++i; break; case DW_TAG_enumeration_type: case DW_TAG_base_type: throw SEMANTIC_ERROR (_F("invalid access '%s' vs. %s", lex_cast(c).c_str(), dwarf_type_name(typedie).c_str()), c.tok); break; case -1: throw SEMANTIC_ERROR (_F("cannot find type: %s", dwarf_errmsg(-1)), c.tok); break; default: throw SEMANTIC_ERROR (_F("%s: unexpected type tag %s", dwarf_type_name(typedie).c_str(), lex_cast(dwarf_tag(typedie)).c_str()), c.tok); break; } } } void dwflpp::resolve_unqualified_inner_typedie (Dwarf_Die *typedie, Dwarf_Die *innerdie, const target_symbol *e) { int typetag = dwarf_tag (typedie); *innerdie = *typedie; while (typetag == DW_TAG_typedef || typetag == DW_TAG_const_type || typetag == DW_TAG_volatile_type || typetag == DW_TAG_restrict_type) { if (!dwarf_attr_die (innerdie, DW_AT_type, innerdie)) throw SEMANTIC_ERROR (_F("cannot get type of pointee: %s", dwarf_errmsg(-1)), e->tok); typetag = dwarf_tag (innerdie); } } static void get_bitfield (const target_symbol *e, Dwarf_Die *die, Dwarf_Word byte_size, Dwarf_Word *bit_offset, Dwarf_Word *bit_size) { Dwarf_Attribute attr_mem; if (dwarf_attr_integrate (die, DW_AT_bit_offset, &attr_mem) == NULL || dwarf_formudata (&attr_mem, bit_offset) != 0 || dwarf_attr_integrate (die, DW_AT_bit_size, &attr_mem) == NULL || dwarf_formudata (&attr_mem, bit_size) != 0) throw SEMANTIC_ERROR (_F("cannot get bit field parameters: %s", dwarf_errmsg(-1)), e->tok); /* Convert the big-bit-endian numbers from Dwarf to little-endian. This means we can avoid having to propagate byte_size further. */ *bit_offset = byte_size * 8 - *bit_offset - *bit_size; } void dwflpp::translate_base_ref (location_context &ctx, Dwarf_Word byte_size, bool signed_p, bool lvalue_p) { location *loc = ctx.locations.back (); restart: switch (loc->type) { case loc_value: // The existing program is the value. break; case loc_address: { target_deref *d = new target_deref; d->tok = ctx.e->tok; d->addr = loc->program; d->size = byte_size; d->signed_p = signed_p; d->userspace_p = ctx.userspace_p; loc = ctx.new_location(loc_value); loc->program = d; loc->byte_size = byte_size; // ??? There is code in *translate.cxx to handle the sign- // (or implicit zero-) extension during the load. We might // be better off falling through to the shared code below. return; } case loc_register: if (loc->offset != 0) throw SEMANTIC_ERROR (_("cannot handle offset into register"), ctx.e->tok); // The existing program is the value. break; case loc_constant: { if (loc->byte_size < byte_size) throw SEMANTIC_ERROR (_("requested size larger than constant"), ctx.e->tok); /* ??? Byte ordering. */ int64_t val; switch (byte_size) { case 1: if (signed_p) val = *(int8_t *)loc->constant_block; else val = *(uint8_t *)loc->constant_block; break; case 2: if (signed_p) val = *(int16_t *)loc->constant_block; else val = *(uint16_t *)loc->constant_block; break; case 4: if (signed_p) val = *(int32_t *)loc->constant_block; else val = *(uint32_t *)loc->constant_block; break; case 8: val = *(int64_t *)loc->constant_block; break; default: throw SEMANTIC_ERROR (_("unhandled constant size"), ctx.e->tok); } loc = ctx.new_location(loc_value); loc->program = new literal_number(val); loc->byte_size = byte_size; return; } case loc_noncontiguous: loc = loc->pieces; if (loc && loc->byte_size <= byte_size) { ctx.locations.push_back(loc); goto restart; } throw SEMANTIC_ERROR (_("noncontiguous location for base fetch"), ctx.e->tok); case loc_implicit_pointer: if (loc->offset != 0) throw SEMANTIC_ERROR (_("cannot handle offset into implicit pointer"), ctx.e->tok); loc = loc->target; if (loc) { ctx.locations.push_back(loc); goto restart; } throw SEMANTIC_ERROR (_("pointer optimized out"), ctx.e->tok); case loc_unavailable: throw SEMANTIC_ERROR (_("location not available"), ctx.e->tok); default: abort(); } // Normalize LOC from the sign and width of the type to int64_t. // ??? We might require extending when assigning to a target_register. // Give this a try first... if (byte_size < 8 && !lvalue_p) { binary_expression *out = new binary_expression; out->tok = ctx.e->tok; if (signed_p) { int shift = 64 - 8 * byte_size; binary_expression *shl = new binary_expression; shl->tok = ctx.e->tok; shl->op = "<<"; shl->left = loc->program; shl->right = new literal_number(shift); out->op = ">>"; out->left = shl; out->right = new literal_number(shift); } else { out->op = "&"; out->left = loc->program; out->right = new literal_number((1ull << (byte_size * 8)) - 1); } loc = ctx.new_location(loc_value); loc->program = out; loc->byte_size = byte_size; } } void dwflpp::translate_bitfield(location_context &ctx, Dwarf_Word byte_size, Dwarf_Word bit_offset, Dwarf_Word bit_size, bool signed_p) { location *loc = ctx.locations.back (); target_bitfield *bf = new target_bitfield; bf->tok = ctx.e->tok; bf->base = loc->program; bf->offset = bit_offset; bf->size = bit_size; bf->signed_p = signed_p; loc = ctx.new_location(loc_value); loc->program = bf; loc->byte_size = byte_size; ctx.locations.push_back(loc); } // As usual, leave the result as the last location in ctx. void dwflpp::translate_final_fetch_or_store (location_context &ctx, Dwarf_Die *vardie, Dwarf_Die *start_typedie, bool lvalue, Dwarf_Die *typedie) { const target_symbol *e = ctx.e; if (dwarf_tag (vardie) == DW_TAG_enumerator) { /* Set the type to the enumeration_type discovered by dwarf_get_enum */ *typedie = *start_typedie; return; } /* First boil away any qualifiers associated with the type DIE of the final location to be accessed. */ resolve_unqualified_inner_typedie (start_typedie, typedie, e); /* If we're looking for an address, then we can just provide what we computed to this point, without using a fetch/store. */ if (ctx.e->addressof) { if (lvalue) throw SEMANTIC_ERROR (_("cannot write to member address"), e->tok); if (dwarf_hasattr_integrate (vardie, DW_AT_bit_offset) || dwarf_hasattr_integrate (vardie, DW_AT_data_bit_offset)) throw SEMANTIC_ERROR (_("cannot take the address of a bit field"), e->tok); switch (ctx.locations.back()->type) { case loc_address: /* do nothing, we're done */ break; case loc_register: throw SEMANTIC_ERROR (_("cannot take address of object in register"), e->tok); break; case loc_noncontiguous: throw SEMANTIC_ERROR (_("cannot take address of noncontiguous object"), e->tok); break; case loc_value: throw SEMANTIC_ERROR (_("cannot take address of computed value"), e->tok); break; case loc_constant: throw SEMANTIC_ERROR (_("cannot take address of constant value"), e->tok); break; case loc_unavailable: throw SEMANTIC_ERROR (_("cannot take address of unavailable value"), e->tok); break; case loc_implicit_pointer: throw SEMANTIC_ERROR (_("cannot take address of implicit pointer"), e->tok); break; default: abort (); break; } return; } /* Then switch behavior depending on the type of fetch/store we want, and the type and pointer-ness of the final location. */ int typetag = dwarf_tag (typedie); switch (typetag) { default: throw SEMANTIC_ERROR (_F("unsupported type tag %s for %s", lex_cast(typetag).c_str(), dwarf_type_name(typedie).c_str()), e->tok); case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_union_type: { string type_name = dwarf_type_name(typedie); string decl_file = dwarf_decl_file(typedie) ?: ""; int decl_line = 0; (void) dwarf_decl_line(typedie, &decl_line); string decl_source; // PR20423: assemble an error message at least as informative // as bad-member message in translate_components() if (decl_file[0] && decl_line > 0) decl_source = " (" + decl_file + ":" + lex_cast(decl_line) + ")"; string a_member; try { set members; set dupes; get_members (typedie, members, dupes); if (members.begin() != members.end()) { a_member = " such as '->" + (*members.begin()) + "'"; } } catch (...) { // leave a_member empty } throw SEMANTIC_ERROR (_F("'%s'%s is being accessed instead of a member%s", type_name.c_str(), decl_source.c_str(), a_member.c_str()), (e->components.size() > 0 ? (e->components[e->components.size()-1].tok) : (e->tok))); } case DW_TAG_base_type: case DW_TAG_enumeration_type: // Reject types we can't handle in systemtap { bool signed_p = false; if (typetag == DW_TAG_base_type) { Dwarf_Attribute encoding_attr; Dwarf_Word encoding = (Dwarf_Word) -1; dwarf_formudata (dwarf_attr_integrate (typedie, DW_AT_encoding, &encoding_attr), &encoding); if (encoding == (Dwarf_Word) -1) { throw (SEMANTIC_ERROR (_F("unsupported type (mystery encoding %s for %s", lex_cast(encoding).c_str(), dwarf_type_name(typedie).c_str()), e->tok)); } signed_p = (encoding == DW_ATE_signed || encoding == DW_ATE_signed_char); } Dwarf_Attribute size_attr; Dwarf_Word byte_size; if (dwarf_attr_integrate (typedie, DW_AT_byte_size, &size_attr) == NULL || dwarf_formudata (&size_attr, &byte_size) != 0) { throw (SEMANTIC_ERROR (_F("cannot get byte_size attribute for type %s: %s", dwarf_diename (typedie) ?: "", dwarf_errmsg (-1)), e->tok)); } translate_base_ref (ctx, byte_size, signed_p, lvalue); if (dwarf_hasattr_integrate (vardie, DW_AT_bit_offset)) { Dwarf_Word bit_offset = 0; Dwarf_Word bit_size = 0; get_bitfield (e, vardie, byte_size, &bit_offset, &bit_size); translate_bitfield (ctx, byte_size, bit_offset, bit_size, signed_p); } } break; case DW_TAG_array_type: case DW_TAG_pointer_type: case DW_TAG_reference_type: case DW_TAG_rvalue_reference_type: if (lvalue) { if (typetag == DW_TAG_array_type) throw SEMANTIC_ERROR (_("cannot write to array address"), e->tok); if (typetag == DW_TAG_reference_type || typetag == DW_TAG_rvalue_reference_type) throw SEMANTIC_ERROR (_("cannot write to reference"), e->tok); assert (typetag == DW_TAG_pointer_type); } if (typetag != DW_TAG_array_type) translate_pointer (ctx, typedie, lvalue); break; } } void dwflpp::translate_pointer(location_context &ctx, Dwarf_Die *typedie, bool lvalue) { // ??? We also get DW_TAG_array_type here. // assert (dwarf_tag (typedie) == DW_TAG_pointer_type || // dwarf_tag (typedie) == DW_TAG_reference_type || // dwarf_tag (typedie) == DW_TAG_rvalue_reference_type); location *loc = ctx.locations.back (); if (loc->type != loc_implicit_pointer) { Dwarf_Word byte_size; if (dwarf_aggregate_size (typedie, &byte_size) != 0) throw SEMANTIC_ERROR (_F("cannot get size for type %s: %s", dwarf_diename (typedie) ?: "", dwarf_errmsg (-1)), ctx.e->tok); /* We know this is a pointer, therefore the signedness is irrelevant. */ translate_base_ref (ctx, byte_size, false, lvalue); /* We're going to want to dereference this pointer. Therefore note that this is an address. */ loc = ctx.locations.back (); loc->type = loc_address; } } Dwarf_Addr dwflpp::vardie_from_symtable (Dwarf_Die *vardie, Dwarf_Addr *addr) { const char *name = dwarf_linkage_name (vardie) ?: dwarf_diename (vardie); if (sess.verbose > 2) clog << _F("finding symtable address for %s\n", name); *addr = 0; int syms = dwfl_module_getsymtab (module); DWFL_ASSERT (_("Getting symbols"), syms >= 0); for (int i = 0; *addr == 0 && i < syms; i++) { GElf_Sym sym; GElf_Word shndxp; const char *symname = dwfl_module_getsym(module, i, &sym, &shndxp); if (symname && ! strcmp (name, symname) && sym.st_shndx != SHN_UNDEF && (GELF_ST_TYPE (sym.st_info) == STT_NOTYPE // PR13284 || GELF_ST_TYPE (sym.st_info) == STT_OBJECT)) *addr = sym.st_value; } // Don't relocate for the kernel, or kernel modules we handle those // specially in emit_address. if (dwfl_module_relocations (module) == 1 && module_name != TOK_KERNEL) dwfl_module_relocate_address (module, addr); if (sess.verbose > 2) clog << _F("found %s @%#" PRIx64 "\n", name, *addr); return *addr; } bool dwflpp::literal_stmt_for_local (location_context &ctx, vector& scopes, string const & local, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { Dwarf_Die vardie, funcdie; Dwarf_Attribute fb_attr_mem, *fb_attr = NULL; // NB: when addr_loc is used for a synthesized DW_OP_addr below, then it // needs to remain valid until express_as_string() has finished with it. Dwarf_Op addr_loc; Dwarf_Die typedie; fb_attr = find_variable_and_frame_base (scopes, ctx.pc, local, e, &vardie, &typedie, &fb_attr_mem, &funcdie); if (sess.verbose>2) { if (ctx.pc) clog << _F("finding location for local '%s' near address %#" PRIx64 ", module bias %#" PRIx64 "\n", local.c_str(), ctx.pc, module_bias); else clog << _F("finding location for global '%s' in CU '%s'\n", local.c_str(), cu_name().c_str()); } /* Given $foo->bar->baz[NN], translate the location of foo. */ Dwarf_Attribute attr_mem; ctx.attr = &attr_mem; ctx.fb_attr = fb_attr; ctx.dw = this; ctx.function = &funcdie; if (dwarf_attr_integrate (&vardie, DW_AT_const_value, &attr_mem) == NULL && dwarf_attr_integrate (&vardie, DW_AT_location, &attr_mem) == NULL) { memset(&addr_loc, 0, sizeof(Dwarf_Op)); addr_loc.atom = DW_OP_addr; // If it is an external variable try the symbol table. PR10622. if (dwarf_attr_integrate (&vardie, DW_AT_external, &attr_mem) != NULL && vardie_from_symtable (&vardie, &addr_loc.number) != 0) { ctx.translate_location (&addr_loc, 1, NULL); } else { string msg = _F("failed to retrieve location attribute for '%s' [man error::dwarf]", local.c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(&vardie)); err.details.push_back(pc_location_as_function_string(ctx.pc)); throw err; } } else translate_location (&ctx, &attr_mem, &vardie, ctx.pc, fb_attr, e, NULL); /* Translate the ->bar->baz[NN] parts. */ if (dwarf_attr_die (&vardie, DW_AT_type, &typedie) == NULL && dwarf_tag (&vardie) != DW_TAG_enumerator) { string msg = _F("failed to retrieve type attribute for '%s' [man error::dwarf]", local.c_str()); semantic_error err(ERR_SRC, msg, e->tok); err.details.push_back(die_location_as_string(&vardie)); err.details.push_back(pc_location_as_function_string(ctx.pc)); throw err; } translate_components (&ctx, ctx.pc, e, &vardie, &typedie, lvalue, 0); /* Translate the assignment part, either x = $foo->bar->baz[NN] or $foo->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } struct location * dwflpp::translate_call_site_value (location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Die *funcdie, Dwarf_Addr pc) { Dwarf_Attribute fb_attr_mem, *fb_attr = NULL; vector scopes = getscopes (funcdie); vector physcopes, *fbscopes = &scopes; int declaring_scope = 0; for (size_t inner = declaring_scope; inner < fbscopes->size() && fb_attr == NULL; ++inner) { Dwarf_Die& scope = (*fbscopes)[inner]; switch (dwarf_tag (&scope)) { default: continue; case DW_TAG_subprogram: fb_attr = dwarf_attr_integrate (&scope, DW_AT_frame_base, &fb_attr_mem); break; case DW_TAG_inlined_subroutine: if (declaring_scope != -1) { physcopes = getscopes_die(&scope); if (physcopes.empty()) throw SEMANTIC_ERROR (_F("unable to get die scopes for '%s' in an inlined subroutine", ctx->e->sym_name().c_str()), ctx->e->tok); fbscopes = &physcopes; inner = 0; declaring_scope = -1; } break; } } return translate_location (ctx, attr, die, pc, fb_attr, ctx->e, NULL); } Dwarf_Die* dwflpp::type_die_for_local (vector& scopes, Dwarf_Addr pc, string const & local, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { Dwarf_Die vardie, funcdie; Dwarf_Attribute attr_mem; find_variable_and_frame_base (scopes, pc, local, e, &vardie, typedie, &attr_mem, &funcdie); if (dwarf_attr_die (&vardie, DW_AT_type, typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve type attribute for '%s' [man error::dwarf]", local.c_str()), e->tok); location_context ctx(const_cast(e)); ctx.pc = pc; ctx.dw = this; translate_components (&ctx, pc, e, &vardie, typedie, lvalue); return typedie; } bool dwflpp::literal_stmt_for_return (location_context &ctx, Dwarf_Die *scope_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { if (sess.verbose>2) clog << _F("literal_stmt_for_return: finding return value for %s (%s)\n", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")); /* Given $return->bar->baz[NN], translate the location of return. */ const Dwarf_Op *locops; int nlocops = dwfl_module_return_value_location (module, scope_die, &locops); if (nlocops < 0) throw SEMANTIC_ERROR(_F("failed to retrieve return value location for %s [man error::dwarf] (%s)", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); // the function has no return value (e.g. "void" in C) else if (nlocops == 0) throw SEMANTIC_ERROR(_F("function %s (%s) has no return value", (dwarf_diename(scope_die) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); ctx.translate_location (locops, nlocops, NULL); /* Translate the ->bar->baz[NN] parts. */ Dwarf_Die vardie = *scope_die, typedie; if (dwarf_attr_die (&vardie, DW_AT_type, &typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve return value type attribute for %s [man error::dwarf] (%s)", (dwarf_diename(&vardie) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); translate_components (&ctx, ctx.pc, e, &vardie, &typedie, lvalue); /* Translate the assignment part, either x = $return->bar->baz[NN] or $return->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } Dwarf_Die* dwflpp::type_die_for_return (Dwarf_Die *scope_die, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { Dwarf_Die vardie = *scope_die; if (dwarf_attr_die (&vardie, DW_AT_type, typedie) == NULL) throw SEMANTIC_ERROR(_F("failed to retrieve return value type attribute for %s [man error::dwarf] (%s)", (dwarf_diename(&vardie) ?: ""), (dwarf_diename(cu) ?: "")), e->tok); translate_components (NULL, pc, e, &vardie, typedie, lvalue); return typedie; } bool dwflpp::literal_stmt_for_pointer (location_context &ctx, Dwarf_Die *start_typedie, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem) { if (sess.verbose>2) clog << _F("literal_stmt_for_pointer: finding value for %s (%s)\n", dwarf_type_name(start_typedie).c_str(), (dwarf_diename(cu) ?: "")); assert(ctx.pointer != NULL); location *tail = ctx.translate_argument (ctx.pointer); /* Translate the ->bar->baz[NN] parts. */ unsigned first = 0; Dwarf_Die typedie = *start_typedie, vardie = typedie; /* As a special case when typedie is not an array or pointer, we can * allow array indexing on STAP_ARG_pointer instead (since we do * know the pointee type and can determine its size). PR11556. */ const target_symbol::component* c = e->components.empty() ? NULL : &e->components[0]; if (c && (c->type == target_symbol::comp_literal_array_index || c->type == target_symbol::comp_expression_array_index)) { resolve_unqualified_inner_typedie (&typedie, &typedie, e); int typetag = dwarf_tag (&typedie); if (typetag != DW_TAG_pointer_type && typetag != DW_TAG_array_type) { if (c->type == target_symbol::comp_literal_array_index) tail = ctx.translate_array_pointer (&typedie, tail, new literal_number (c->num_index)); else tail = ctx.translate_array_pointer (&typedie, tail, ctx.indicies[0]); ++first; } } /* Now translate the rest normally. */ translate_components (&ctx, 0, e, &vardie, &typedie, lvalue, first); /* Translate the assignment part, either x = (STAP_ARG_pointer)->bar->baz[NN] or (STAP_ARG_pointer)->bar->baz[NN] = x */ translate_final_fetch_or_store (ctx, &vardie, &typedie, lvalue, die_mem); return true; } Dwarf_Die* dwflpp::type_die_for_pointer (Dwarf_Die *start_typedie, const target_symbol *e, Dwarf_Die *typedie, bool lvalue) { unsigned first = 0; *typedie = *start_typedie; Dwarf_Die vardie = *typedie; /* Handle the same PR11556 case as above. */ const target_symbol::component* c = e->components.empty() ? NULL : &e->components[0]; if (c && (c->type == target_symbol::comp_literal_array_index || c->type == target_symbol::comp_expression_array_index)) { resolve_unqualified_inner_typedie (typedie, typedie, e); int typetag = dwarf_tag (typedie); if (typetag != DW_TAG_pointer_type && typetag != DW_TAG_array_type) ++first; } location_context ctx(const_cast(e)); ctx.dw = this; translate_components (&ctx, 0, e, &vardie, typedie, lvalue, first); return typedie; } static bool in_kprobes_function(systemtap_session& sess, Dwarf_Addr addr) { if (sess.sym_kprobes_text_start != 0 && sess.sym_kprobes_text_end != 0) { // If the probe point address is anywhere in the __kprobes // address range, we can't use this probe point. if (addr >= sess.sym_kprobes_text_start && addr < sess.sym_kprobes_text_end) return true; } return false; } enum dwflpp::blocklisted_type dwflpp::blocklisted_p(interned_string funcname, interned_string filename, int, interned_string module, Dwarf_Addr addr, bool has_return) { if (!blocklist_enabled) return dwflpp::blocklisted_none; enum dwflpp::blocklisted_type blocklisted = dwflpp::blocklisted_none; // check against section blocklist string section = get_blocklist_section(addr); // PR6503: modules don't need special init/exit treatment if (module == TOK_KERNEL && !regexec (&blocklist_section, section.c_str(), 0, NULL, 0)) blocklisted = dwflpp::blocklisted_section; // Check for function marked '__kprobes'. else if (module == TOK_KERNEL && in_kprobes_function(sess, addr)) blocklisted = dwflpp::blocklisted_kprobes; // Check probe point against function blocklist else if (!regexec(&blocklist_func, funcname.to_string().c_str(), 0, NULL, 0)) blocklisted = dwflpp::blocklisted_function; // Check probe point against function return blocklist else if (has_return && !regexec(&blocklist_func_ret, funcname.to_string().c_str(), 0, NULL, 0)) blocklisted = dwflpp::blocklisted_function_return; // Check probe point against file blocklist else if (!regexec(&blocklist_file, filename.to_string().c_str(), 0, NULL, 0)) blocklisted = dwflpp::blocklisted_file; if (blocklisted) { if (sess.verbose>1) clog << _(" - blocklisted"); if (sess.guru_mode) { blocklisted = dwflpp::blocklisted_none; if (sess.verbose>1) clog << _(" but not skipped (guru mode enabled)"); } } // This probe point is not blocklisted. return blocklisted; } void dwflpp::build_kernel_blocklist() { // We build up the regexps in these strings // Add ^ anchors at the front; $ will be added just before regcomp. string blfn = "^("; string blfn_ret = "^("; string blfile = "^("; string blsection = "^("; blsection += "\\.init\\."; // first alternative, no "|" blsection += "|\\.exit\\."; blsection += "|\\.devinit\\."; blsection += "|\\.devexit\\."; blsection += "|\\.cpuinit\\."; blsection += "|\\.cpuexit\\."; blsection += "|\\.meminit\\."; blsection += "|\\.memexit\\."; /* NOTE all include/asm .h blfile patterns might need "full path" so prefix those with '.*' - see PR13108 and PR13112. */ blfile += "kernel/kprobes\\.c"; // first alternative, no "|" blfile += "|arch/.*/kernel/kprobes\\.c"; blfile += "|.*/include/asm/io\\.h"; blfile += "|.*/include/asm/io-defs\\.h"; blfile += "|.*/include/asm/io_64\\.h"; blfile += "|.*/include/asm/bitops\\.h"; blfile += "|drivers/ide/ide-iops\\.c"; // paravirt ops blfile += "|arch/.*/kernel/paravirt\\.c"; blfile += "|.*/include/asm/paravirt\\.h"; // XXX: it would be nice if these blocklisted functions were pulled // in dynamically, instead of being statically defined here. // Perhaps it could be populated from script files. A "noprobe // kernel.function("...")" construct might do the trick. // Most of these are marked __kprobes in newer kernels. We list // them here (anyway) so the translator can block them on older // kernels that don't have the __kprobes function decorator. This // also allows detection of problems at translate- rather than // run-time. blfn += "atomic_notifier_call_chain"; // first blfn; no "|" blfn += "|default_do_nmi"; blfn += "|__die"; blfn += "|die_nmi"; blfn += "|do_debug"; blfn += "|do_general_protection"; blfn += "|do_int3"; blfn += "|do_IRQ"; blfn += "|do_page_fault"; blfn += "|do_sparc64_fault"; blfn += "|do_trap"; blfn += "|dummy_nmi_callback"; blfn += "|flush_icache_range"; blfn += "|ia64_bad_break"; blfn += "|ia64_do_page_fault"; blfn += "|ia64_fault"; blfn += "|io_check_error"; blfn += "|mem_parity_error"; blfn += "|nmi_watchdog_tick"; blfn += "|notifier_call_chain"; blfn += "|oops_begin"; blfn += "|oops_end"; blfn += "|program_check_exception"; blfn += "|single_step_exception"; blfn += "|sync_regs"; blfn += "|unhandled_fault"; blfn += "|unknown_nmi_error"; blfn += "|xen_[gs]et_debugreg"; blfn += "|xen_irq_.*"; blfn += "|xen_.*_fl_direct.*"; blfn += "|check_events"; blfn += "|xen_adjust_exception_frame"; blfn += "|xen_iret.*"; blfn += "|xen_sysret64.*"; blfn += "|test_ti_thread_flag.*"; blfn += "|inat_get_opcode_attribute"; blfn += "|system_call_after_swapgs"; blfn += "|HYPERVISOR_[gs]et_debugreg"; blfn += "|HYPERVISOR_event_channel_op"; blfn += "|hash_64"; blfn += "|hash_ptr"; blfn += "|native_set_pte"; // Lots of locks blfn += "|.*raw_.*_lock.*"; blfn += "|.*raw_.*_unlock.*"; blfn += "|.*raw_.*_trylock.*"; blfn += "|.*read_lock.*"; blfn += "|.*read_unlock.*"; blfn += "|.*read_trylock.*"; blfn += "|.*write_lock.*"; blfn += "|.*write_unlock.*"; blfn += "|.*write_trylock.*"; blfn += "|.*write_seqlock.*"; blfn += "|.*write_sequnlock.*"; blfn += "|.*spin_lock.*"; blfn += "|.*spin_unlock.*"; blfn += "|.*spin_trylock.*"; blfn += "|.*spin_is_locked.*"; blfn += "|rwsem_.*lock.*"; blfn += "|.*mutex_.*lock.*"; // atomic functions blfn += "|atomic_.*"; blfn += "|atomic64_.*"; // few other problematic cases blfn += "|get_bh"; blfn += "|put_bh"; // Experimental blfn += "|.*apic.*|.*APIC.*"; blfn += "|.*softirq.*"; blfn += "|.*IRQ.*"; blfn += "|.*_intr.*"; blfn += "|__delay"; blfn += "|.*kernel_text.*"; blfn += "|get_current"; blfn += "|current_.*"; blfn += "|.*exception_tables.*"; blfn += "|.*setup_rt_frame.*"; // PR 5759, CONFIG_PREEMPT kernels blfn += "|.*preempt_count.*"; blfn += "|preempt_schedule"; // These functions don't return, so return probes would never be recovered blfn_ret += "do_exit"; // no "|" blfn_ret += "|sys_exit"; blfn_ret += "|sys_exit_group"; // __switch_to changes "current" on x86_64 and i686, so return probes // would cause kernel panic, and it is marked as "__kprobes" on x86_64 if (sess.architecture == "x86_64") blfn += "|__switch_to"; if (sess.architecture == "i686") blfn_ret += "|__switch_to"; // RHEL6 pre-beta 2.6.32-19.el6 blfn += "|special_mapping_.*"; blfn += "|.*_pte_.*"; // or "|smaps_pte_range"; blfile += "|fs/seq_file\\.c"; blfn += ")$"; blfn_ret += ")$"; blfile += ")$"; blsection += ")"; // NB: no $, sections match just the beginning if (sess.verbose > 2) { clog << _("blocklist regexps:") << endl; clog << "blfn: " << blfn << endl; clog << "blfn_ret: " << blfn_ret << endl; clog << "blfile: " << blfile << endl; clog << "blsection: " << blsection << endl; } int rc = regcomp (& blocklist_func, blfn.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_func regcomp failed")); rc = regcomp (& blocklist_func_ret, blfn_ret.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_func_ret regcomp failed")); rc = regcomp (& blocklist_file, blfile.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_file regcomp failed")); rc = regcomp (& blocklist_section, blsection.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_section regcomp failed")); blocklist_enabled = true; } void dwflpp::build_user_blocklist() { // We build up the regexps in these strings // Add ^ anchors at the front; $ will be added just before regcomp. string blfn = "^("; string blfn_ret = "^("; string blfile = "^("; string blsection = "^("; // Non-matching placeholders until we have real things to match blfn += ".^"; blfn_ret += ".^"; blfile += ".^"; blsection += ".^"; // These functions don't use the normal function-entry ABI, so can't be .return probed safely blfn_ret += "|_start"; blfn_ret += "|__.*\\.get_pc_thunk\\..*"; // PR11249 etc. blfn += ")$"; blfn_ret += ")$"; blfile += ")$"; blsection += ")"; // NB: no $, sections match just the beginning if (sess.verbose > 2) { clog << _("blocklist regexps:") << endl; clog << "blfn: " << blfn << endl; clog << "blfn_ret: " << blfn_ret << endl; clog << "blfile: " << blfile << endl; clog << "blsection: " << blsection << endl; } int rc = regcomp (& blocklist_func, blfn.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_func regcomp failed")); rc = regcomp (& blocklist_func_ret, blfn_ret.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_func_ret regcomp failed")); rc = regcomp (& blocklist_file, blfile.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_file regcomp failed")); rc = regcomp (& blocklist_section, blsection.c_str(), REG_NOSUB|REG_EXTENDED); if (rc) throw SEMANTIC_ERROR (_("blocklist_section regcomp failed")); blocklist_enabled = true; } string dwflpp::get_blocklist_section(Dwarf_Addr addr) { string blocklist_section; Dwarf_Addr bias; // We prefer dwfl_module_getdwarf to dwfl_module_getelf here, // because dwfl_module_getelf can force costly section relocations // we don't really need, while either will do for this purpose. Elf* elf = (dwarf_getelf (dwfl_module_getdwarf (module, &bias)) ?: dwfl_module_getelf (module, &bias)); Dwarf_Addr offset = addr - bias; if (elf) { Elf_Scn* scn = 0; size_t shstrndx; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); while ((scn = elf_nextscn (elf, scn)) != NULL) { GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (! shdr) continue; // XXX error? if (!(shdr->sh_flags & SHF_ALLOC)) continue; GElf_Addr start = shdr->sh_addr; GElf_Addr end = start + shdr->sh_size; if (! (offset >= start && offset < end)) continue; blocklist_section = elf_strptr (elf, shstrndx, shdr->sh_name); break; } } return blocklist_section; } /* Find the section named 'section_name' in the current module * returning the section header using 'shdr_mem' */ GElf_Shdr * dwflpp::get_section(string section_name, GElf_Shdr *shdr_mem, Elf **elf_ret) { GElf_Shdr *shdr = NULL; Elf* elf; Dwarf_Addr bias; size_t shstrndx; // Explicitly look in the main elf file first. elf = dwfl_module_getelf (module, &bias); Elf_Scn *probe_scn = NULL; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); bool have_section = false; while ((probe_scn = elf_nextscn (elf, probe_scn))) { shdr = gelf_getshdr (probe_scn, shdr_mem); assert (shdr != NULL); if (elf_strptr (elf, shstrndx, shdr->sh_name) == section_name) { have_section = true; break; } } // Older versions may put the section in the debuginfo dwarf file, // so check if it actually exists, if not take a look in the debuginfo file if (! have_section || (have_section && shdr->sh_type == SHT_NOBITS)) { elf = dwarf_getelf (dwfl_module_getdwarf (module, &bias)); if (! elf) return NULL; DWFL_ASSERT ("getshdrstrndx", elf_getshdrstrndx (elf, &shstrndx)); probe_scn = NULL; while ((probe_scn = elf_nextscn (elf, probe_scn))) { shdr = gelf_getshdr (probe_scn, shdr_mem); if (elf_strptr (elf, shstrndx, shdr->sh_name) == section_name) { have_section = true; break; } } } if (!have_section) return NULL; if (elf_ret) *elf_ret = elf; return shdr; } Dwarf_Addr dwflpp::relocate_address(Dwarf_Addr dw_addr, interned_string& reloc_section) { // PR10273 // libdw address, so adjust for bias gotten from dwfl_module_getdwarf Dwarf_Addr reloc_addr = dw_addr + module_bias; if (!module) { assert(module_name == TOK_KERNEL); reloc_section = ""; } else if (dwfl_module_relocations (module) > 0) { // This is a relocatable module; libdwfl already knows its // sections, so we can relativize addr. int idx = dwfl_module_relocate_address (module, &reloc_addr); const char* r_s = dwfl_module_relocation_info (module, idx, NULL); if (r_s) reloc_section = r_s; if (reloc_section == "" && dwfl_module_relocations (module) == 1) reloc_section = ".dynamic"; } else reloc_section = ".absolute"; return reloc_addr; } /* Returns the call frame address operations for the given program counter * in the libdw address space. */ Dwarf_Op * dwflpp::get_cfa_ops (Dwarf_Addr pc) { Dwarf_Op *cfa_ops = NULL; if (sess.verbose > 2) clog << "get_cfa_ops @0x" << hex << pc << dec << ", module_start @0x" << hex << module_start << dec << endl; // Try debug_frame first, then fall back on eh_frame. size_t cfa_nops = 0; Dwarf_Addr bias = 0; Dwarf_Frame *frame = NULL; Dwarf_CFI *cfi = dwfl_module_dwarf_cfi (module, &bias); if (cfi != NULL) { if (sess.verbose > 3) clog << "got dwarf cfi bias: 0x" << hex << bias << dec << endl; if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0) dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops); else if (sess.verbose > 3) clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl; } else if (sess.verbose > 3) clog << "dwfl_module_dwarf_cfi failed: " << dwfl_errmsg(-1) << endl; if (cfa_ops == NULL) { cfi = dwfl_module_eh_cfi (module, &bias); if (cfi != NULL) { if (sess.verbose > 3) clog << "got eh cfi bias: 0x" << hex << bias << dec << endl; Dwarf_Frame *frame = NULL; if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0) dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops); else if (sess.verbose > 3) clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl; } else if (sess.verbose > 3) clog << "dwfl_module_eh_cfi failed: " << dwfl_errmsg(-1) << endl; } if (sess.verbose > 2) { if (cfa_ops == NULL) clog << _("not found cfa") << endl; else { Dwarf_Addr frame_start, frame_end; bool frame_signalp; int info = dwarf_frame_info (frame, &frame_start, &frame_end, &frame_signalp); clog << _F("found cfa, info: %d [start: %#" PRIx64 ", end: %#" PRIx64 ", nops: %zu", info, frame_start, frame_end, cfa_nops) << endl; } } return cfa_ops; } int dwflpp::add_module_build_id_to_hash (Dwfl_Module *m, void **userdata __attribute__ ((unused)), const char *name, Dwarf_Addr, void *arg) { string modname = name; systemtap_session * s = (systemtap_session *)arg; if (pending_interrupts) return DWARF_CB_ABORT; // Extract the build ID const unsigned char *bits; GElf_Addr vaddr; int bits_length = dwfl_module_build_id(m, &bits, &vaddr); if(bits_length > 0) { // Convert the binary bits to a hex string string hex = hex_dump(bits, bits_length); // Store the build ID in the session s->build_ids.push_back(hex); } return DWARF_CB_OK; } static int cu_entry_pc_caching_callback (Dwarf_Die *func, pair *data) { auto& dw = data->first; auto& cache = data->second; Dwarf_Addr entry_pc; if (dw.die_entrypc (func, &entry_pc)) cache.insert (entry_pc); return DWARF_CB_OK; } bool dwflpp::check_cu_entry_pc (Dwarf_Die *cu, Dwarf_Addr pc) { auto& entry_pcs = cu_entry_pc_cache[cu->addr]; if (!entry_pcs) { save_and_restore saved_cu(&this->cu, cu); entry_pcs = new entry_pc_cache_t; pair data (*this, *entry_pcs); int rc = iterate_over_functions (cu_entry_pc_caching_callback, &data, "*"); if (rc != DWARF_CB_OK) return false; } return entry_pcs->count(pc) != 0; } // Perform PR15123 heuristic for given variable at given address. // Return alternate pc address to do location-list lookup at, or 0 if // inapplicable. // Dwarf_Addr dwflpp::pr15123_retry_addr (Dwarf_Addr pc, Dwarf_Die* die) { // For PR15123, we'd like to detect the situation where the // incoming PC may point to a couple-of-byte instruction // sequence that gcc emits for CFLAGS=-mfentry, and where // context variables are in fact available throughout, *but* due // to the bug, the dwarf debuginfo location-list only starts a // few instructions later. Prologue searching does not resolve // this as a line-record is in place at the -mfentry prologue. // // Detecting this is complicated because ... // - we only want to do this if -mfentry was actually used // - if points to the a function entry point // - if the architecture is familiar enough that we can have a // hard-coded constant to skip over the prologue. // // Otherwise, we could give a false-positive - return corrupted // data. // // Use of -mfentry is detectable only if CFLAGS=-grecord-gcc-switches // was used. Without it, set the PR15123_ASSUME_MFENTRY environment // variable to override the -mfentry test. if (getenv ("PR15123_DISABLE")) return 0; Dwarf_Die cudie; dwarf_diecu (die, &cudie, NULL, NULL); if (!getenv ("PR15123_ASSUME_MFENTRY")) { string producer, version; if (!is_gcc_producer(&cudie, producer, version)) return 0; if (producer.find("-mfentry") == string::npos) return 0; } // Determine if this pc maps to the beginning of a // real function (not some inlined doppelganger. This // is made tricker by this->function may not be // pointing at the right DIE (say e.g. stap encountered // the inlined copy first, so was focus_on_function'd). if (!check_cu_entry_pc (&cudie, pc)) return 0; // (will fail on retry, so we won't loop more than once) if (sess.architecture == "i386" || sess.architecture == "x86_64") { /* pull the trigger */ if (sess.verbose > 2) clog << _("retrying variable location-list lookup at address pc+5\n"); return pc + 5; } return 0; } bool dwflpp::has_gnu_debugdata () { Dwarf_Addr load_addr; // Note we really want the actual elf file, not the dwarf .debug file. Elf* elf = dwfl_module_getelf (module, &load_addr); size_t shstrndx; assert (elf_getshdrstrndx (elf, &shstrndx) >= 0); // Get the gnu_debugdata section header Elf_Scn *scn = NULL; GElf_Shdr *gnu_debugdata_shdr = NULL; GElf_Shdr gnu_debugdata_shdr_mem; while ((scn = elf_nextscn (elf, scn))) { gnu_debugdata_shdr = gelf_getshdr (scn, &gnu_debugdata_shdr_mem); assert (gnu_debugdata_shdr != NULL); if (strcmp (elf_strptr (elf, shstrndx, gnu_debugdata_shdr->sh_name), ".gnu_debugdata") == 0) return true; } return false; } // If not GCC, return false. Otherwise, return true and set vers. bool dwflpp::is_gcc_producer(Dwarf_Die *cudie, string& producer, string& version) { Dwarf_Attribute producer_attr; if (!dwarf_attr_integrate(cudie, DW_AT_producer, &producer_attr)) return false; // GNU {C|C++|...} x.x.x YYYYMMDD ... const char *cproducer = dwarf_formstring(&producer_attr); if (!cproducer) return false; producer = cproducer; vector tokens; tokenize(producer, tokens); if (tokens.size() < 3 || tokens[0] != "GNU" || tokens[2].find_first_not_of(".0123456789") != string::npos) return false; version = tokens[2]; return true; } static bool die_has_loclist(Dwarf_Die *begin_die) { Dwarf_Die die; Dwarf_Attribute loc; if (dwarf_child(begin_die, &die) != 0) return false; do { switch (dwarf_tag(&die)) { case DW_TAG_formal_parameter: case DW_TAG_variable: if (dwarf_attr_integrate(&die, DW_AT_location, &loc) && dwarf_whatform(&loc) == DW_FORM_sec_offset) return true; break; default: if (dwarf_haschildren (&die)) if (die_has_loclist(&die)) return true; break; } } while (dwarf_siblingof (&die, &die) == 0); return false; } bool dwflpp::has_valid_locs () { assert(cu); // The current CU has valid location info (implying we do not need to skip the // prologue) if // - it was compiled with -O2 -g (in which case, GCC outputs proper location // info for the prologue), and // - it was compiled by GCC >= 4.5 (previous versions could have had invalid // debug info in the prologue, see GDB's PR13777) // Note that clang behaves similarly to GCC here: non-optimized code does not // have location lists, while optimized code does. In the check below, even if // the producer is not GCC, we assume that it is valid to do the loclist check // afterwards (which it is for clang). string prod, vers; if (is_gcc_producer(cu, prod, vers) && strverscmp(vers.c_str(), "4.5") < 0) return false; // We determine if the current CU has been optimized with -O2 -g by looking // for any data objects whose DW_AT_location is a location list. This is also // how GDB determines whether to skip the prologue or not. See GDB's PR12573 // and also RHBZ612253#c6. if (!die_has_loclist(cu)) return false; if (sess.verbose > 2) clog << _F("CU '%s' in module '%s' has valid locs", cu_name().c_str(), module_name.c_str()) << endl; return true; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/dwflpp.h000066400000000000000000000757371414446751200151140ustar00rootroot00000000000000// C++ interface to dwfl // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2005-2007 Intel Corporation. // Copyright (C) 2008 James.Bottomley@HansenPartnership.com // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef DWFLPP_H #define DWFLPP_H #include "config.h" #include "dwarf_wrappers.h" #include "elaborate.h" #include "session.h" #include "setupdwfl.h" #include "stringtable.h" #include #include #include #include #include #include #include #include // Old elf.h doesn't know about this machine type. #ifndef EM_AARCH64 #define EM_AARCH64 183 #endif #ifndef EM_RISCV #define EM_RISCV 243 #endif extern "C" { #include #include } struct base_func_info; struct func_info; struct inline_instance_info; struct symbol_table; struct base_query; struct external_function_query; struct expression; enum lineno_t { ABSOLUTE, RELATIVE, WILDCARD, ENUMERATED }; enum info_status { info_unknown, info_present, info_absent }; // module -> cu die[] typedef std::unordered_map*> module_cu_cache_t; // An instance of this type tracks whether the type units for a given // Dwarf have been read. typedef std::set module_tus_read_t; // typename -> die typedef std::unordered_map cu_type_cache_t; // cu die -> (typename -> die) typedef std::unordered_map mod_cu_type_cache_t; // function -> die typedef std::unordered_multimap cu_function_cache_t; // cu die -> (function -> die) typedef std::unordered_map mod_cu_function_cache_t; // module -> (function -> die) typedef std::unordered_map mod_function_cache_t; // inline function die -> instance die[] typedef std::unordered_map*> cu_inl_function_cache_t; // function die -> [call site die, call site function die] typedef std::pair call_site_cache_t; typedef std::unordered_map*> cu_call_sites_cache_t; // die -> parent die typedef std::unordered_map cu_die_parent_cache_t; // cu die -> (die -> parent die) typedef std::unordered_map mod_cu_die_parent_cache_t; // Dwarf_Line[] (sorted by lineno) typedef std::vector lines_t; typedef std::pair lines_range_t; // srcfile -> Dwarf_Line[] typedef std::unordered_map srcfile_lines_cache_t; // cu die -> (srcfile -> Dwarf_Line[]) typedef std::unordered_map cu_lines_cache_t; // cu die -> {entry pcs} typedef std::unordered_set entry_pc_cache_t; typedef std::unordered_map cu_entry_pc_cache_t; typedef std::vector base_func_info_map_t; typedef std::vector func_info_map_t; typedef std::vector inline_instance_map_t; struct module_info { Dwfl_Module* mod; const char* name; std::string elf_path; Dwarf_Addr addr; Dwarf_Addr bias; symbol_table *sym_table; info_status dwarf_status; // module has dwarf info? info_status symtab_status; // symbol table cached? std::set inlined_funcs; std::set plt_funcs; std::set > marks; /* */ void get_symtab(); void update_symtab(cu_function_cache_t *funcs); module_info(const char *name) : mod(NULL), name(name), addr(0), bias(0), sym_table(NULL), dwarf_status(info_unknown), symtab_status(info_unknown) {} ~module_info(); }; struct module_cache { std::map cache; bool paths_collected; bool dwarf_collected; module_cache() : paths_collected(false), dwarf_collected(false) {} ~module_cache(); }; struct base_func_info { base_func_info() : decl_line(-1), entrypc(0) { std::memset(&die, 0, sizeof(die)); } interned_string name; interned_string decl_file; int decl_line; Dwarf_Die die; Dwarf_Addr entrypc; }; struct func_info : base_func_info { func_info() : addr(0), prologue_end(0), weak(false), descriptor(false) {} Dwarf_Addr addr; Dwarf_Addr prologue_end; bool weak, descriptor; }; struct inline_instance_info : base_func_info { inline_instance_info() {} bool operator<(const inline_instance_info& other) const; }; struct location; class location_context; struct dwflpp { systemtap_session & sess; // These are "current" values we focus on. Dwfl_Module * module; Dwarf_Addr module_bias; module_info * mod_info; // These describe the current module's PC address range Dwarf_Addr module_start; Dwarf_Addr module_end; Dwarf_Die * cu; std::string module_name; std::string function_name; dwflpp(systemtap_session & session, const std::string& user_module, bool kernel_p, bool debuginfo_needed = true); dwflpp(systemtap_session & session, const std::vector& user_modules, bool kernel_p); ~dwflpp(); void get_module_dwarf(bool required = false, bool report = true); void focus_on_module(Dwfl_Module * m, module_info * mi); void focus_on_cu(Dwarf_Die * c); void focus_on_function(Dwarf_Die * f); std::string cu_name(void); Dwarf_Die *query_cu_containing_address(Dwarf_Addr a); bool module_name_matches(const std::string& pattern); static bool name_has_wildcard(const std::string& pattern); bool module_name_final_match(const std::string& pattern); bool function_name_matches_pattern(const std::string& name, const std::string& pattern); bool function_name_matches(const std::string& pattern); bool function_scope_matches(const std::vector& scopes); template void iterate_over_modules(int (* callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, T*), T *data) { /* We're using templates here to enforce type-safety between the data arg * we're requested to pass to callback, and the data arg that the callback * actually takes. Rather than putting the implementation here, we simply * call the specialization, which does the real work. * As a result, we need to cast the data arg in the callback signature * and the one passed to void* (which is what elfutils also works with). * */ iterate_over_modules((int (*)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void *))callback, (void*)data); } template void iterate_over_cus(int (* callback)(Dwarf_Die*, T*), T *data, bool want_types) { // See comment block in iterate_over_modules() iterate_over_cus((int (*)(Dwarf_Die*, void*))callback, (void*)data, want_types); } bool func_is_inline(); bool func_is_exported(); template void iterate_over_inline_instances(int (* callback)(Dwarf_Die*, T*), T *data) { // See comment block in iterate_over_modules() iterate_over_inline_instances((int (*)(Dwarf_Die*, void*))callback, (void*)data); } template void iterate_over_call_sites(int (* callback)(Dwarf_Die*, Dwarf_Die*, T*), T *data) { // See comment block in iterate_over_modules() iterate_over_call_sites((int (*)(Dwarf_Die*, Dwarf_Die*, void*))callback, (void*)data); } std::vector getscopes_die(Dwarf_Die* die); std::vector getscopes(Dwarf_Die* die); std::vector getscopes(Dwarf_Addr pc); Dwarf_Die *declaration_resolve(Dwarf_Die *type); Dwarf_Die *declaration_resolve(const std::string& name); Dwarf_Die *declaration_resolve_other_cus(const std::string& name); template int iterate_over_functions (int (* callback)(Dwarf_Die*, T*), T *data, const std::string& function) { // See comment block in iterate_over_modules() return iterate_over_functions((int (*)(Dwarf_Die*, void*))callback, (void*)data, function); } template int iterate_single_function (int (* callback)(Dwarf_Die*, T*), T *data, const std::string& function) { // See comment block in iterate_over_modules() return iterate_single_function((int (*)(Dwarf_Die*, void*))callback, (void*)data, function); } template int iterate_over_notes (T *object, void (* callback)(T*, const std::string&, const std::string&, int, const char*, size_t)) { // See comment block in iterate_over_modules() return iterate_over_notes((void*)object, (void (*)(void*, const std::string&, const std::string&, int, const char*, size_t))callback); } template void iterate_over_libraries (void (*callback)(T*, const char*), T *data) { // See comment block in iterate_over_modules() iterate_over_libraries((void (*)(void*, const char*))callback, (void*)data); } template int iterate_over_plt (T *object, void (*callback)(T*, const char*, size_t)) { // See comment block in iterate_over_modules() return iterate_over_plt((void*)object, (void (*)(void*, const char*, size_t))callback); } template void iterate_over_srcfile_lines (char const * srcfile, const std::vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (*callback) (Dwarf_Addr, int, T*), bool has_nearest, T *data) { // See comment block in iterate_over_modules() iterate_over_srcfile_lines(srcfile, linenos, lineno_type, funcs, (void (*)(Dwarf_Addr, int, void*))callback, has_nearest, (void*)data); } template void iterate_over_labels (Dwarf_Die *begin_die, const std::string& sym, const base_func_info& function, const std::vector& linenos, enum lineno_t lineno_type, T *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, T*)) { // See comment block in iterate_over_modules() iterate_over_labels(begin_die, sym, function, linenos, lineno_type, (void*)data, (void (*)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*))callback); } template void iterate_over_callees (Dwarf_Die *begin_die, const std::string& sym, int64_t recursion_depth, T *data, void (* callback)(base_func_info&, base_func_info&, std::stack*, T*), base_func_info& caller, std::stack*callers=NULL) { // See comment block in iterate_over_modules() iterate_over_callees(begin_die, sym, recursion_depth, (void*)data, (void (*)(base_func_info&, base_func_info&, std::stack*, void*))callback, caller, callers); } template static int iterate_over_globals (Dwarf_Die *cu_die, int (* callback)(Dwarf_Die*, bool, const std::string&, T*), T *data) { // See comment block in iterate_over_modules() return iterate_over_globals(cu_die, (int (*)(Dwarf_Die*, bool, const std::string&, void*))callback, (void*)data); } GElf_Shdr * get_section(std::string section_name, GElf_Shdr *shdr_mem, Elf **elf_ret=NULL); void collect_srcfiles_matching (std::string const & pattern, std::set & filtered_srcfiles); void resolve_prologue_endings (func_info_map_t & funcs); bool function_entrypc (Dwarf_Addr * addr) __attribute__((warn_unused_result)); bool die_entrypc (Dwarf_Die * die, Dwarf_Addr * addr) __attribute__((warn_unused_result)); void function_die (Dwarf_Die *d); void function_file (char const ** c); void function_line (int *linep); bool die_has_pc (Dwarf_Die & die, Dwarf_Addr pc); bool inner_die_containing_pc(Dwarf_Die& scope, Dwarf_Addr addr, Dwarf_Die& result); bool literal_stmt_for_local (location_context &ctx, std::vector& scopes, std::string const & local, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_local (std::vector& scopes, Dwarf_Addr pc, std::string const & local, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); bool literal_stmt_for_return (location_context &ctx, Dwarf_Die *scope_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_return (Dwarf_Die *scope_die, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); bool literal_stmt_for_pointer (location_context &ctx, Dwarf_Die *type_die, const target_symbol *e, bool lvalue, Dwarf_Die *die_mem); Dwarf_Die* type_die_for_pointer (Dwarf_Die *type_die, const target_symbol *e, Dwarf_Die *die_mem, bool lvalue); enum blocklisted_type { blocklisted_none, // not blocklisted blocklisted_section, blocklisted_kprobes, blocklisted_function, blocklisted_function_return, blocklisted_file }; blocklisted_type blocklisted_p(interned_string funcname, interned_string filename, int line, interned_string module, Dwarf_Addr addr, bool has_return); Dwarf_Addr relocate_address(Dwarf_Addr addr, interned_string& reloc_section); void resolve_unqualified_inner_typedie (Dwarf_Die *typedie, Dwarf_Die *innerdie, const target_symbol *e); bool has_gnu_debugdata(); bool has_valid_locs(); location *translate_call_site_value (location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Die *funcdie, Dwarf_Addr pc); private: Dwfl * dwfl; // These are "current" values we focus on. Dwarf * module_dwarf; Dwarf_Die * function; void setup_kernel(const std::string& module_name, systemtap_session &s, bool debuginfo_needed = true); void setup_kernel(const std::vector& modules, bool debuginfo_needed = true); void setup_user(const std::vector& modules, bool debuginfo_needed = true); module_cu_cache_t module_cu_cache; module_tus_read_t module_tus_read; mod_cu_function_cache_t cu_function_cache; mod_function_cache_t mod_function_cache; std::set cu_inl_function_cache_done; // CUs that are already cached cu_inl_function_cache_t cu_inl_function_cache; void cache_inline_instances (Dwarf_Die* die); std::set cu_call_sites_cache_done; // CUs that are already cached cu_call_sites_cache_t cu_call_sites_cache; void cache_call_sites (Dwarf_Die* die, Dwarf_Die *function); mod_cu_die_parent_cache_t cu_die_parent_cache; void cache_die_parents(cu_die_parent_cache_t* parents, Dwarf_Die* die); cu_die_parent_cache_t *get_die_parents(); // Cache for cu lines sorted by lineno cu_lines_cache_t cu_lines_cache; // Cache for all entry_pc in each cu cu_entry_pc_cache_t cu_entry_pc_cache; bool check_cu_entry_pc(Dwarf_Die *cu, Dwarf_Addr pc); Dwarf_Die* get_parent_scope(Dwarf_Die* die); /* The global alias cache is used to resolve any DIE found in a * module that is stubbed out with DW_AT_declaration with a defining * DIE found in a different module. The current assumption is that * this only applies to structures and unions, which have a global * namespace (it deliberately only traverses program scope), so this * cache is indexed by name. If other declaration lookups were * added to it, it would have to be indexed by name and tag */ mod_cu_type_cache_t global_alias_cache; static int global_alias_caching_callback(Dwarf_Die *die, bool has_inner_types, const std::string& prefix, cu_type_cache_t *cache); static int global_alias_caching_callback_cus(Dwarf_Die *die, dwflpp *dw); template static int iterate_over_types (Dwarf_Die *top_die, bool has_inner_types, const std::string& prefix, int (* callback)(Dwarf_Die*, bool, const std::string&, T*), T *data) { // See comment block in iterate_over_modules() return iterate_over_types(top_die, has_inner_types, prefix, (int (*)(Dwarf_Die*, bool, const std::string&, void*))callback, (void*)data); } static int mod_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v); static int cu_function_caching_callback (Dwarf_Die* func, cu_function_cache_t *v); lines_t* get_cu_lines_sorted_by_lineno(const char *srcfile); void collect_lines_for_single_lineno(char const * srcfile, int lineno, bool is_relative, base_func_info_map_t& funcs, lines_t& matching_lines); void collect_all_lines(char const * srcfile, base_func_info_map_t& funcs, lines_t& matching_lines); std::pair get_nearest_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs); int get_nearest_lineno(char const * srcfile, int lineno, base_func_info_map_t& funcs); void suggest_alternative_linenos(char const * srcfile, int lineno, base_func_info_map_t& funcs); static int external_function_cu_callback (Dwarf_Die* cu, external_function_query *efq); static int external_function_func_callback (Dwarf_Die* func, external_function_query *efq); static void loc2c_error (void *, const char *fmt, ...) __attribute__ ((noreturn)); // This function generates code used for addressing computations of // target variables. void emit_address (Dwarf_Addr address); int dwarf_get_enum (Dwarf_Die *scopes, int nscopes, const char *name, Dwarf_Die *result, Dwarf_Die *type); void get_locals(std::vector& scopes, std::set& locals); void get_locals_die(Dwarf_Die &die, std::set& locals); void get_members(Dwarf_Die *vardie, std::set& members, std::set &dupes); Dwarf_Attribute *find_variable_and_frame_base (std::vector& scopes, Dwarf_Addr pc, std::string const & local, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, Dwarf_Attribute *fb_attr_mem, Dwarf_Die *funcdie); std::string die_location_as_string(Dwarf_Die*); std::string pc_location_as_function_string(Dwarf_Addr); std::string pc_die_line_string(Dwarf_Addr, Dwarf_Die*); /* source file name, line and column info for pc in current cu. */ const char *pc_line (Dwarf_Addr, int *, int *); location *translate_location(location_context *ctx, Dwarf_Attribute *attr, Dwarf_Die *die, Dwarf_Addr pc, Dwarf_Attribute *fb_attr, const target_symbol *e, location *input); bool find_struct_member(const target_symbol::component& c, Dwarf_Die *parentdie, Dwarf_Die *memberdie, std::vector& dies, std::vector& locs); void translate_components(location_context *ctx, Dwarf_Addr pc, const target_symbol *e, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, unsigned first=0); void translate_base_ref (location_context &ctx, Dwarf_Word byte_size, bool signed_p, bool lvalue_p); void translate_bitfield(location_context &ctx, Dwarf_Word byte_size, Dwarf_Word bit_offset, Dwarf_Word bit_size, bool signed_p); void translate_final_fetch_or_store (location_context &ctx, Dwarf_Die *vardie, Dwarf_Die *typedie, bool lvalue, Dwarf_Die *enddie); void translate_pointer(location_context &ctx, Dwarf_Die *typedie, bool lvalue); regex_t blocklist_func; // function/statement probes regex_t blocklist_func_ret; // only for .return probes regex_t blocklist_file; // file name regex_t blocklist_section; // init/exit sections bool blocklist_enabled; void build_kernel_blocklist(); void build_user_blocklist(); std::string get_blocklist_section(Dwarf_Addr addr); // Returns the call frame address operations for the given program counter. Dwarf_Op *get_cfa_ops (Dwarf_Addr pc); Dwarf_Addr vardie_from_symtable(Dwarf_Die *vardie, Dwarf_Addr *addr); static int add_module_build_id_to_hash (Dwfl_Module *m, void **userdata __attribute__ ((unused)), const char *name, Dwarf_Addr base, void *arg); static bool is_gcc_producer(Dwarf_Die *cudie, std::string& producer, std::string& version); public: Dwarf_Addr pr15123_retry_addr (Dwarf_Addr pc, Dwarf_Die* var); }; // Template specializations for iterate_over_* functions template<> void dwflpp::iterate_over_modules(int (*callback)(Dwfl_Module*, void**, const char*, Dwarf_Addr, void*), void *data); template<> void dwflpp::iterate_over_cus(int (*callback)(Dwarf_Die*, void*), void *data, bool want_types); template<> void dwflpp::iterate_over_inline_instances(int (*callback)(Dwarf_Die*, void*), void *data); template<> void dwflpp::iterate_over_call_sites(int (*callback)(Dwarf_Die*, Dwarf_Die*, void*), void *data); template<> int dwflpp::iterate_over_functions(int (*callback)(Dwarf_Die*, void*), void *data, const std::string& function); template<> int dwflpp::iterate_single_function(int (*callback)(Dwarf_Die*, void*), void *data, const std::string& function); template<> int dwflpp::iterate_over_globals(Dwarf_Die *cu_die, int (*callback)(Dwarf_Die*, bool, const std::string&, void*), void *data); template<> int dwflpp::iterate_over_types(Dwarf_Die *top_die, bool has_inner_types, const std::string& prefix, int (* callback)(Dwarf_Die*, bool, const std::string&, void*), void *data); template<> int dwflpp::iterate_over_notes(void *object, void (*callback)(void*, const std::string&, const std::string&, int, const char*, size_t)); template<> void dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), void *data); template<> int dwflpp::iterate_over_plt(void *object, void (*callback)(void*, const char*, size_t)); template<> void dwflpp::iterate_over_srcfile_lines(char const * srcfile, const std::vector& linenos, enum lineno_t lineno_type, base_func_info_map_t& funcs, void (* callback) (Dwarf_Addr, int, void*), bool has_nearest, void *data); template<> void dwflpp::iterate_over_labels(Dwarf_Die *begin_die, const std::string& sym, const base_func_info& function, const std::vector& linenos, enum lineno_t lineno_type, void *data, void (* callback)(const base_func_info&, const char*, const char*, int, Dwarf_Die*, Dwarf_Addr, void*)); template<> void dwflpp::iterate_over_callees(Dwarf_Die *begin_die, const std::string& sym, int64_t recursion_depth, void *data, void (* callback)(base_func_info&, base_func_info&, std::stack*, void*), base_func_info& caller, std::stack *callers); #endif // DWFLPP_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/elaborate.cxx000066400000000000000000007012001414446751200161060ustar00rootroot00000000000000// elaboration functions // Copyright (C) 2005-2019 Red Hat Inc. // Copyright (C) 2008 Intel Corporation // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #include "config.h" #include "elaborate.h" #include "translate.h" #include "parse.h" #include "tapsets.h" #include "session.h" #include "util.h" #include "task_finder.h" #include "stapregex.h" #include "stringtable.h" extern "C" { #include #include #define __STDC_FORMAT_MACROS #include } #include #include #include #include #include #include #include #include #include using namespace std; // ------------------------------------------------------------------------ // Used in probe_point condition construction. Either argument may be // NULL; if both, return NULL too. Resulting expression is a deep // copy for symbol resolution purposes. expression* add_condition (expression* a, expression* b) { if (!a && !b) return 0; if (! a) return deep_copy_visitor::deep_copy(b); if (! b) return deep_copy_visitor::deep_copy(a); logical_and_expr la; la.op = "&&"; la.left = a; la.right = b; la.tok = a->tok; // or could be b->tok return deep_copy_visitor::deep_copy(& la); } // ------------------------------------------------------------------------ derived_probe::derived_probe (probe *p, probe_point *l, bool rewrite_loc): base (p), base_pp(l), group(NULL), sdt_semaphore_addr(0), session_index((unsigned)-1) { assert (p); this->tok = p->tok; this->privileged = p->privileged; this->synthetic = p->synthetic; this->body = deep_copy_visitor::deep_copy(p->body); assert (l); // make a copy for subclasses which want to rewrite the location if (rewrite_loc) l = new probe_point(*l); this->locations.push_back (l); } void derived_probe::printsig_nonest (ostream& o) const { probe::printsig (o); } void derived_probe::printsig (ostream& o) const { probe::printsig (o); printsig_nested (o); } void derived_probe::printsig_nested (ostream& o) const { // We'd like to enclose the probe derivation chain in a /* */ // comment delimiter. But just printing /* base->printsig() */ is // not enough, since base might itself be a derived_probe. So we, // er, "cleverly" encode our nesting state as a formatting flag for // the ostream. ios::fmtflags f = o.flags (ios::internal); if (f & ios::internal) { // already nested o << " <- "; base->printsig (o); } else { // outermost nesting o << " /* <- "; base->printsig (o); o << " */"; } // restore flags (void) o.flags (f); } void derived_probe::collect_derivation_chain (std::vector &probes_list) const { probes_list.push_back(const_cast(this)); base->collect_derivation_chain(probes_list); } void derived_probe::collect_derivation_pp_chain (std::vector &pp_list) const { pp_list.push_back(const_cast(this->sole_location())); base->collect_derivation_pp_chain(pp_list); } string derived_probe::derived_locations (bool firstFrom) { ostringstream o; vector reference_point; collect_derivation_pp_chain(reference_point); if (reference_point.size() > 0) for(unsigned i=1; i1) o << " from: "; o << reference_point[i]->str(false); // no ?,!,etc } return o.str(); } probe_point* derived_probe::sole_location () const { if (locations.size() == 0 || locations.size() > 1) throw SEMANTIC_ERROR (_N("derived_probe with no locations", "derived_probe with too many locations", locations.size()), this->tok); else return locations[0]; } probe_point* derived_probe::script_location () const { // This feeds function::pn() in the tapset, which is documented as the // script-level probe point expression, *after wildcard expansion*. vector chain; collect_derivation_pp_chain (chain); // Go backwards until we hit the first well-formed probe point for (int i=chain.size()-1; i>=0; i--) if (chain[i]->well_formed) return chain[i]; // If that didn't work, just fallback to -something-. return sole_location(); } void derived_probe::emit_privilege_assertion (translator_output* o) { // Emit code which will cause compilation to fail if it is compiled in // unprivileged mode. o->newline() << "#if ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPDEV) && \\"; o->newline() << " ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPSYS)"; o->newline() << "#error Internal Error: Probe "; probe::printsig (o->line()); o->line() << " generated in --unprivileged mode"; o->newline() << "#endif"; } void derived_probe::emit_process_owner_assertion (translator_output* o) { // Emit code which will abort should the current target not belong to the // user in unprivileged mode. o->newline() << "#if ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPDEV) && \\"; o->newline() << " ! STP_PRIVILEGE_CONTAINS (STP_PRIVILEGE, STP_PR_STAPSYS)"; o->newline(1) << "if (! is_myproc ()) {"; o->newline(1) << "snprintf(c->error_buffer, sizeof(c->error_buffer),"; o->newline() << " \"Internal Error: Process %d does not belong to user %d in probe %s in --unprivileged mode\","; o->newline() << " current->tgid, _stp_uid, c->probe_point);"; o->newline() << "c->last_error = c->error_buffer;"; // NB: since this check occurs before probe locking, its exit should // not be a "goto out", which would attempt unlocking. o->newline() << "return;"; o->newline(-1) << "}"; o->newline(-1) << "#endif"; } void derived_probe::print_dupe_stamp_unprivileged(ostream& o) { o << _("unprivileged users: authorized") << endl; } void derived_probe::print_dupe_stamp_unprivileged_process_owner(ostream& o) { o << _("unprivileged users: authorized for process owner") << endl; } // ------------------------------------------------------------------------ // Members of derived_probe_builder void derived_probe_builder::build_with_suffix(systemtap_session &, probe *, probe_point *, literal_map_t const &, std::vector &, std::vector const &) { // XXX perhaps build the probe if suffix is empty? // if (suffix.empty()) { // build (sess, use, location, parameters, finished_results); // return; // } throw SEMANTIC_ERROR (_("invalid suffix for probe")); } bool derived_probe_builder::get_param (literal_map_t const & params, interned_string key, interned_string& value) { literal_map_t::const_iterator i = params.find (key); if (i == params.end()) return false; literal_string * ls = dynamic_cast(i->second); if (!ls) return false; value = ls->value; return true; } bool derived_probe_builder::get_param (literal_map_t const & params, interned_string key, int64_t& value) { literal_map_t::const_iterator i = params.find (key); if (i == params.end()) return false; if (i->second == NULL) return false; literal_number * ln = dynamic_cast(i->second); if (!ln) return false; value = ln->value; return true; } bool derived_probe_builder::has_null_param (literal_map_t const & params, interned_string key) { literal_map_t::const_iterator i = params.find(key); return (i != params.end() && i->second == NULL); } bool derived_probe_builder::has_param (literal_map_t const & params, interned_string key) { return (params.find(key) != params.end()); } // ------------------------------------------------------------------------ // Members of match_key. match_key::match_key(interned_string n) : name(n), have_parameter(false), parameter_type(pe_unknown) { } match_key::match_key(probe_point::component const & c) : name(c.functor), have_parameter(c.arg != NULL), parameter_type(c.arg ? c.arg->type : pe_unknown) { } match_key & match_key::with_number() { have_parameter = true; parameter_type = pe_long; return *this; } match_key & match_key::with_string() { have_parameter = true; parameter_type = pe_string; return *this; } string match_key::str() const { string n = name; if (have_parameter) switch (parameter_type) { case pe_string: return n + "(string)"; case pe_long: return n + "(number)"; default: return n + "(...)"; } return n; } bool match_key::operator<(match_key const & other) const { return ((name < other.name) || (name == other.name && have_parameter < other.have_parameter) || (name == other.name && have_parameter == other.have_parameter && parameter_type < other.parameter_type)); } // NB: these are only used in the probe point name components, where // only "*" is permitted. // // Within module("bar"), function("foo"), process("baz") strings, real // wildcards are permitted too. See also util.h:contains_glob_chars static bool isglob(interned_string str) { return(str.find('*') != str.npos); } static bool isdoubleglob(interned_string str) { return(str.find("**") != str.npos); } bool match_key::globmatch(match_key const & other) const { const string & name_str = name; const string & other_str = other.name; return ((fnmatch(name_str.c_str(), other_str.c_str(), FNM_NOESCAPE) == 0) && have_parameter == other.have_parameter && parameter_type == other.parameter_type); } // ------------------------------------------------------------------------ // Members of match_node // ------------------------------------------------------------------------ match_node::match_node() : privilege(privilege_t (pr_stapdev | pr_stapsys)) { } match_node * match_node::bind(match_key const & k) { if (k.name == "*") throw SEMANTIC_ERROR(_("invalid use of wildcard probe point component")); map::const_iterator i = sub.find(k); if (i != sub.end()) return i->second; match_node * n = new match_node(); sub.insert(make_pair(k, n)); return n; } void match_node::bind(derived_probe_builder * e) { ends.push_back (e); } match_node * match_node::bind(interned_string k) { return bind(match_key(k)); } match_node * match_node::bind_str(string const & k) { return bind(match_key(k).with_string()); } match_node * match_node::bind_num(string const & k) { return bind(match_key(k).with_number()); } match_node * match_node::bind_privilege(privilege_t p) { privilege = p; return this; } void match_node::find_and_build (systemtap_session& s, probe* p, probe_point *loc, unsigned pos, vector& results, set& builders) { save_and_restore costly(& s.suppress_costly_diagnostics, s.suppress_costly_diagnostics + (loc->optional || loc->sufficient ? 1 : 0)); assert (pos <= loc->components.size()); if (pos == loc->components.size()) // matched all probe point components so far { if (ends.empty()) { string alternatives; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) alternatives += string(" ") + i->first.str(); throw SEMANTIC_ERROR (_F("probe point truncated (follow: %s)", alternatives.c_str()), loc->components.back()->tok); } if (! pr_contains (privilege, s.privilege)) { throw SEMANTIC_ERROR (_F("probe point is not allowed for --privilege=%s", pr_name (s.privilege)), loc->components.back()->tok); } literal_map_t param_map; for (unsigned i=0; icomponents[i]->functor] = loc->components[i]->arg; // maybe 0 unsigned int num_results = results.size(); // Iterate over all bound builders for (unsigned k=0; kbuild (s, p, loc, param_map, results); } // Collect names of builders attempted for error reporting if (results.size() == num_results) { for (unsigned k=0; kname()); } } else if (isdoubleglob(loc->components[pos]->functor)) // ** wildcard? { unsigned int num_results = results.size(); // When faced with "foo**bar", we try "foo*bar" and "foo*.**bar" const probe_point::component *comp = loc->components[pos]; string functor = comp->functor; size_t glob_start = functor.find("**"); size_t glob_end = functor.find_first_not_of('*', glob_start); string prefix = functor.substr(0, glob_start); string suffix = ((glob_end != string::npos) ? functor.substr(glob_end) : ""); // Synthesize "foo*bar" probe_point *simple_pp = new probe_point(*loc); probe_point::component *simple_comp = new probe_point::component(*comp); simple_comp->functor = prefix + "*" + suffix; simple_comp->from_glob = true; simple_pp->components[pos] = simple_comp; try { find_and_build (s, p, simple_pp, pos, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors. } // Cleanup if we didn't find anything if (results.size() == num_results) { delete simple_pp; delete simple_comp; } num_results = results.size(); // Synthesize "foo*.**bar" // NB: any component arg should attach to the latter part only probe_point *expanded_pp = new probe_point(*loc); probe_point::component *expanded_comp_pre = new probe_point::component(*comp); expanded_comp_pre->functor = prefix + "*"; expanded_comp_pre->from_glob = true; expanded_comp_pre->arg = NULL; probe_point::component *expanded_comp_post = new probe_point::component(*comp); expanded_comp_post->functor = string("**") + suffix; expanded_pp->components[pos] = expanded_comp_pre; expanded_pp->components.insert(expanded_pp->components.begin() + pos + 1, expanded_comp_post); try { find_and_build (s, p, expanded_pp, pos, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors. } // Cleanup if we didn't find anything if (results.size() == num_results) { delete expanded_pp; delete expanded_comp_pre; delete expanded_comp_post; } // Try suffix expansion only if no matches found: if (num_results == results.size()) this->try_suffix_expansion (s, p, loc, pos, results); if (! loc->optional && num_results == results.size()) { // We didn't find any wildcard matches (since the size of // the result vector didn't change). Throw an error. string sugs = suggest_functors(s, functor); throw SEMANTIC_ERROR (_F("probe point mismatch: didn't find any wildcard matches%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), comp->tok); } } else if (isglob(loc->components[pos]->functor)) // wildcard? { match_key match (* loc->components[pos]); // Call find_and_build for each possible match. Ignore errors - // unless we don't find any match. unsigned int num_results = results.size(); for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { const match_key& subkey = i->first; match_node* subnode = i->second; assert_no_interrupts(); if (match.globmatch(subkey)) { if (s.verbose > 2) clog << _F("wildcard '%s' matched '%s'", loc->components[pos]->functor.to_string().c_str(), subkey.name.to_string().c_str()) << endl; // When we have a wildcard, we need to create a copy of // the probe point. Then we'll create a copy of the // wildcard component, and substitute the non-wildcard // functor. probe_point *non_wildcard_pp = new probe_point(*loc); probe_point::component *non_wildcard_component = new probe_point::component(*loc->components[pos]); non_wildcard_component->functor = subkey.name; non_wildcard_component->from_glob = true; non_wildcard_pp->components[pos] = non_wildcard_component; // NB: probe conditions are not attached at the wildcard // (component/functor) level, but at the overall // probe_point level. unsigned int inner_results = results.size(); // recurse (with the non-wildcard probe point) try { subnode->find_and_build (s, p, non_wildcard_pp, pos+1, results, builders); } catch (const semantic_error& e) { // Ignore semantic_errors while expanding wildcards. // If we get done and nothing was expanded, the code // following the loop will complain. } if (results.size() == inner_results) { // If this wildcard didn't match, cleanup. delete non_wildcard_pp; delete non_wildcard_component; } } } // Try suffix expansion only if no matches found: if (num_results == results.size()) this->try_suffix_expansion (s, p, loc, pos, results); if (! loc->optional && num_results == results.size()) { // We didn't find any wildcard matches (since the size of // the result vector didn't change). Throw an error. string sugs = suggest_functors(s, loc->components[pos]->functor); throw SEMANTIC_ERROR (_F("probe point mismatch: didn't find any wildcard matches%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), loc->components[pos]->tok); } } else { match_key match (* loc->components[pos]); sub_map_iterator_t i = sub.find (match); if (i != sub.end()) // match found { match_node* subnode = i->second; // recurse subnode->find_and_build (s, p, loc, pos+1, results, builders); return; } unsigned int num_results = results.size(); this->try_suffix_expansion (s, p, loc, pos, results); // XXX: how to correctly report alternatives + position numbers // for alias suffixes? file a separate PR to address the issue if (! loc->optional && num_results == results.size()) { // We didn't find any alias suffixes (since the size of the // result vector didn't change). Throw an error. string sugs = suggest_functors(s, loc->components[pos]->functor); throw SEMANTIC_ERROR (_F("probe point mismatch%s", sugs.empty() ? "" : (" (similar: " + sugs + ")").c_str()), loc->components[pos]->tok); } } } string match_node::suggest_functors(systemtap_session& s, string functor) { // only use prefix if globby (and prefix is non-empty) size_t glob = functor.find('*'); if (glob != string::npos && glob != 0) functor.erase(glob); if (functor.empty()) return ""; // PR18577: There isn't any point in generating a suggestion list if // we're not going to display it. if ((s.dump_mode == systemtap_session::dump_matched_probes || s.dump_mode == systemtap_session::dump_matched_probes_vars) && s.verbose < 2) return ""; set functors; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { string ftor = i->first.str(); if (ftor.find('(') != string::npos) // trim any parameter ftor.erase(ftor.find('(')); functors.insert(ftor); } return levenshtein_suggest(functor, functors, 5); // print top 5 } void match_node::try_suffix_expansion (systemtap_session& s, probe *p, probe_point *loc, unsigned pos, vector& results) { // PR12210: match alias suffixes. If the components thus far // have been matched, but there is an additional unknown // suffix, we have a potential alias suffix on our hands. We // need to expand the preceding components as probe aliases, // reattach the suffix, and re-run derive_probes() on the // resulting expansion. This is done by the routine // build_with_suffix(). if (strverscmp(s.compatible.c_str(), "2.0") >= 0) { // XXX: technically, param_map isn't used here. So don't // bother actually assembling it unless some // derived_probe_builder appears that actually takes // suffixes *and* consults parameters (currently no such // builders exist). literal_map_t param_map; // for (unsigned i=0; icomponents[i]->functor] = loc->components[i]->arg; // maybe 0 vector suffix (loc->components.begin()+pos, loc->components.end()); // Multiple derived_probe_builders may be bound at a // match_node due to the possibility of multiply defined // aliases. for (unsigned k=0; k < ends.size(); k++) { derived_probe_builder *b = ends[k]; try { b->build_with_suffix (s, p, loc, param_map, results, suffix); } catch (const recursive_expansion_error &e) { // Re-throw: throw semantic_error(e); } catch (const semantic_error &e) { // Adjust source coordinate and re-throw: if (! loc->optional) throw semantic_error(e.errsrc, e.what(), loc->components[pos]->tok); } } } } void match_node::build_no_more (systemtap_session& s) { for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) i->second->build_no_more (s); for (unsigned k=0; kbuild_no_more (s); } } void match_node::dump (systemtap_session &s, const string &name) { // Dump this node, if it is complete. for (unsigned k=0; kis_alias ()) continue; // In unprivileged mode, don't show the probes which are not allowed for unprivileged // users. if (pr_contains (privilege, s.privilege)) { cout << name << endl; break; // we need only print one instance. } } // Recursively dump the children of this node string dot; if (! name.empty ()) dot = "."; for (sub_map_iterator_t i = sub.begin(); i != sub.end(); i++) { i->second->dump (s, name + dot + i->first.str()); } } // ------------------------------------------------------------------------ // Alias probes // ------------------------------------------------------------------------ struct alias_derived_probe: public derived_probe { alias_derived_probe (probe* base, probe_point *l, const probe_alias *a, const vector *suffix = 0); ~alias_derived_probe(); void upchuck () { throw SEMANTIC_ERROR (_("inappropriate"), this->tok); } // Alias probes are immediately expanded to other derived_probe // types, and are not themselves emitted or listed in // systemtap_session.probes void join_group (systemtap_session&) { upchuck (); } virtual const probe_alias *get_alias () const { return alias; } virtual probe_point *get_alias_loc () const { return alias_loc; } virtual probe_point *sole_location () const; private: const probe_alias *alias; // Used to check for recursion probe_point *alias_loc; // Hack to recover full probe name }; alias_derived_probe::alias_derived_probe(probe *base, probe_point *l, const probe_alias *a, const vector *suffix): derived_probe (base, l), alias(a) { // XXX pretty nasty -- this was cribbed from printscript() in main.cxx assert (alias->alias_names.size() >= 1); alias_loc = new probe_point(*alias->alias_names[0]); // XXX: [0] is arbitrary; it would make just as much sense to collect all of the names alias_loc->well_formed = true; vector::const_iterator it; for (it = suffix->begin(); it != suffix->end(); ++it) { alias_loc->components.push_back(*it); if (isglob((*it)->functor)) alias_loc->well_formed = false; // needs further derivation } } alias_derived_probe::~alias_derived_probe () { delete alias_loc; } probe_point* alias_derived_probe::sole_location () const { return const_cast(alias_loc); } void alias_expansion_builder::build(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const & parameters, vector & finished_results) { vector empty_suffix; build_with_suffix (sess, use, location, parameters, finished_results, empty_suffix); } void alias_expansion_builder::build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, vector & finished_results, vector const & suffix) { // Don't build the alias expansion if infinite recursion is detected. if (checkForRecursiveExpansion (use)) { stringstream msg; msg << _F("recursive loop in alias expansion of %s at %s", lex_cast(*location).c_str(), lex_cast(location->components.front()->tok->location).c_str()); // semantic_errors thrown here might be ignored, so we need a special class: throw recursive_expansion_error (msg.str()); // XXX The point of throwing this custom error is to suppress a // cascade of "probe mismatch" messages that appear in addition to // the error. The current approach suppresses most of the error // cascade, but leaves one spurious error; in any case, the way // this particular error is reported could be improved. } // We're going to build a new probe and wrap it up in an // alias_expansion_probe so that the expansion loop recognizes it as // such and re-expands its expansion. alias_derived_probe * n = new alias_derived_probe (use, location /* soon overwritten */, this->alias, &suffix); n->body = new block(); // The new probe gets a deep copy of the location list of the alias // (with incoming condition joined) plus the suffix (if any), n->locations.clear(); for (unsigned i=0; ilocations.size(); i++) { probe_point *pp = new probe_point(*alias->locations[i]); pp->components.insert(pp->components.end(), suffix.begin(), suffix.end()); pp->condition = add_condition (pp->condition, location->condition); n->locations.push_back(pp); } // the token location of the alias, n->tok = location->components.front()->tok; // and statements representing the concatenation of the alias' // body with the use's. // // NB: locals are *not* copied forward, from either alias or // use. The expansion should have its locals re-inferred since // there's concatenated code here and we only want one vardecl per // resulting variable. if (alias->epilogue_style) n->body = new block (use->body, alias->body); else if (alias->body2) n->body = new block (alias->body, use->body, deep_copy_visitor::deep_copy(alias->body2)); else n->body = new block (alias->body, use->body); // We'll try to resolve any @probewrite predicates while we have // direct access to the probe body (use->body). Note that the // symuse visitor used by the probewrite_evaluator won't be able // to visit function bodies since symbol resolution is still left. probewrite_evaluator pw_eval(sess, use->body); pw_eval.replace(n->body); unsigned old_num_results = finished_results.size(); // If expanding for an alias suffix, be sure to pass on any errors // to the caller instead of printing them in derive_probes(): derive_probes (sess, n, finished_results, location->optional, !suffix.empty()); // Check whether we resolved something. If so, put the // whole library into the queue if not already there. if (finished_results.size() > old_num_results) { stapfile *f = alias->tok->location.file; if (find (sess.files.begin(), sess.files.end(), f) == sess.files.end()) sess.files.push_back (f); } } bool alias_expansion_builder::checkForRecursiveExpansion (probe *use) { // Collect the derivation chain of this probe. vectorderivations; use->collect_derivation_chain (derivations); // Check all probe points in the alias expansion against the currently-being-expanded probe point // of each of the probes in the derivation chain, looking for a match. This // indicates infinite recursion. // The first element of the derivation chain will be the derived_probe representing 'use', so // start the search with the second element. assert (derivations.size() > 0); assert (derivations[0] == use); for (unsigned d = 1; d < derivations.size(); ++d) { if (use->get_alias() == derivations[d]->get_alias()) return true; // recursion detected } return false; } // ------------------------------------------------------------------------ // Pattern matching // ------------------------------------------------------------------------ // The match-and-expand loop. void derive_probes (systemtap_session& s, probe *p, vector& dps, bool optional, bool rethrow_errors) { // We need a static to track whether the current probe is optional so that // even if we recurse into derive_probes with optional = false, errors will // still be ignored. The undo_parent_optional bool ensures we reset the // static at the same level we had it set. static bool parent_optional = false; bool undo_parent_optional = false; if (optional && !parent_optional) { parent_optional = true; undo_parent_optional = true; } vector optional_errs; for (unsigned i = 0; i < p->locations.size(); ++i) { set builders; assert_no_interrupts(); probe_point *loc = p->locations[i]; if (s.verbose > 1) clog << "derive-probes (location #" << i << "): " << *loc << " of " << *p->tok << endl; try { unsigned num_atbegin = dps.size(); try { s.pattern_root->find_and_build (s, p, loc, 0, dps, builders); // <-- actual derivation! } catch (const semantic_error& e) { if (!loc->optional && !parent_optional) throw semantic_error(e); else /* tolerate failure for optional probe */ { // remember err, we will print it (in catch block) if any // non-optional loc fails to resolve semantic_error err(ERR_SRC, _("while resolving probe point"), loc->components[0]->tok, NULL, &e); optional_errs.push_back(err); continue; } } unsigned num_atend = dps.size(); if (! (loc->optional||parent_optional) && // something required, but num_atbegin == num_atend) // nothing new derived! throw SEMANTIC_ERROR (_("no match")); if (loc->sufficient && (num_atend > num_atbegin)) { if (s.verbose > 1) { clog << "Probe point "; p->locations[i]->print(clog); clog << " sufficient, skipped"; for (unsigned j = i+1; j < p->locations.size(); ++j) { clog << " "; p->locations[j]->print(clog); } clog << endl; } break; // we need not try to derive for any other locations } } catch (const semantic_error& e) { // The rethrow_errors parameter lets the caller decide an // alternative to printing the error. This is necessary when // calling derive_probes() recursively during expansion of // an alias with suffix -- any message printed here would // point to the alias declaration and not the invalid suffix // usage, so the caller needs to catch the error themselves // and print a more appropriate message. if (rethrow_errors) { throw semantic_error(e); } // Only output in dump mode if -vv is supplied: else if (!s.dump_mode || (s.verbose > 1)) { // print this one manually first because it's more important than // the optional errs semantic_error err(ERR_SRC, _("while resolving probe point"), loc->components[0]->tok, NULL, &e); // provide some details about which builders were tried if (s.verbose > 0 && !builders.empty()) { string msg; for (auto it = builders.begin(); it != builders.end(); ++it) { if (it != builders.begin()) msg.append(", "); msg.append(*it); } semantic_error err2(ERR_SRC, _F("resolution failed in %s", msg.c_str())); err2.set_chain(err); s.print_error(err2); } else { s.print_error(err); } // print optional errs accumulated while visiting other probe points for (vector::const_iterator it = optional_errs.begin(); it != optional_errs.end(); ++it) { s.print_error(*it); } } } } if (undo_parent_optional) { parent_optional = false; } } // ------------------------------------------------------------------------ // // Indexable usage checks // struct symbol_fetcher : public throwing_visitor { symbol *&sym; symbol_fetcher (symbol *&sym): sym(sym) {} void visit_symbol (symbol* e) { sym = e; } void visit_arrayindex (arrayindex* e) { e->base->visit (this); } void throwone (const token* t) { throw SEMANTIC_ERROR (_("Expecting symbol or array index expression"), t); } }; symbol * get_symbol_within_expression (expression *e) { symbol *sym = NULL; symbol_fetcher fetcher(sym); e->visit (&fetcher); return sym; // NB: may be null! } static symbol * get_symbol_within_indexable (indexable *ix) { symbol *array = NULL; hist_op *hist = NULL; classify_indexable(ix, array, hist); if (array) return array; else return get_symbol_within_expression (hist->stat); } struct mutated_var_collector : public traversing_visitor { set * mutated_vars; mutated_var_collector (set * mm) : mutated_vars (mm) {} void visit_assignment(assignment* e) { if (e->type == pe_stats && e->op == "<<<") { vardecl *vd = get_symbol_within_expression (e->left)->referent; if (vd) mutated_vars->insert (vd); } traversing_visitor::visit_assignment(e); } void visit_arrayindex (arrayindex *e) { if (is_active_lvalue (e)) { symbol *sym; if (e->base->is_symbol (sym)) mutated_vars->insert (sym->referent); else throw SEMANTIC_ERROR(_("Assignment to read-only histogram bucket"), e->tok); } traversing_visitor::visit_arrayindex (e); } }; struct no_var_mutation_during_iteration_check : public traversing_visitor { systemtap_session & session; map *> & function_mutates_vars; vector vars_being_iterated; no_var_mutation_during_iteration_check (systemtap_session & sess, map *> & fmv) : session(sess), function_mutates_vars (fmv) {} void visit_arrayindex (arrayindex *e) { if (is_active_lvalue(e)) { vardecl *vd = get_symbol_within_indexable (e->base)->referent; if (vd) { for (unsigned i = 0; i < vars_being_iterated.size(); ++i) { vardecl *v = vars_being_iterated[i]; if (v == vd) { string err = _F("variable '%s' modified during 'foreach' iteration", v->unmangled_name.to_string().c_str()); session.print_error (SEMANTIC_ERROR (err, e->tok)); } } } } traversing_visitor::visit_arrayindex (e); } void visit_functioncall (functioncall* e) { for (unsigned fd = 0; fd < e->referents.size(); fd++) { map *>::const_iterator i = function_mutates_vars.find (e->referents[fd]); if (i != function_mutates_vars.end()) { for (unsigned j = 0; j < vars_being_iterated.size(); ++j) { vardecl *m = vars_being_iterated[j]; if (i->second->find (m) != i->second->end()) { string err = _F("function call modifies var '%s' during 'foreach' iteration", m->unmangled_name.to_string().c_str()); session.print_error (SEMANTIC_ERROR (err, e->tok)); } } } } traversing_visitor::visit_functioncall (e); } void visit_foreach_loop(foreach_loop* s) { vardecl *vd = get_symbol_within_indexable (s->base)->referent; if (vd) vars_being_iterated.push_back (vd); traversing_visitor::visit_foreach_loop (s); if (vd) vars_being_iterated.pop_back(); } }; // ------------------------------------------------------------------------ struct stat_decl_collector : public traversing_visitor { systemtap_session & session; stat_decl_collector(systemtap_session & sess) : session(sess) {} void visit_stat_op (stat_op* e) { symbol *sym = get_symbol_within_expression (e->stat); statistic_decl new_stat = statistic_decl(); int bit_shift = (e->params.size() == 0) ? 0 : e->params[0]; int stat_op = STAT_OP_NONE; if ((bit_shift < 0) || (bit_shift > 62)) throw SEMANTIC_ERROR (_F("bit shift (%d) out of range <0..62>", bit_shift), e->tok); // The following helps to track which statistical operators are being // used with given global/local variable. This information later helps // to optimize the runtime behaviour. if (e->ctype == sc_count) stat_op = STAT_OP_COUNT; else if (e->ctype == sc_sum) stat_op = STAT_OP_SUM; else if (e->ctype == sc_min) stat_op = STAT_OP_MIN; else if (e->ctype == sc_max) stat_op = STAT_OP_MAX; else if (e->ctype == sc_average) stat_op = STAT_OP_AVG; else if (e->ctype == sc_variance) stat_op = STAT_OP_VARIANCE; new_stat.bit_shift = bit_shift; new_stat.stat_ops |= stat_op; map::iterator i = session.stat_decls.find(sym->name); if (i == session.stat_decls.end()) session.stat_decls[sym->name] = new_stat; else { i->second.stat_ops |= stat_op; // The @variance operator for given stat S (i.e. call to // _stp_stat_init()) is optionally parametrizeable // (@variance(S[, N]), where N is a bit shift (the default is // N=0). The bit_shift helps to improve precision if integer // arithemtic, namely divisions (). // // Ref: https://en.wikipedia.org/wiki/Scale_factor_%28computer_science%29 // if (e->tok->content != "@variance") return; else if ((i->second.bit_shift != 0) && (i->second.bit_shift != bit_shift)) { // FIXME: Support multiple co-declared bit shifts // (analogy to multiple co-declared histogram types) throw SEMANTIC_ERROR (_F("conflicting bit shifts declared (previously %d)", i->second.bit_shift), e->tok); } else { i->second.bit_shift = bit_shift; } } } void visit_foreach_loop (foreach_loop* s) { symbol *array; hist_op *hist; classify_indexable (s->base, array, hist); if (array && array->type == pe_stats && s->sort_direction && s->sort_column == 0) { int stat_op = STAT_OP_NONE; switch (s->sort_aggr) { default: case sc_none: case sc_count: stat_op = STAT_OP_COUNT; break; case sc_sum: stat_op = STAT_OP_SUM; break; case sc_min: stat_op = STAT_OP_MIN; break; case sc_max: stat_op = STAT_OP_MAX; break; case sc_average: stat_op = STAT_OP_AVG; break; } map::iterator i = session.stat_decls.find(array->name); if (i == session.stat_decls.end()) session.stat_decls[array->name] = statistic_decl(stat_op); else i->second.stat_ops |= stat_op; } traversing_visitor::visit_foreach_loop (s); } void visit_assignment (assignment* e) { if (e->op == "<<<") { symbol *sym = get_symbol_within_expression (e->left); if (session.stat_decls.find(sym->name) == session.stat_decls.end()) session.stat_decls[sym->name] = statistic_decl(); } else traversing_visitor::visit_assignment(e); } void visit_hist_op (hist_op* e) { symbol *sym = get_symbol_within_expression (e->stat); statistic_decl new_stat; if (e->htype == hist_linear) { new_stat.type = statistic_decl::linear; assert (e->params.size() == 3); new_stat.linear_low = e->params[0]; new_stat.linear_high = e->params[1]; new_stat.linear_step = e->params[2]; } else { assert (e->htype == hist_log); new_stat.type = statistic_decl::logarithmic; assert (e->params.size() == 0); } map::iterator i = session.stat_decls.find(sym->name); if (i == session.stat_decls.end()) session.stat_decls[sym->name] = new_stat; else { statistic_decl & old_stat = i->second; if (!(old_stat == new_stat)) { if (old_stat.type == statistic_decl::none) { i->second.type = new_stat.type; i->second.linear_low = new_stat.linear_low; i->second.linear_high = new_stat.linear_high; i->second.linear_step = new_stat.linear_step; } else { // FIXME: Support multiple co-declared histogram types semantic_error se(ERR_SRC, _F("multiple histogram types declared on '%s'", sym->name.to_string().c_str()), e->tok); session.print_error (se); } } } } }; static int semantic_pass_stats (systemtap_session & sess) { stat_decl_collector sdc(sess); for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) it->second->body->visit (&sdc); for (unsigned i = 0; i < sess.probes.size(); ++i) sess.probes[i]->body->visit (&sdc); for (unsigned i = 0; i < sess.globals.size(); ++i) { vardecl *v = sess.globals[i]; if (v->type == pe_stats) { if (sess.stat_decls.find(v->name) == sess.stat_decls.end()) { semantic_error se(ERR_SRC, _F("unable to infer statistic parameters for global '%s'", v->unmangled_name.to_string().c_str())); sess.print_error (se); } } } return sess.num_errors(); } // ------------------------------------------------------------------------ // Enforce variable-related invariants: no modification of // a foreach()-iterated array. static int semantic_pass_vars (systemtap_session & sess) { map *> fmv; no_var_mutation_during_iteration_check chk(sess, fmv); for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) { functiondecl * fn = it->second; if (fn->body) { set * m = new set(); mutated_var_collector mc (m); fn->body->visit (&mc); fmv[fn] = m; } } for (map::iterator it = sess.functions.begin(); it != sess.functions.end(); it++) { functiondecl * fn = it->second; if (fn->body) fn->body->visit (&chk); } for (unsigned i = 0; i < sess.probes.size(); ++i) { if (sess.probes[i]->body) sess.probes[i]->body->visit (&chk); } return sess.num_errors(); } // ------------------------------------------------------------------------ // Rewrite probe condition expressions into probe bodies. Tricky and // exciting business, this. This: // // probe foo if (g1 || g2) { ... } // probe bar { ... g1 ++ ... } // // becomes: // // probe foo { if (! (g1 || g2)) next; ... } // probe bar { ... g1 ++ ...; // if (g1 || g2) %{ enable_probe_foo %} else %{ disable_probe_foo %} // } // // In other words, we perform two transformations: // (1) Inline probe condition into its body. // (2) For each probe that modifies a global var in use in any probe's // condition, re-evaluate those probes' condition at the end of that // probe's body. // // Here, we do all of (1), and half of (2): we simply collect the dependency // info between probes, which the translator will use to emit the affected // probes' condition re-evaluation. The translator will also ensure that the // conditions are evaluated using the globals' starting values prior to any // probes starting. // Adds the condition expression to the front of the probe's body static void derived_probe_condition_inline (derived_probe *p) { expression* e = p->sole_location()->condition; assert(e); if_statement *ifs = new if_statement (); ifs->tok = e->tok; ifs->thenblock = new next_statement (); ifs->thenblock->tok = e->tok; ifs->elseblock = NULL; unary_expression *notex = new unary_expression (); notex->op = "!"; notex->tok = e->tok; notex->operand = e; ifs->condition = notex; p->body = new block (ifs, p->body); } static int semantic_pass_conditions (systemtap_session & sess) { map > vars_read_in_cond; map > vars_written_in_body; // do a first pass through the probes to inline any condition, collect // globals being read for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe* p = sess.probes[i]; expression* e = p->sole_location()->condition; if (e) { varuse_collecting_visitor vcv_cond(sess); e->visit (& vcv_cond); if (!vcv_cond.written.empty()) sess.print_error (SEMANTIC_ERROR (_("probe condition must not " "modify any variables"), e->tok)); else if (vcv_cond.embedded_seen) sess.print_error (SEMANTIC_ERROR (_("probe condition must not " "include impure embedded-C"), e->tok)); derived_probe_condition_inline(p); if (! vcv_cond.read.empty()) { // insert only if nonempty vars_read_in_cond[p].insert(vcv_cond.read.begin(), vcv_cond.read.end()); } } } // skip all the rest of this processing if there are no conditions // that relate to state (global variables) at all if (sess.verbose > 2) clog << "number of probes with global-variable conditions: " << vars_read_in_cond.size() << endl; if (vars_read_in_cond.empty()) return 0; // do a second pass to see what probes write to any globals for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe* p = sess.probes[i]; varuse_collecting_visitor vcv_body(sess); p->body->visit (& vcv_body); vars_written_in_body[p].insert(vcv_body.written.begin(), vcv_body.written.end()); } // do a third pass to collect affected probes for (unsigned i = 0; i < sess.probes.size(); ++i) { if (pending_interrupts) return 1; derived_probe *p = sess.probes[i]; // for each variable this probe modifies... set::const_iterator var; for (var = vars_written_in_body[p].begin(); var != vars_written_in_body[p].end(); ++var) { // collect probes which could be affected for (unsigned j = 0; j < sess.probes.size(); ++j) { if (vars_read_in_cond[sess.probes[j]].count(*var)) { if (!p->probes_with_affected_conditions.count(sess.probes[j])) { p->probes_with_affected_conditions.insert(sess.probes[j]); if (sess.verbose > 2) clog << "probe " << i << " can affect condition of " "probe " << j << endl; } } } } } // PR18115: We create a begin probe which is artificially registered as // affecting every other probe. This will serve as the initializer so that // other probe types with false conditions can be skipped (or registered as // disabled) during module initialization. set targets; for (unsigned i = 0; i < sess.probes.size(); ++i) if (!vars_read_in_cond[sess.probes[i]].empty()) targets.insert(sess.probes[i]); if (!targets.empty()) { stringstream ss("probe begin {}"); // no good token to choose here... let's just use the condition expression // of one of the probes as the token const token *tok = (*targets.begin())->sole_location()->condition->tok; probe *p = parse_synthetic_probe(sess, ss, tok); if (!p) throw SEMANTIC_ERROR (_("can't create cond initializer probe"), tok); vector dps; derive_probes(sess, p, dps); // there should only be one assert(dps.size() == 1); derived_probe* dp = dps[0]; dp->probes_with_affected_conditions.insert(targets.begin(), targets.end()); sess.probes.push_back (dp); // no need to manually do symresolution since body is empty } return sess.num_errors(); } // ------------------------------------------------------------------------ // Simple visitor that just goes through all embedded code blocks that // are available at the end all the optimizations to register any // relevant pragmas or other indicators found, so that session flags can // be set that can be inspected at translation time to trigger any // necessary initialization of code needed by the embedded code functions. // This is only for pragmas that don't have any other side-effect than // needing some initialization at module init time. Currently handles // /* pragma:vma */ /* pragma:unwind */ /* pragma:symbols */ /* pragma:lines */ // /* pragma:uprobes */ is handled during the typeresolution_info pass. // /* pure */, /* unprivileged */. /* myproc-unprivileged */ and /* guru */ // are handled by the varuse_collecting_visitor. struct embeddedcode_info: public functioncall_traversing_visitor { protected: systemtap_session& session; void examine (const interned_string &, const token *tok); public: embeddedcode_info (systemtap_session& s): session(s) { } template void examine (Embeddish e, const token *tok); void visit_embeddedcode (embeddedcode* c) { examine (c, c->tok); } void visit_embedded_expr (embedded_expr* e) { examine (e, e->tok); } }; template void embeddedcode_info::examine (Embeddish e, const token *tok) { if (! vma_tracker_enabled(session) && e->tagged_p("/* pragma:vma */")) { if (session.verbose > 2) clog << _F("Turning on task_finder vma_tracker, pragma:vma found in %s", current_function->unmangled_name.to_string().c_str()) << endl; /* PR15052: stapdyn handles its own VMA-tracking and does not * emit pragma:vma, but just in case. */ if (session.runtime_usermode_p()) throw SEMANTIC_ERROR(_("VMA-tracking is only supported by the kernel runtime (PR15052)"), tok); enable_vma_tracker(session); } if (! session.need_unwind && e->tagged_p("/* pragma:unwind */")) { if (session.verbose > 2) clog << _F("Turning on unwind support, pragma:unwind found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_unwind = true; } if (! session.need_symbols && e->tagged_p("/* pragma:symbols */")) { if (session.verbose > 2) clog << _F("Turning on symbol data collecting, pragma:symbols found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_symbols = true; } if (! session.need_lines && e->tagged_p("/* pragma:lines */")) { if (session.verbose > 2) clog << _F("Turning on debug line data collecting, pragma:lines found in %s", current_function->unmangled_name.to_string().c_str()) << endl; session.need_lines = true; } } void embeddedcode_info_pass (systemtap_session& s) { embeddedcode_info eci (s); for (unsigned i=0; ibody->visit (& eci); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit (& eci); } // ------------------------------------------------------------------------ // Simple visitor that collects all the regular expressions in the // file and adds them to the session DFA table. struct regex_collecting_visitor: public functioncall_traversing_visitor { protected: systemtap_session& session; public: regex_collecting_visitor (systemtap_session& s): session(s) { } void visit_regex_query (regex_query *q) { functioncall_traversing_visitor::visit_regex_query (q); string re = q->right->value; regex_to_stapdfa (&session, re, q->right->tok); } }; // Go through the regex match invocations and generate corresponding DFAs. int gen_dfa_table (systemtap_session& s) { regex_collecting_visitor rcv(s); for (unsigned i=0; ibody->visit (& rcv); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& rcv); } catch (const semantic_error& e) { s.print_error (e); } } return s.num_errors(); } // ------------------------------------------------------------------------ static int semantic_pass_symbols (systemtap_session&); static int semantic_pass_optimize1 (systemtap_session&); static int semantic_pass_optimize2 (systemtap_session&); static int semantic_pass_types (systemtap_session&); static int semantic_pass_vars (systemtap_session&); static int semantic_pass_stats (systemtap_session&); static int semantic_pass_conditions (systemtap_session&); struct expression_build_no_more_visitor : public expression_visitor { // Clear extra details from every expression, like DWARF type info, so that // builders can safely release them in build_no_more. From here on out, // we're back to basic types only. void visit_expression(expression *e) { e->type_details.reset(); } }; static void build_no_more (systemtap_session& s) { expression_build_no_more_visitor v; for (unsigned i=0; ibody->visit(&v); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit(&v); // Inform all derived_probe builders that we're done with // all resolution, so it's time to release caches. s.pattern_root->build_no_more (s); } // Link up symbols to their declarations. Set the session's // files/probes/functions/globals vectors from the transitively // reached set of stapfiles in s.library_files, starting from // s.user_file. Perform automatic tapset inclusion and probe // alias expansion. static int semantic_pass_symbols (systemtap_session& s) { symresolution_info sym (s); // If we're listing functions, then we need to include all the files. Probe // aliases won't be visited/derived so all we gain are the functions, global // variables, and any real probes (e.g. begin probes). NB: type resolution for // a specific function arg may fail if it could only be determined from a // function call in one of the skipped aliases. if (s.dump_mode == systemtap_session::dump_functions) { s.files.insert(s.files.end(), s.library_files.begin(), s.library_files.end()); } else if (!s.user_files.empty()) { // Normal run: seed s.files with user_files and let it grow through the // find_* functions. NB: s.files can grow during this iteration, so // size() can return gradually increasing numbers. s.files.insert (s.files.end(), s.user_files.begin(), s.user_files.end()); } for (unsigned i = 0; i < s.files.size(); i++) { assert_no_interrupts(); stapfile* dome = s.files[i]; // Pass 1: add globals and functions to systemtap-session primart list, // so the find_* functions find them // // NB: tapset global/function definitions may duplicate or conflict // with those already in s.globals/functions. We need to deconflict // here. // PR24239: don't transcribe s.files .globals or .functions into // s.globals or s.functions here. Instead, symresolution_info::find_* // will have already done that, for only those functions / globals // that are actually transitively referenced from the end-user script. // except in dump_* modes ... then we need to copy over the goods // regardless of transitive referencing. if (s.dump_mode == systemtap_session::dump_functions) { for (auto it = dome->functions.begin(); it != dome->functions.end(); it++) { functiondecl* v = *it; s.functions[v->name] = v; } } if (s.verbose > 3) { for (auto it = dome->globals.begin(); it != dome->globals.end(); it++) if (std::find(s.globals.begin(), s.globals.end(), *it) == s.globals.end()) clog << "excluded unused global " << (*it)->name << " from tapset " << dome->name << endl; for (auto it = dome->functions.begin(); it != dome->functions.end(); it++) if (s.functions.find((*it)->name) == s.functions.end()) clog << "excluded unused function " << (*it)->name << " from tapset " << dome->name << endl; } // NB: embeds don't conflict with each other for (unsigned i=0; iembeds.size(); i++) s.embeds.push_back (dome->embeds[i]); // Pass 2: derive probes and resolve any further symbols in the // derived results. for (unsigned i=0; iprobes.size(); i++) { assert_no_interrupts(); probe* p = dome->probes [i]; vector dps; // much magic happens here: probe alias expansion, wildcard // matching, low-level derived_probe construction. derive_probes (s, p, dps); for (unsigned j=0; j 2) { clog << _("symbol resolution for derived-probe "); if (s.verbose > 3) dp->print(clog); else dp->printsig(clog); clog << endl; } try { update_visitor_loop (s, s.code_filters, dp->body); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (& sym); // Process the probe-point condition expression. sym.current_function = 0; sym.current_probe = 0; if (dp->sole_location()->condition) dp->sole_location()->condition->visit (& sym); } catch (const semantic_error& e) { s.print_error (e); } } } // Pass 3: process functions - incl. the synthetic ones, // so s.functions[] rather than dome->functions[] for (auto it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fd = it->second; if (s.verbose > 2) { clog << _("symbol resolution for function "); if (s.verbose > 3) fd->print(clog); else clog << fd->name; clog << endl; } try { update_visitor_loop (s, s.code_filters, fd->body); sym.current_function = fd; sym.current_probe = 0; fd->body->visit (& sym); } catch (const semantic_error& e) { s.print_error (e); } } } if(s.systemtap_v_check){ for(unsigned i=0;isystemtap_v_conditional) s.print_warning(_("This global uses tapset constructs that are dependent on systemtap version"), s.globals[i]->tok); } for(map::const_iterator i=s.functions.begin();i != s.functions.end();++i){ if(i->second->systemtap_v_conditional) s.print_warning(_("This function uses tapset constructs that are dependent on systemtap version"), i->second->tok); } for(unsigned i=0;i sysvc; s.probes[i]->collect_derivation_chain(sysvc); for(unsigned j=0;jsystemtap_v_conditional) s.print_warning(_("This probe uses tapset constructs that are dependent on systemtap version"), sysvc[j]->tok); if(sysvc[j]->get_alias() && sysvc[j]->get_alias()->systemtap_v_conditional) s.print_warning(_("This alias uses tapset constructs that are dependent on systemtap version"), sysvc[j]->get_alias()->tok); } } } return s.num_errors(); // all those print_error calls } // Keep unread global variables for probe end value display. void add_global_var_display (systemtap_session& s) { // Don't generate synthetic end probes when in listing mode; it would clutter // up the list of probe points with "end ...". In fact, don't bother in any // dump mode at all, since it'll never be used. if (s.dump_mode) return; // The bpf runtime currently lacks support for foreach statements which // this function might generate. if (s.runtime_mode == systemtap_session::bpf_runtime) return; // User has specified not to display unread global variables. if (s.no_global_var_display) return; varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& vut); } for (unsigned g=0; g < s.globals.size(); g++) { vardecl* l = s.globals[g]; if ((vut.read.find (l) != vut.read.end() && vut.used.find (l) != vut.used.end()) || vut.written.find (l) == vut.written.end()) continue; // Don't generate synthetic end probes for unread globals // that were synthesized or declared only within tapsets. // (RHBZ 468139), but rather only within the end-user script. if (l->synthetic) continue; bool tapset_global = false; for (size_t m=0; m < s.library_files.size(); m++) { for (size_t n=0; n < s.library_files[m]->globals.size(); n++) { if (l->name == s.library_files[m]->globals[n]->name) {tapset_global = true; break;} } } if (tapset_global) continue; stringstream code; code << "probe end {" << endl; string format = l->unmangled_name; string indexes; string foreach_value; if (!l->index_types.empty()) { // Add index values to the printf format, and prepare // a simple list of indexes for passing around elsewhere format += "["; for (size_t i = 0; i < l->index_types.size(); ++i) { if (i > 0) { indexes += ","; format += ","; } indexes += "__idx" + lex_cast(i); if (l->index_types[i] == pe_string) format += "\\\"%#s\\\""; else format += "%#d"; } format += "]"; // Iterate over all indexes in the array, sorted by decreasing value code << "foreach ("; if (l->type != pe_stats) { foreach_value = "__val"; code << foreach_value << " = "; } code << "[" << indexes << "] in " << l->unmangled_name << "-)" << endl; } else if (l->type == pe_stats) { // PR7053: Check scalar globals for empty aggregate code << "if (@count(" << l->unmangled_name << ") == 0)" << endl; code << "printf(\"" << l->unmangled_name << " @count=0x0\\n\")" << endl; code << "else" << endl; } static const string stats[] = { "@count", "@min", "@max", "@sum", "@avg" }; const string stats_format = (strverscmp(s.compatible.c_str(), "1.4") >= 0) ? "%#d" : "%#x"; // Fill in the printf format for values if (l->type == pe_stats) for (size_t i = 0; i < sizeof(stats)/sizeof(stats[0]); ++i) format += " " + stats[i] + "=" + stats_format; else if (l->type == pe_string) format += "=\\\"%#s\\\""; else { // If l->type is pe_long, we need to differentiate between pointers and non-pointers. string specifier = "=%d"; if (l->type_details != NULL && l->type_details->id() != 0) { exp_type_dwarf* type = (exp_type_dwarf*) l->type_details.get(); if (type->is_pointer || dwarf_tag(&type->die) == DW_TAG_pointer_type) specifier = "=%#x"; } format += specifier; } format += "\\n"; // Output the actual printf code << "printf (\"" << format << "\""; // Feed indexes to the printf, and include them in the value string value = !foreach_value.empty() ? foreach_value : string(l->unmangled_name); if (!l->index_types.empty()) { code << "," << indexes; if (foreach_value.empty()) value += "[" + indexes + "]"; } // Feed the actual values to the printf if (l->type == pe_stats) for (size_t i = 0; i < sizeof(stats)/sizeof(stats[0]); ++i) code << "," << stats[i] << "(" << value << ")"; else code << "," << value; code << ")" << endl; // End of probe code << "}" << endl; probe *p = parse_synthetic_probe (s, code, l->tok); if (!p) throw SEMANTIC_ERROR (_("can't create global var display"), l->tok); vector dps; derive_probes (s, p, dps); for (unsigned i = 0; i < dps.size(); i++) { derived_probe* dp = dps[i]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol and type info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (& sym); } semantic_pass_types(s); // Mark that variable is read vut.read.insert (l); } } static void gen_monitor_data(systemtap_session& s) { vardecl* v; embeddedcode* ec; v = new vardecl; v->unmangled_name = v->name = "__global___monitor_module_start"; v->set_arity(0, 0); v->type = pe_long; v->synthetic = true; s.globals.push_back(v); ec = new embeddedcode; ec->code = "#define STAP_MONITOR_READ 8192\n" "static char _monitor_buf[STAP_MONITOR_READ];"; s.embeds.push_back(ec); functiondecl* fd = new functiondecl; fd->synthetic = true; fd->unmangled_name = fd->name = "__private___monitor_data_function_probes"; fd->type = pe_string; v = new vardecl; v->type = pe_long; v->unmangled_name = v->name = "index"; fd->formal_args.push_back(v); ec = new embeddedcode; string code; code = "/* unprivileged */ /* pure */" "const struct stap_probe *const p = &stap_probes[STAP_ARG_index];\n" "if (likely (probe_timing(STAP_ARG_index))) {\n" "struct stat_data *stats = _stp_stat_get (probe_timing(STAP_ARG_index), 0);\n" "if (stats->count) {\n" "int64_t avg = _stp_div64 (NULL, stats->sum, stats->count);\n" "snprintf(_monitor_buf, STAP_MONITOR_READ,\n" "\"\\\"index\\\": %zu, \\\"state\\\": \\\"%s\\\", \\\"hits\\\": %lld, " "\\\"min\\\": %lld, \\\"avg\\\": %lld, \\\"max\\\": %lld, \",\n" "p->index, p->cond_enabled ? \"on\" : \"off\", (long long) stats->count,\n" "(long long) stats->min, (long long) avg, (long long) stats->max);\n" "} else {\n" "snprintf(_monitor_buf, STAP_MONITOR_READ,\n" "\"\\\"index\\\": %zu, \\\"state\\\": \\\"%s\\\", \\\"hits\\\": %d, " "\\\"min\\\": %d, \\\"avg\\\": %d, \\\"max\\\": %d, \",\n" "p->index, p->cond_enabled ? \"on\" : \"off\", 0, 0, 0, 0);}}\n" "STAP_RETURN(_monitor_buf);\n"; ec->code = code; fd->body = ec; s.functions[fd->name] = fd; stringstream probe_code; probe_code << "probe begin {" << endl; probe_code << "__monitor_module_start = jiffies()" << endl; probe_code << "}" << endl; probe* p = parse_synthetic_probe(s, probe_code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create begin probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } static void monitor_mode_read(systemtap_session& s) { if (!s.monitor) return; gen_monitor_data(s); stringstream code; unsigned long rough_max_json_size = 100 + s.globals.size() * 100 + s.probes.size() * 200; code << "probe procfs(\"monitor_status\").read.maxsize(" << rough_max_json_size << ") {" << endl; code << "try {"; // absorb .= overflows! code << "elapsed = (jiffies()-__monitor_module_start)/HZ()" << endl; code << "hrs = elapsed/3600; mins = elapsed%3600/60; secs = elapsed%3600%60;" << endl; code << "$value .= sprintf(\"{\\n\")" << endl; code << "$value .= sprintf(\"\\\"uptime\\\": \\\"%02d:%02d:%02d\\\",\\n\", hrs, mins, secs)" << endl; code << "$value .= sprintf(\"\\\"uid\\\": \\\"%d\\\",\\n\", uid())" << endl; code << "$value .= sprintf(\"\\\"memory\\\": \\\"%s\\\",\\n\", module_size())" << endl; code << "$value .= sprintf(\"\\\"module_name\\\": \\\"%s\\\",\\n\", module_name())" << endl; code << "$value .= sprintf(\"\\\"globals\\\": {\\n\")" << endl; for (auto it = s.globals.cbegin(); it != s.globals.cend(); ++it) { if ((*it)->synthetic) continue; if (it != s.globals.cbegin()) code << "$value .= sprintf(\",\\n\")" << endl; code << "$value .= sprintf(\"\\\"%s\\\":\", \"" << (*it)->unmangled_name << "\")" << endl; if ((*it)->arity == 0) { if ((*it)->type == pe_stats) code << "$value .= sprintf(\"\\\"%d(count)\\\"\", @count(" << (*it)->name << "))" << endl; else if ((*it)->type == pe_string) code << "$value .= string_quoted(sprintf(\"\\\"%s\\\"\"," << (*it)->name << "))" << endl; else code << "$value .= string_quoted(sprint(" << (*it)->name << "))" << endl; } else if ((*it)->arity > 0) code << "$value .= sprintf(\"\\\"[%d]\\\"\", " << (*it)->maxsize << ")" << endl; } code << "$value .= sprintf(\"\\n},\\n\")" << endl; code << "$value .= sprintf(\"\\\"probe_list\\\": [\\n\")" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { if ((*it)->synthetic) continue; if (it != s.probes.cbegin()) code << "$value .= sprintf(\",\\n\")" << endl; istringstream probe_point((*it)->sole_location()->str()); string name; probe_point >> name; /* Escape quotes once for systemtap parser and once more for json parser */ name = lex_cast_qstring(lex_cast_qstring(name)); code << "$value .= sprintf(\"{%s\", __private___monitor_data_function_probes(" << it-s.probes.begin() << "))" << endl; code << "$value .= sprintf(\"\\\"name\\\": %s}\", " << name << ")" << endl; } code << "$value .= sprintf(\"\\n],\\n\")" << endl; code << "$value .= sprintf(\"}\\n\")" << endl; code << "} catch(ex) { warn(\"JSON construction error: \" . ex) }" << endl; code << "}" << endl; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create procfs probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); // Resolve types for variables used in the new procfs probe semantic_pass_types(s); } static void monitor_mode_write(systemtap_session& s) { if (!s.monitor) return; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { vardecl* v = new vardecl; v->unmangled_name = v->name = "__monitor_" + lex_cast(it-s.probes.begin()) + "_enabled"; v->tok = (*it)->tok; v->set_arity(0, (*it)->tok); v->type = pe_long; v->init = new literal_number(1); v->synthetic = true; s.globals.push_back(v); symbol* sym = new symbol; sym->name = v->name; sym->tok = v->tok; sym->type = pe_long; sym->referent = v; if ((*it)->sole_location()->condition) { logical_and_expr *e = new logical_and_expr; e->tok = v->tok; e->left = sym; e->op = "&&"; e->type = pe_long; e->right = (*it)->sole_location()->condition; (*it)->sole_location()->condition = e; } else { (*it)->sole_location()->condition = sym; } } stringstream code; code << "probe procfs(\"monitor_control\").write {" << endl; code << "if ($value == \"clear\") {"; for (auto it = s.globals.cbegin(); it != s.globals.cend(); ++it) { vardecl* v = *it; if (v->synthetic) continue; if (v->arity == 0 && v->init) { if (v->type == pe_long) { literal_number* ln = dynamic_cast(v->init); if (ln == 0) throw SEMANTIC_ERROR (_("expected literal number"), 0); code << v->name << " = " << ln->value << endl; } else if (v->type == pe_string) { literal_string* ln = dynamic_cast(v->init); if (ln == 0) throw SEMANTIC_ERROR (_("expected literal string"), 0); code << v->name << " = " << lex_cast_qstring(ln->value) << endl; } } else { // For scalar elements with no initial values, we reset to 0 or empty as // done with arrays and aggregates. code << "delete " << v->name << endl; } } code << "} else if ($value == \"resume\") {" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " __monitor_" << it-s.probes.begin() << "_enabled" << " = 1" << endl; } code << "} else if ($value == \"pause\") {" << endl; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " __monitor_" << it-s.probes.begin() << "_enabled" << " = 0" << endl; } code << "} else if ($value == \"quit\") {" << endl; code << " exit()" << endl; code << "}"; for (auto it = s.probes.cbegin(); it != s.probes.cend(); ++it) { code << " if ($value == \"" << it-s.probes.begin() << "\")" << " __monitor_" << it-s.probes.begin() << "_enabled" << " ^= 1" << endl; } code << "}" << endl; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create procfs probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s, /* omniscient-unmangled */ true); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } static void setup_timeout(systemtap_session& s) { if (!s.timeout) return; stringstream code; code << "probe timer.ms(" << s.timeout << ") {exit()}"; probe* p = parse_synthetic_probe(s, code, 0); if (!p) throw SEMANTIC_ERROR (_("can't create timer probe"), 0); vector dps; derive_probes (s, p, dps); derived_probe* dp = dps[0]; s.probes.push_back (dp); dp->join_group (s); // Repopulate symbol info symresolution_info sym (s); sym.current_function = 0; sym.current_probe = dp; dp->body->visit (&sym); } int semantic_pass (systemtap_session& s) { int rc = 0; try { // FIXME: interactive mode, register_library_aliases handles // both aliases from library files *and* user scripts. It would // be nice to have them in separate lists and register them // separately. s.register_library_aliases(); register_standard_tapsets(s); if (rc == 0) setup_timeout(s); if (rc == 0) rc = semantic_pass_symbols (s); if (rc == 0) monitor_mode_write (s); if (rc == 0) rc = semantic_pass_conditions (s); if (rc == 0) rc = semantic_pass_optimize1 (s); if (rc == 0) rc = semantic_pass_types (s); if (rc == 0) rc = gen_dfa_table(s); if (rc == 0) add_global_var_display (s); if (rc == 0) monitor_mode_read(s); if (rc == 0) rc = semantic_pass_optimize2 (s); if (rc == 0) rc = semantic_pass_vars (s); if (rc == 0) rc = semantic_pass_stats (s); if (rc == 0) embeddedcode_info_pass (s); } catch (const semantic_error& e) { s.print_error (e); rc ++; } // BZ1795159: don't count out "synthetic" probes any more, we have plenty bool no_primary_probes = s.probes.size() == 0; if (s.num_errors() == 0 && no_primary_probes && !s.dump_mode) { s.print_error(SEMANTIC_ERROR(_("no probes found"))); rc ++; } build_no_more (s); // PR11443 // NB: listing mode only cares whether we have any probes, // so all previous error conditions are disregarded. if (s.dump_mode == systemtap_session::dump_matched_probes || s.dump_mode == systemtap_session::dump_matched_probes_vars) rc = no_primary_probes; // If we're dumping functions, only error out if no functions were found if (s.dump_mode == systemtap_session::dump_functions) rc = s.functions.empty(); return rc; } // ------------------------------------------------------------------------ // semantic processing: symbol resolution symresolution_info::symresolution_info (systemtap_session& s, bool omniscient_unmangled): session (s), unmangled_p(omniscient_unmangled), current_function (0), current_probe (0) { saved_session_symbol_resolver = s.symbol_resolver; s.symbol_resolver = this; // save resolver for early PR25841 function resolution } symresolution_info::~symresolution_info() { session.symbol_resolver = saved_session_symbol_resolver; } void symresolution_info::visit_block (block* e) { for (unsigned i=0; istatements.size(); i++) { try { e->statements[i]->visit (this); } catch (const semantic_error& e) { session.print_error (e); } } } void symresolution_info::visit_foreach_loop (foreach_loop* e) { for (unsigned i=0; iindexes.size(); i++) e->indexes[i]->visit (this); for (unsigned i=0; iarray_slice.size(); i++) if (e->array_slice[i]) e->array_slice[i]->visit(this); symbol *array = NULL; hist_op *hist = NULL; classify_indexable (e->base, array, hist); if (array) { if (!array->referent) { vardecl* d = find_var (array->name, e->indexes.size (), array->tok); if (d) { array->referent = d; array->name = d->name; } else { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->indexes.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), array->tok); } } if (!e->array_slice.empty() && e->array_slice.size() != e->indexes.size()) { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->array_slice.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), array->tok); } } else { assert (hist); hist->visit (this); } if (e->value) e->value->visit (this); if (e->limit) e->limit->visit (this); e->block->visit (this); } struct delete_statement_symresolution_info: public traversing_visitor { symresolution_info *parent; delete_statement_symresolution_info (symresolution_info *p): parent(p) {} void visit_arrayindex (arrayindex* e) { parent->visit_arrayindex(e, true); } void visit_functioncall (functioncall* e) { parent->visit_functioncall (e); } void visit_symbol (symbol* e) { if (e->referent) return; vardecl* d = parent->find_var (e->name, -1, e->tok); if (d) e->referent = d; else throw SEMANTIC_ERROR (_("unresolved array in delete statement"), e->tok); } }; void symresolution_info::visit_delete_statement (delete_statement* s) { delete_statement_symresolution_info di (this); s->value->visit (&di); } void symresolution_info::visit_symbol (symbol* e) { if (e->referent) return; vardecl* d = find_var (e->name, 0, e->tok); if (d) { e->referent = d; e->name = d->name; } else { // new local vardecl* v = new vardecl; v->unmangled_name = v->name = e->name; v->tok = e->tok; v->set_arity(0, e->tok); if (current_function) current_function->locals.push_back (v); else if (current_probe) current_probe->locals.push_back (v); else // must be probe-condition expression throw SEMANTIC_ERROR (_("probe condition must not reference undeclared global"), e->tok); e->referent = v; } } void symresolution_info::visit_arrayindex (arrayindex* e) { visit_arrayindex(e, false); } void symresolution_info::visit_arrayindex (arrayindex* e, bool wildcard_ok) { for (unsigned i=0; iindexes.size(); i++) { // assuming that if NULL, it was originally a wildcard (*) if (e->indexes[i] == NULL) { if (!wildcard_ok) throw SEMANTIC_ERROR(_("wildcard not allowed in array index"), e->tok); } else e->indexes[i]->visit (this); } symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); if (array) { if (array->referent) return; vardecl* d = find_var (array->name, e->indexes.size (), array->tok); if (d) { array->referent = d; array->name = d->name; } else { stringstream msg; msg << _F("unresolved arity-%zu global array %s, missing global declaration?", e->indexes.size(), array->name.to_string().c_str()); throw SEMANTIC_ERROR (msg.str(), e->tok); } } else { assert (hist); hist->visit (this); } } void symresolution_info::visit_array_in (array_in* e) { visit_arrayindex(e->operand, true); } void symresolution_info::visit_embeddedcode (embeddedcode* s) { // PR24239: must generate find_var references to globals // that are marked by pragma:{read|write}:var if (s->code_referents == s->code) return; // already analyzed size_t pos = 0; while (1) { pos = s->code.find("/* pragma:read:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:read:"); auto pos2 = s->code.find(" */", pos); if (pos2 == string::npos) break; auto var = s->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,s->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:read global %s", ((string)var).c_str()), s->tok); s->read_referents.push_back(vd); pos = pos2+3; } // repeat for write pos = 0; while (1) { pos = s->code.find("/* pragma:write:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:write:"); auto pos2 = s->code.find(" */", pos); if (pos2 == string::npos) break; auto var = s->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,s->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:write global %s", ((string)var).c_str()), s->tok); s->write_referents.push_back(vd); pos = pos2+3; } s->code_referents = s->code; // flag this object as not needing resolution again // NB: why not a bool? sure, could do that, but this way we can detect subsequent // changes to the code object, and be ready to recompute. It's at least harmless. } void symresolution_info::visit_embedded_expr (embedded_expr *e) { // PR24239: must generate find_var references to globals // that are marked by pragma:{read|write}:var if (e->code_referents == e->code) return; // already analyzed size_t pos = 0; while (1) { pos = e->code.find("/* pragma:read:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:read:"); auto pos2 = e->code.find(" */", pos); if (pos2 == string::npos) break; auto var = e->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,e->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:read global %s", ((string)var).c_str()), e->tok); e->read_referents.push_back(vd); pos = pos2+3; } // repeat for write pos = 0; while (1) { pos = e->code.find("/* pragma:write:", pos); if (pos == string::npos) break; pos += strlen("/* pragma:write:"); auto pos2 = e->code.find(" */", pos); if (pos2 == string::npos) break; auto var = e->code.substr(pos, pos2-pos); auto vd = find_var(var,-1,e->tok); if (vd == 0) throw SEMANTIC_ERROR (_F("unresolved pragma:write global %s", ((string)var).c_str()), e->tok); e->write_referents.push_back(vd); pos = pos2+3; } e->code_referents = e->code; // flag this object as not needing resolution again // NB: why not a bool? sure, could do that, but this way we can detect subsequent // changes to the code object, and be ready to recompute. It's at least harmless. } void symresolution_info::visit_functioncall (functioncall* e) { // XXX: we could relax this, if we're going to examine the // vartracking data recursively. See testsuite/semko/fortytwo.stp. if (! (current_function || current_probe)) { // must be probe-condition expression throw SEMANTIC_ERROR (_("probe condition must not reference function"), e->tok); } for (unsigned i=0; iargs.size(); i++) e->args[i]->visit (this); // already resolved? if (!e->referents.empty()) { #if 0 // PR25841: we could hypothetically traverse through function // calls here, but don't need to, since semantic_pass_symbols() // will iterate over s.functions[] anyway. Plus we'd have to // put in infinite recursion limits. for (auto i : e->referents) { save_and_restore(& this->current_function, i); i->body->visit (this); } #endif return; } vector fds = find_functions (e, e->function, e->args.size (), e->tok); if (!fds.empty()) { e->referents = fds; function_priority_order order; stable_sort(e->referents.begin(), e->referents.end(), order); // preserve declaration order e->function = e->referents[0]->name; } else { string sugs = levenshtein_suggest(e->function, collect_functions(), 5); // print 5 funcs throw SEMANTIC_ERROR(_F("unresolved function %s%s", string(e->function).c_str(), sugs.empty() ? "" : (_(" (similar: ") + sugs + ")").c_str()), e->tok); } // In monitor mode, tapset functions used in the synthetic probe are not resolved and added // to the primary list at the same time as the other functions so we must add them here to // allow the translator to generate the functions in the module. if (session.monitor && session.functions.find(e->function) == session.functions.end()) session.functions[e->function] = fds[0]; // no overload } /* find_var will return an argument other than zero if the name matches the var * name ie, if the current local name matches the name passed to find_var. * arity=-1 means any. */ vardecl* symresolution_info::find_var (const string& name, int arity, const token* tok) { if (current_function || current_probe) { // search locals vector& locals = (current_function ? current_function->locals : current_probe->locals); for (unsigned i=0; iname == name) { if (session.verbose > 2) cerr << _F(" local %s is already defined", name.c_str()) << endl; locals[i]->set_arity (arity, tok); return locals[i]; } } // search function formal parameters (for scalars) if (arity == 0 && current_function) for (unsigned i=0; iformal_args.size(); i++) if (current_function->formal_args[i]->name == name) { // NB: no need to check arity here: formal args always scalar if (session.verbose > 2) cerr << _F(" local %s is formal parameter", name.c_str()) << endl; current_function->formal_args[i]->set_arity (0, tok); return current_function->formal_args[i]; } // search processed globals string gname, pname; if (unmangled_p) { gname = pname = string(name); } else { gname = "__global_" + string(name); pname = "__private_" + detox_path(tok->location.file->name) + string(name); } for (unsigned i=0; iname == name && startswith(name, "__global_")) || (session.globals[i]->name == gname) || (session.globals[i]->name == pname)) { if (session.verbose > 2) cerr << _F(" global %s is already defined", name.c_str()) << endl; if (! session.suppress_warnings) { vardecl* v = session.globals[i]; stapfile* f = tok->location.file; if (!session.is_user_file(f->name) && v->tok && v->tok->location.file != f && !f->synthetic && session.is_user_file(v->tok->location.file->name)) { session.print_warning (_F("cross-file global variable reference to %s from", lex_cast(*v->tok).c_str()), tok); } } session.globals[i]->set_arity (arity, tok); return session.globals[i]; } } // search chosen-tapset globals for (unsigned i=0; iglobals.size(); j++) { vardecl* g = f->globals[j]; if ((g->name == gname) || (g->name == pname)) // private global within tapset probe alias { if (session.verbose > 2) cerr << _F(" global %s is defined in chosen-tapset-file %s", name.c_str(), f->name.c_str()) << endl; g->set_arity (arity, tok); session.globals.push_back (g); return g; } } } // search not-yet-chosen library globals for (unsigned i=0; iglobals.size(); j++) { vardecl* g = f->globals[j]; if ((g->name == gname) || (g->name == pname)) // private global within tapset probe alias { if (session.verbose > 2) cerr << _F(" global %s is defined in new-tapset-file %s", name.c_str(), f->name.c_str()) << endl; g->set_arity (arity, tok); assert (find (session.files.begin(), session.files.end(), f) == session.files.end()); session.files.push_back (f); session.globals.push_back (g); return g; } } } return 0; } class functioncall_security_check: public traversing_visitor { systemtap_session& session; functioncall* call; functiondecl* current_function; public: functioncall_security_check(systemtap_session&s, functioncall* c): session(s),call(c) {} void traverse (functiondecl* d) { current_function = d; current_function->body->visit(this); } void visit_embeddedcode (embeddedcode *s) { // Don't allow embedded C functions in unprivileged mode unless // they are tagged with /* unprivileged */ or /* myproc-unprivileged */ // or we're in a usermode runtime. if (! pr_contains (session.privilege, pr_stapdev) && ! pr_contains (session.privilege, pr_stapsys) && ! session.runtime_usermode_p () && ! s->tagged_p ("/* unprivileged */") && ! s->tagged_p ("/* myproc-unprivileged */")) throw SEMANTIC_ERROR (_F("function may not be used when --privilege=%s is specified", pr_name (session.privilege)), current_function->tok); // Allow only /* bpf */ functions in bpf mode. if ((session.runtime_mode == systemtap_session::bpf_runtime) != (s->tagged_p ("/* bpf */"))) { if (session.runtime_mode == systemtap_session::bpf_runtime) throw SEMANTIC_ERROR (_("function may not be used with bpf runtime"), current_function->tok); else throw SEMANTIC_ERROR (_("function requires bpf runtime"), current_function->tok); } // Don't allow /* guru */ functions unless caller is privileged. if (!call->synthetic && !call->tok->location.file->privileged && s->tagged_p ("/* guru */")) throw SEMANTIC_ERROR (_("function may not be used unless -g is specified"), call->tok); } }; vector symresolution_info::find_functions (functioncall *call, const string& name, unsigned arity, const token *tok) { vector functions; functiondecl* last = 0; // used for error message // the common path // internal global functions bypassing the parser, such as __global_dwarf_tvar_[gs]et if ((session.functions.find(name) != session.functions.end()) && startswith(name, "__private_")) { functiondecl* fd = session.functions[name]; assert (fd->name == name); if (fd->formal_args.size() == arity) functions.push_back(fd); else last = fd; } // functions scanned by the parser are overloaded unsigned alternatives = session.overload_count[name]; for (unsigned alt = 0; alt < alternatives; alt++) { bool found = false; // multiple inclusion guard string gname = "__global_" + string(name) + "__overload_" + lex_cast(alt); string pname = "__private_" + detox_path(tok->location.file->name) + string(name) + "__overload_" + lex_cast(alt); // tapset or user script global functions coming from the parser if (!found && session.functions.find(gname) != session.functions.end()) { functiondecl* fd = session.functions[gname]; assert (fd->name == gname); if (fd->formal_args.size() == arity) { functions.push_back(fd); found = true; } else last = fd; } // tapset or user script private functions coming from the parser if (!found && session.functions.find(pname) != session.functions.end()) { functiondecl* fd = session.functions[pname]; assert (fd->name == pname); if (fd->formal_args.size() == arity) { functions.push_back(fd); found = true; } else last = fd; } // search chosen-tapset-file functions for (unsigned i=0; !found && ifunctions.size(); j++) { if ((f->functions[j]->name == gname) || (f->functions[j]->name == pname)) { if (f->functions[j]->formal_args.size() == arity) { // put library into the queue if not already there if (session.verbose > 2) cerr << _F(" function %s is defined in chosen-tapset-file %s", name.c_str(), f->name.c_str()) << endl; functions.push_back(f->functions[j]); found = true; } else last = f->functions[j]; } } } // search not-yet-chosen library functions for (unsigned i=0; !found && ifunctions.size(); j++) { if ((f->functions[j]->name == gname) || (f->functions[j]->name == pname)) { if (f->functions[j]->formal_args.size() == arity) { // put library into the queue if not already there if (session.verbose > 2) cerr << _F(" function %s is defined in new-tapset-file %s", name.c_str(), f->name.c_str()) << endl; assert (find (session.files.begin(), session.files.end(), f) == session.files.end()); session.files.push_back (f); functions.push_back(f->functions[j]); found = true; } else last = f->functions[j]; } } } } // suggest last found function with matching name if (last && functions.empty()) { throw SEMANTIC_ERROR(_F("arity mismatch found (function '%s' takes %zu args)", name.c_str(), last->formal_args.size()), tok, last->tok); } // check every function for safety/security constraints functioncall_security_check fsc(session, call); for (auto gi = functions.begin(); gi != functions.end(); gi++) { fsc.traverse(*gi); // record this as a used function for later sym resolution functiondecl *f = *gi; const string& fname = f->name; functiondecl *f2 = session.functions[fname]; if (f2 && f != f2) session.print_error (SEMANTIC_ERROR (_("conflicting functions"), f->tok, f2->tok)); session.functions[fname] = f; } return functions; } set symresolution_info::collect_functions(void) { set funcs; for (map::const_iterator it = session.functions.begin(); it != session.functions.end(); ++it) funcs.insert(it->second->unmangled_name); // search library functions for (unsigned i=0; ifunctions.size(); j++) if (! f->functions[j]->name.starts_with("__private_")) funcs.insert(f->functions[j]->unmangled_name); } return funcs; } // ------------------------------------------------------------------------ // optimization // Do away with functiondecls that are never (transitively) called // from probes. // // PR24239: this will generally not trigger, since we avoid adding // uncalled functions to s.functions[]. void semantic_pass_opt1 (systemtap_session& s, bool& relaxed_p) { functioncall_traversing_visitor ftv; for (unsigned i=0; ibody->visit (& ftv); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& ftv); } vector new_unused_functions; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl* fd = it->second; if (ftv.seen.find(fd) == ftv.seen.end()) { if (! fd->synthetic && !fd->cloned_p && s.is_user_file(fd->tok->location.file->name)) s.print_warning (_F("Eliding unused function '%s'", fd->unmangled_name.to_string().c_str()), fd->tok); // s.functions.erase (it); // NB: can't, since we're already iterating upon it new_unused_functions.push_back (fd); relaxed_p = false; } } for (unsigned i=0; i::iterator where = s.functions.find (new_unused_functions[i]->name); assert (where != s.functions.end()); s.functions.erase (where); if (s.tapset_compile_coverage) s.unused_functions.push_back (new_unused_functions[i]); } } // ------------------------------------------------------------------------ // Do away with local & global variables that are never // written nor read. void semantic_pass_opt2 (systemtap_session& s, bool& relaxed_p, unsigned iterations) { varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); if (s.probes[i]->sole_location()->condition) s.probes[i]->sole_location()->condition->visit (& vut); } // NB: Since varuse_collecting_visitor also traverses down // actually called functions, we don't need to explicitly // iterate over them. Uncalled ones should have been pruned // in _opt1 above. // // for (unsigned i=0; ibody->visit (& vut); // Now in vut.read/written, we have a mixture of all locals, globals for (unsigned i=0; ilocals.size(); /* see below */) { vardecl* l = s.probes[i]->locals[j]; // skip over "special" locals if (l->synthetic) { j++; continue; } if (vut.read.find (l) == vut.read.end() && vut.written.find (l) == vut.written.end()) { if (!l->tok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { s.probes[i]->unused_locals.push_back (s.probes[i]->locals[j]); } s.probes[i]->locals.erase(s.probes[i]->locals.begin() + j); relaxed_p = false; // don't increment j } else { if (vut.written.find (l) == vut.written.end()) if (iterations == 0 && ! s.suppress_warnings) { set vars; // like collect_functions() vector::iterator it; for (it = s.probes[i]->locals.begin(); it != s.probes[i]->locals.end(); it++) vars.insert((*it)->unmangled_name); for (it = s.globals.begin(); it != s.globals.end(); it++) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); vars.erase(l->name); string sugs = levenshtein_suggest(l->name, vars, 5); // suggest top 5 vars s.print_warning (_F("never-assigned local variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } j++; } } for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl *fd = it->second; for (unsigned j=0; jlocals.size(); /* see below */) { vardecl* l = fd->locals[j]; if (vut.read.find (l) == vut.read.end() && vut.written.find (l) == vut.written.end()) { if (!l->tok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { fd->unused_locals.push_back (fd->locals[j]); } fd->locals.erase(fd->locals.begin() + j); relaxed_p = false; // don't increment j } else { if (vut.written.find (l) == vut.written.end()) if (iterations == 0 && ! s.suppress_warnings) { set vars; vector::iterator it; for (it = fd->formal_args.begin() ; it != fd->formal_args.end(); it++) vars.insert((*it)->unmangled_name); for (it = fd->locals.begin(); it != fd->locals.end(); it++) vars.insert((*it)->unmangled_name); for (it = s.globals.begin(); it != s.globals.end(); it++) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); vars.erase(l->name); string sugs = levenshtein_suggest(l->name, vars, 5); // suggest top 5 vars s.print_warning (_F("never-assigned local variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } j++; } } } for (unsigned i=0; itok->location.file->synthetic && s.is_user_file(l->tok->location.file->name)) s.print_warning (_F("Eliding unused variable '%s'", l->unmangled_name.to_string().c_str()), l->tok); if (s.tapset_compile_coverage) { s.unused_globals.push_back(s.globals[i]); } s.globals.erase(s.globals.begin() + i); relaxed_p = false; // don't increment i } else { if (vut.written.find (l) == vut.written.end() && ! l->init) // no initializer if (iterations == 0 && ! s.suppress_warnings) { // check if it was initialized on the command line via // a '-G' option bool init_by_gopt = false; string init_prefix (l->unmangled_name.to_string() + "="); for (auto gi = s.globalopts.begin(); gi != s.globalopts.end(); gi++) if (! gi->compare(0, init_prefix.size(), init_prefix)) { init_by_gopt = true; break; } if (! init_by_gopt) { set vars; for (auto it = s.globals.begin(); it != s.globals.end(); it++) if (l->name != (*it)->unmangled_name) if (! (*it)->unmangled_name.starts_with("__private_")) vars.insert((*it)->unmangled_name); // suggest top 5 vars string sugs = levenshtein_suggest(l->name, vars, 5); s.print_warning (_F("never-assigned global variable '%s'%s", l->unmangled_name.to_string().c_str(), (sugs.empty() ? "" : (_(" (similar: ") + sugs + ")")).c_str()), l->tok); } } i++; } } } // ------------------------------------------------------------------------ struct dead_assignment_remover: public update_visitor { systemtap_session& session; bool& relaxed_p; const varuse_collecting_visitor& vut; dead_assignment_remover(systemtap_session& s, bool& r, const varuse_collecting_visitor& v): update_visitor(s.verbose), session(s), relaxed_p(r), vut(v) {} void visit_assignment (assignment* e); void visit_try_block (try_block *s); }; // symbol_fetcher augmented to allow target-symbol types, but NULLed. struct assignment_symbol_fetcher : public symbol_fetcher { const token* assignment_t; assignment_symbol_fetcher (symbol *&sym, const token* a_t): symbol_fetcher(sym), assignment_t(a_t) {} void visit_target_symbol (target_symbol*) { sym = NULL; } void visit_atvar_op (atvar_op*) { sym = NULL; } void visit_cast_op (cast_op*) { sym = NULL; } void visit_autocast_op (autocast_op*) { sym = NULL; } void visit_target_deref (target_deref*) { sym = NULL; } void visit_target_register (target_register*) { sym = NULL; } void throwone (const token* t) { if (t->type == tok_operator && t->content == ".") // guess someone misused . in $foo->bar.baz expression // XXX why are we only checking this in lvalues? throw SEMANTIC_ERROR (_("Expecting lvalue for assignment, try -> instead"), assignment_t, t); else throw SEMANTIC_ERROR (_("Expecting lvalue for assignment"), assignment_t, t); } }; symbol * get_assignment_symbol_within_expression (expression *e, const token *a_t) { symbol *sym = NULL; assignment_symbol_fetcher fetcher(sym, a_t); e->visit (&fetcher); return sym; // NB: may be null! } void dead_assignment_remover::visit_assignment (assignment* e) { replace (e->left); replace (e->right); symbol* left = get_assignment_symbol_within_expression (e->left, e->tok); if (left) // not unresolved $target, so intended sideeffect may be elided { vardecl* leftvar = left->referent; if (vut.read.find(leftvar) == vut.read.end()) // var never read? { // NB: Not so fast! The left side could be an array whose // index expressions may have side-effects. This would be // OK if we could replace the array assignment with a // statement-expression containing all the index expressions // and the rvalue... but we can't. // Another possibility is that we have an unread global variable // which are kept for probe end value display. bool is_global = false; vector::iterator it; for (it = session.globals.begin(); it != session.globals.end(); it++) if (leftvar->name == (*it)->name) { is_global = true; break; } varuse_collecting_visitor lvut(session); e->left->visit (& lvut); if (lvut.side_effect_free () && !is_global // XXX: use _wrt() once we track focal_vars && !leftvar->synthetic) // don't elide assignment to synthetic $context variables { /* PR 1119: NB: This is not necessary here. A write-only variable will also be elided soon at the next _opt2 iteration. if (e->left->tok->location.file->name == session.user_file->name) // !tapset session.print_warning("eliding write-only ", *e->left->tok); else */ if (!e->left->tok->location.file->synthetic && session.is_user_file(e->left->tok->location.file->name)) session.print_warning(_F("Eliding assignment to '%s'", leftvar->unmangled_name.to_string().c_str()), e->tok); provide (e->right); // goodbye assignment* relaxed_p = false; return; } } } provide (e); } void dead_assignment_remover::visit_try_block (try_block *s) { replace (s->try_block); if (s->catch_error_var) { vardecl* errvar = s->catch_error_var->referent; if (vut.read.find(errvar) == vut.read.end()) // never read? { if (session.verbose>2) clog << _F("Eliding unused error string catcher %s at %s", errvar->unmangled_name.to_string().c_str(), lex_cast(*s->tok).c_str()) << endl; s->catch_error_var = 0; } } replace (s->catch_block); provide (s); } // Let's remove assignments to variables that are never read. We // rewrite "(foo = expr)" as "(expr)". This makes foo a candidate to // be optimized away as an unused variable, and expr a candidate to be // removed as a side-effect-free statement expression. Wahoo! void semantic_pass_opt3 (systemtap_session& s, bool& relaxed_p) { // Recompute the varuse data, which will probably match the opt2 // copy of the computation, except for those totally unused // variables that opt2 removed. varuse_collecting_visitor vut(s); for (unsigned i=0; ibody->visit (& vut); // includes reachable functions too dead_assignment_remover dar (s, relaxed_p, vut); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) dar.replace (it->second->body); // The rewrite operation is performed within the visitor. // XXX: we could also zap write-only globals here } // ------------------------------------------------------------------------ struct dead_stmtexpr_remover: public update_visitor { systemtap_session& session; bool& relaxed_p; set focal_vars; // vars considered subject to side-effects dead_stmtexpr_remover(systemtap_session& s, bool& r): update_visitor(s.verbose), session(s), relaxed_p(r) {} void visit_block (block *s); void visit_try_block (try_block *s); void visit_null_statement (null_statement *s); void visit_if_statement (if_statement* s); void visit_foreach_loop (foreach_loop *s); void visit_for_loop (for_loop *s); // XXX: and other places where stmt_expr's might be nested void visit_expr_statement (expr_statement *s); }; void dead_stmtexpr_remover::visit_null_statement (null_statement *s) { // easy! if (session.verbose>2) clog << _("Eliding side-effect-free null statement ") << *s->tok << endl; s = 0; provide (s); } void dead_stmtexpr_remover::visit_block (block *s) { vector new_stmts; for (unsigned i=0; istatements.size(); i++ ) { statement* new_stmt = require (s->statements[i], true); if (new_stmt != 0) { // flatten nested blocks into this one block *b = dynamic_cast(new_stmt); if (b) { if (session.verbose>2) clog << _("Flattening nested block ") << *b->tok << endl; new_stmts.insert(new_stmts.end(), b->statements.begin(), b->statements.end()); relaxed_p = false; } else new_stmts.push_back (new_stmt); } } if (new_stmts.size() == 0) { if (session.verbose>2) clog << _("Eliding side-effect-free empty block ") << *s->tok << endl; s = 0; } else if (new_stmts.size() == 1) { if (session.verbose>2) clog << _("Eliding side-effect-free singleton block ") << *s->tok << endl; provide (new_stmts[0]); return; } else s->statements = new_stmts; provide (s); } void dead_stmtexpr_remover::visit_try_block (try_block *s) { replace (s->try_block, true); replace (s->catch_block, true); // null catch{} is ok and useful if (s->try_block == 0) { if (session.verbose>2) clog << _("Eliding empty try {} block ") << *s->tok << endl; s = 0; } provide (s); } void dead_stmtexpr_remover::visit_if_statement (if_statement *s) { replace (s->thenblock, true); replace (s->elseblock, true); if (s->thenblock == 0) { if (s->elseblock == 0) { // We may be able to elide this statement, if the condition // expression is side-effect-free. varuse_collecting_visitor vct(session); s->condition->visit(& vct); if (vct.side_effect_free ()) { if (session.verbose>2) clog << _("Eliding side-effect-free if statement ") << *s->tok << endl; s = 0; // yeah, baby } else { // We can still turn it into a simple expr_statement though... if (session.verbose>2) clog << _("Creating simple evaluation from if statement ") << *s->tok << endl; expr_statement *es = new expr_statement; es->value = s->condition; es->tok = es->value->tok; provide (es); return; } } else { // For an else without a then, we can invert the condition logic to // avoid having a null statement in the thenblock if (session.verbose>2) clog << _("Inverting the condition of if statement ") << *s->tok << endl; unary_expression *ue = new unary_expression; ue->operand = s->condition; ue->tok = ue->operand->tok; ue->op = "!"; s->condition = ue; s->thenblock = s->elseblock; s->elseblock = 0; } } provide (s); } void dead_stmtexpr_remover::visit_foreach_loop (foreach_loop *s) { replace (s->block, true); if (s->block == 0) { // XXX what if s->limit has side effects? // XXX what about s->indexes or s->value used outside the loop? if(session.verbose > 2) clog << _("Eliding side-effect-free foreach statement ") << *s->tok << endl; s = 0; // yeah, baby } provide (s); } void dead_stmtexpr_remover::visit_for_loop (for_loop *s) { replace (s->block, true); if (s->block == 0) { // We may be able to elide this statement, if the condition // expression is side-effect-free. varuse_collecting_visitor vct(session); if (s->init) s->init->visit(& vct); s->cond->visit(& vct); if (s->incr) s->incr->visit(& vct); if (vct.side_effect_free ()) { if (session.verbose>2) clog << _("Eliding side-effect-free for statement ") << *s->tok << endl; s = 0; // yeah, baby } else { // Can't elide this whole statement; put a null in there. s->block = new null_statement(s->tok); } } provide (s); } void dead_stmtexpr_remover::visit_expr_statement (expr_statement *s) { // Run a varuse query against the operand expression. If it has no // side-effects, replace the entire statement expression by a null // statement with the provide() call. // // Unlike many other visitors, we do *not* traverse this outermost // one into the expression subtrees. There is no need - no // expr_statement nodes will be found there. (Function bodies // need to be visited explicitly by our caller.) // // NB. While we don't share nodes in the parse tree, let's not // deallocate *s anyway, just in case... varuse_collecting_visitor vut(session); s->value->visit (& vut); if (vut.side_effect_free_wrt (focal_vars)) { /* PR 1119: NB: this message is not a good idea here. It can name some arbitrary RHS expression of an assignment. if (s->value->tok->location.file->name == session.user_file->name) // not tapset session.print_warning("eliding never-assigned ", *s->value->tok); else */ if (!s->value->tok->location.file->synthetic && session.is_user_file(s->value->tok->location.file->name)) session.print_warning("Eliding side-effect-free expression ", s->tok); // NB: this 0 pointer is invalid to leave around for any length of // time, but the parent parse tree objects above handle it. s = 0; relaxed_p = false; } provide (s); } void semantic_pass_opt4 (systemtap_session& s, bool& relaxed_p) { // Finally, let's remove some statement-expressions that have no // side-effect. These should be exactly those whose private varuse // visitors come back with an empty "written" and "embedded" lists. dead_stmtexpr_remover duv (s, relaxed_p); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ilocals.begin(), p->locals.end()); duv.replace (p->body, true); if (p->body == 0) { p->body = new null_statement(p->tok); s.empty_probes.insert(p); } } for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fn = it->second; duv.focal_vars.clear (); duv.focal_vars.insert (fn->locals.begin(), fn->locals.end()); duv.focal_vars.insert (fn->formal_args.begin(), fn->formal_args.end()); duv.focal_vars.insert (s.globals.begin(), s.globals.end()); duv.replace (fn->body, true); if (fn->body == 0) { s.print_warning (_F("side-effect-free function '%s'", fn->unmangled_name.to_string().c_str()), fn->tok); fn->body = new null_statement(fn->tok); // XXX: the next iteration of the outer optimization loop may // take this new null_statement away again, and thus give us a // fresh warning. It would be better if this fixup was performed // only after the relaxation iterations. // XXX: or else see bug #6469. } } } // ------------------------------------------------------------------------ // The goal of this visitor is to reduce top-level expressions in void context // into separate statements that evaluate each subcomponent of the expression. // The dead-statement-remover can later remove some parts if they have no side // effects. // // All expressions must be overridden here so we never visit their subexpressions // accidentally. Thus, the only visited expressions should be value of an // expr_statement. // // For an expression to replace its expr_statement with something else, it will // let the new statement provide(), and then provide(0) for itself. The // expr_statement will take this as a sign that it's been replaced. struct void_statement_reducer: public update_visitor { systemtap_session& session; bool& relaxed_p; set focal_vars; // vars considered subject to side-effects void_statement_reducer(systemtap_session& s, bool& r): update_visitor(s.verbose), session(s), relaxed_p(r) {} void visit_expr_statement (expr_statement* s); // expressions in conditional / loop controls are definitely a side effect, // but still recurse into the child statements void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); // these expressions get rewritten into their statement equivalents void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_ternary_expression (ternary_expression* e); // all of these can (usually) be reduced into simpler statements void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_regex_query (regex_query* e); // XXX depends on subexpr extraction void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_functioncall (functioncall* e); void visit_print_format (print_format* e); void visit_target_symbol (target_symbol* e); void visit_atvar_op (atvar_op* e); void visit_cast_op (cast_op* e); void visit_autocast_op (autocast_op* e); void visit_defined_op (defined_op* e); // these are a bit hairy to grok due to the intricacies of indexables and // stats, so I'm chickening out and skipping them... void visit_array_in (array_in* e) { provide (e); } void visit_arrayindex (arrayindex* e) { provide (e); } void visit_stat_op (stat_op* e) { provide (e); } void visit_hist_op (hist_op* e) { provide (e); } // these can't be reduced because they always have an effect void visit_return_statement (return_statement* s) { provide (s); } void visit_delete_statement (delete_statement* s) { provide (s); } void visit_pre_crement (pre_crement* e) { provide (e); } void visit_post_crement (post_crement* e) { provide (e); } void visit_assignment (assignment* e) { provide (e); } private: void reduce_target_symbol (target_symbol* e, expression* operand=NULL); }; void void_statement_reducer::visit_expr_statement (expr_statement* s) { replace (s->value, true); // if the expression provides 0, that's our signal that a new // statement has been provided, so we shouldn't provide this one. if (s->value != 0) provide(s); } void void_statement_reducer::visit_if_statement (if_statement* s) { // s->condition is never void replace (s->thenblock); replace (s->elseblock); provide (s); } void void_statement_reducer::visit_for_loop (for_loop* s) { // s->init/cond/incr are never void replace (s->block); provide (s); } void void_statement_reducer::visit_foreach_loop (foreach_loop* s) { // s->indexes/base/value/limit are never void replace (s->block); provide (s); } void void_statement_reducer::visit_logical_or_expr (logical_or_expr* e) { // In void context, the evaluation of "a || b" is exactly like // "if (!a) b", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused logical-or ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->elseblock = 0; unary_expression *ue = new unary_expression; ue->operand = e->left; ue->tok = e->tok; ue->op = "!"; is->condition = ue; expr_statement *es = new expr_statement; es->value = e->right; es->tok = es->value->tok; is->thenblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_logical_and_expr (logical_and_expr* e) { // In void context, the evaluation of "a && b" is exactly like // "if (a) b", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused logical-and ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->elseblock = 0; is->condition = e->left; expr_statement *es = new expr_statement; es->value = e->right; es->tok = es->value->tok; is->thenblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_ternary_expression (ternary_expression* e) { // In void context, the evaluation of "a ? b : c" is exactly like // "if (a) b else c", so let's do that instead. if (session.verbose>2) clog << _("Creating if statement from unused ternary expression ") << *e->tok << endl; if_statement *is = new if_statement; is->tok = e->tok; is->condition = e->cond; expr_statement *es = new expr_statement; es->value = e->truevalue; es->tok = es->value->tok; is->thenblock = es; es = new expr_statement; es->value = e->falsevalue; es->tok = es->value->tok; is->elseblock = es; is->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_binary_expression (binary_expression* e) { // When the result of a binary operation isn't needed, it's just as good to // evaluate the operands as sequential statements in a block. if (session.verbose>2) clog << _("Eliding unused binary ") << *e->tok << endl; block *b = new block; b->tok = e->tok; expr_statement *es = new expr_statement; es->value = e->left; es->tok = es->value->tok; b->statements.push_back(es); es = new expr_statement; es->value = e->right; es->tok = es->value->tok; b->statements.push_back(es); b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_unary_expression (unary_expression* e) { // When the result of a unary operation isn't needed, it's just as good to // evaluate the operand directly if (session.verbose>2) clog << _("Eliding unused unary ") << *e->tok << endl; relaxed_p = false; e->operand->visit(this); } void void_statement_reducer::visit_regex_query (regex_query* e) { // TODOXXX After subexpression extraction is implemented, // regular expression matches *may* have side-effects in // terms of producing matched subexpressions, e.g.: // // str =~ "pat"; println(matched(0)); // // It's debatable if we want to actually allow this, though. // Treat e as a unary expression on the left operand -- since the // right hand side must be a literal (as verified by the parser), // evaluating it never has side effects. if (session.verbose>2) clog << _("Eliding regex query ") << *e->tok << endl; relaxed_p = false; e->left->visit(this); } void void_statement_reducer::visit_comparison (comparison* e) { visit_binary_expression(e); } void void_statement_reducer::visit_concatenation (concatenation* e) { visit_binary_expression(e); } void void_statement_reducer::visit_functioncall (functioncall* e) { // If a function call is pure and its result ignored, we can elide the call // and just evaluate the arguments in sequence if (e->args.empty()) { provide (e); return; } bool side_effect_free = true; for (unsigned i = 0; i < e->referents.size(); i++) { varuse_collecting_visitor vut(session); vut.seen.insert (e->referents[i]); vut.current_function = e->referents[i]; e->referents[i]->body->visit (& vut); if (!vut.side_effect_free_wrt(focal_vars)) { side_effect_free = false; break; } } if (!side_effect_free) { provide (e); return; } if (session.verbose>2) clog << _("Eliding side-effect-free function call ") << *e->tok << endl; block *b = new block; b->tok = e->tok; for (unsigned i=0; iargs.size(); i++ ) { expr_statement *es = new expr_statement; es->value = e->args[i]; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_print_format (print_format* e) { // When an sprint's return value is ignored, we can simply evaluate the // arguments in sequence if (e->print_to_stream || !e->args.size()) { provide (e); return; } if (session.verbose>2) clog << _("Eliding unused print ") << *e->tok << endl; block *b = new block; b->tok = e->tok; for (unsigned i=0; iargs.size(); i++ ) { expr_statement *es = new expr_statement; es->value = e->args[i]; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::reduce_target_symbol (target_symbol* e, expression* operand) { // When the result of any target_symbol isn't needed, it's just as good to // evaluate the operand and any array indexes directly block *b = new block; b->tok = e->tok; if (operand) { expr_statement *es = new expr_statement; es->value = operand; es->tok = es->value->tok; b->statements.push_back(es); } for (unsigned i=0; icomponents.size(); i++ ) { if (e->components[i].type != target_symbol::comp_expression_array_index) continue; expr_statement *es = new expr_statement; es->value = e->components[i].expr_index; es->tok = es->value->tok; b->statements.push_back(es); } b->visit(this); relaxed_p = false; e = 0; provide (e); } void void_statement_reducer::visit_atvar_op (atvar_op* e) { if (session.verbose>2) clog << _("Eliding unused target symbol ") << *e->tok << endl; reduce_target_symbol (e); } void void_statement_reducer::visit_target_symbol (target_symbol* e) { if (session.verbose>2) clog << _("Eliding unused target symbol ") << *e->tok << endl; reduce_target_symbol (e); } void void_statement_reducer::visit_cast_op (cast_op* e) { if (session.verbose>2) clog << _("Eliding unused typecast ") << *e->tok << endl; reduce_target_symbol (e, e->operand); } void void_statement_reducer::visit_autocast_op (autocast_op* e) { if (session.verbose>2) clog << _("Eliding unused autocast ") << *e->tok << endl; reduce_target_symbol (e, e->operand); } void void_statement_reducer::visit_defined_op (defined_op* e) { // When the result of a @defined operation isn't needed, just elide // it entirely. Its operand $expression must already be // side-effect-free. if (session.verbose>2) clog << _("Eliding unused check ") << *e->tok << endl; relaxed_p = false; e = 0; provide (e); } void semantic_pass_opt5 (systemtap_session& s, bool& relaxed_p) { // Let's simplify statements with unused computed values. void_statement_reducer vuv (s, relaxed_p); // This instance may be reused for multiple probe/function body trims. vuv.focal_vars.insert (s.globals.begin(), s.globals.end()); for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) vuv.replace (it->second->body); } void probewrite_evaluator::visit_probewrite_op(probewrite_op* e) { symuse_collecting_visitor scv(session); probe_body->visit(&scv); literal_number* ln; if (scv.written_names.find(e->name) != scv.written_names.end()) ln = new literal_number(1); else ln = new literal_number(0); ln->tok = e->tok; provide(ln); } void const_folder::get_literal(expression*& e, literal_number*& n, literal_string*& s) { replace (e); n = (e == last_number) ? last_number : NULL; s = (e == last_string) ? last_string : NULL; } literal_number* const_folder::get_number(expression*& e) { replace (e); return (e == last_number) ? last_number : NULL; } void const_folder::visit_literal_number (literal_number* e) { last_number = e; provide (e); } literal_string* const_folder::get_string(expression*& e) { replace (e); return (e == last_string) ? last_string : NULL; } void const_folder::visit_literal_string (literal_string* e) { last_string = e; provide (e); } void const_folder::visit_if_statement (if_statement* s) { literal_number* cond = get_number (s->condition); if (!cond) { replace (s->thenblock); replace (s->elseblock); provide (s); } else { if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " if-statement %s", cond->value, lex_cast(*s->tok).c_str()) << endl; relaxed_p = false; statement* n = cond->value ? s->thenblock : s->elseblock; if (n) n->visit (this); else provide (new null_statement (s->tok)); } } void const_folder::visit_for_loop (for_loop* s) { literal_number* cond = get_number (s->cond); if (!cond || cond->value) { replace (s->init); replace (s->incr); replace (s->block); provide (s); } else { if (session.verbose>2) clog << _("Collapsing constantly-false for-loop ") << *s->tok << endl; relaxed_p = false; if (s->init) s->init->visit (this); else provide (new null_statement (s->tok)); } } void const_folder::visit_foreach_loop (foreach_loop* s) { literal_number* limit = get_number (s->limit); if (!limit || limit->value > 0) { for (unsigned i = 0; i < s->indexes.size(); ++i) replace (s->indexes[i]); replace (s->base); replace (s->value); replace (s->block); provide (s); } else { if (session.verbose>2) clog << _("Collapsing constantly-limited foreach-loop ") << *s->tok << endl; relaxed_p = false; provide (new null_statement (s->tok)); } } void const_folder::visit_binary_expression (binary_expression* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (right && !right->value && (e->op == "/" || e->op == "%")) { // Give divide-by-zero a chance to be optimized out elsewhere, // and if not it will be a runtime error anyway... provide (e); return; } if (left && right) { if (e->op == "+") value = left->value + right->value; else if (e->op == "-") value = left->value - right->value; else if (e->op == "*") value = left->value * right->value; else if (e->op == "&") value = left->value & right->value; else if (e->op == "|") value = left->value | right->value; else if (e->op == "^") value = left->value ^ right->value; else if (e->op == ">>") value = left->value >> max(min(right->value, (int64_t)64), (int64_t)0); else if (e->op == "<<") value = left->value << max(min(right->value, (int64_t)64), (int64_t)0); else if (e->op == "/") value = (left->value == LLONG_MIN && right->value == -1) ? LLONG_MIN : left->value / right->value; else if (e->op == "%") value = (left->value == LLONG_MIN && right->value == -1) ? 0 : left->value % right->value; else throw SEMANTIC_ERROR (_("unsupported binary operator ") + (string)e->op); } else if ((left && ((left->value == 0 && (e->op == "*" || e->op == "&" || e->op == ">>" || e->op == "<<" )) || (left->value ==-1 && (e->op == "|" || e->op == ">>")))) || (right && ((right->value == 0 && (e->op == "*" || e->op == "&")) || (right->value == 1 && (e->op == "%")) || (right->value ==-1 && (e->op == "%" || e->op == "|"))))) { expression* other = left ? e->right : e->left; varuse_collecting_visitor vu(session); other->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } // we'll pass on type=pe_long inference to the expression if (other->type == pe_unknown) other->type = pe_long; else if (other->type != pe_long) { // this mismatch was not caught in the initial type resolution pass, // generate a mismatch (left doesn't match right) error typeresolution_info ti(session); ti.assert_resolvability = true; // need this to get it throw errors ti.mismatch_complexity = 1; // also needed to throw errors ti.mismatch(e); } if (left) value = left->value; else if (e->op == "%") value = 0; else value = right->value; } else if ((left && ((left->value == 0 && (e->op == "+" || e->op == "|" || e->op == "^")) || (left->value == 1 && (e->op == "*")) || (left->value ==-1 && (e->op == "&")))) || (right && ((right->value == 0 && (e->op == "+" || e->op == "-" || e->op == "|" || e->op == "^")) || (right->value == 1 && (e->op == "*" || e->op == "/")) || (right->value ==-1 && (e->op == "&")) || (right->value <= 0 && (e->op == ">>" || e->op == "<<"))))) { if (session.verbose>2) clog << _("Collapsing constant-identity binary operator ") << *e->tok << endl; relaxed_p = false; // we'll pass on type=pe_long inference to the expression expression* other = left ? e->right : e->left; if (other->type == pe_unknown) other->type = pe_long; else if (other->type != pe_long) { // this mismatch was not caught in the initial type resolution pass, // generate a mismatch (left doesn't match right) error typeresolution_info ti(session); ti.assert_resolvability = true; // need this to get it throw errors ti.mismatch_complexity = 1; // also needed to throw errors ti.mismatch(e); } provide (other); return; } else { provide (e); return; } if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " binary operator %s", value, lex_cast(*e->tok).c_str()) << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_unary_expression (unary_expression* e) { literal_number* operand = get_number (e->operand); if (!operand) provide (e); else { if (session.verbose>2) clog << _("Collapsing constant unary ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number (*operand); n->tok = e->tok; if (e->op == "+") ; // nothing to do else if (e->op == "-") n->value = -n->value; else if (e->op == "!") n->value = !n->value; else if (e->op == "~") n->value = ~n->value; else throw SEMANTIC_ERROR (_("unsupported unary operator ") + (string)e->op); n->visit (this); } } void const_folder::visit_logical_or_expr (logical_or_expr* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (left && right) value = left->value || right->value; else if ((left && left->value) || (right && right->value)) { // If the const is on the left, we get to short-circuit the right // immediately. Otherwise, we can only eliminate the LHS if it's pure. if (right) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } } value = 1; } // We might also get rid of useless "0||x" and "x||0", except it does // normalize x to 0 or 1. We could change it to "!!x", but it's not clear // that this would gain us much. else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant logical-OR ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_logical_and_expr (logical_and_expr* e) { int64_t value; literal_number* left = get_number (e->left); literal_number* right = get_number (e->right); if (left && right) value = left->value && right->value; else if ((left && !left->value) || (right && !right->value)) { // If the const is on the left, we get to short-circuit the right // immediately. Otherwise, we can only eliminate the LHS if it's pure. if (right) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide (e); return; } } value = 0; } // We might also get rid of useless "1&&x" and "x&&1", except it does // normalize x to 0 or 1. We could change it to "!!x", but it's not clear // that this would gain us much. else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant logical-AND ") << *e->tok << endl; relaxed_p = false; literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_compound_expression (compound_expression* e) { replace(e->left, true); replace(e->right, false); // If the LHS is pure, we can eliminate it. // ??? This is unlikely, given how these are created in loc2stap.cxx. if (e->left) { varuse_collecting_visitor vu(session); e->left->visit(&vu); if (!vu.side_effect_free()) { provide(e); return; } } if (session.verbose > 2) clog << _("Collapsing compound expression") << *e->tok << endl; provide(e->right); } void const_folder::visit_comparison (comparison* e) { int comp; literal_number *left_num, *right_num; literal_string *left_str, *right_str; get_literal(e->left, left_num, left_str); get_literal(e->right, right_num, right_str); if (left_str && right_str) comp = left_str->value.compare(right_str->value); else if (left_num && right_num) comp = left_num->value < right_num->value ? -1 : left_num->value > right_num->value ? 1 : 0; else if ((left_num && ((left_num->value == LLONG_MIN && (e->op == "<=" || e->op == ">")) || (left_num->value == LLONG_MAX && (e->op == ">=" || e->op == "<")))) || (right_num && ((right_num->value == LLONG_MIN && (e->op == ">=" || e->op == "<")) || (right_num->value == LLONG_MAX && (e->op == "<=" || e->op == ">"))))) { expression* other = left_num ? e->right : e->left; varuse_collecting_visitor vu(session); other->visit(&vu); if (!vu.side_effect_free()) provide (e); else { if (session.verbose>2) clog << _("Collapsing constant-boundary comparison ") << *e->tok << endl; relaxed_p = false; // ops <= and >= are true, < and > are false literal_number* n = new literal_number( e->op.length() == 2 ); n->tok = e->tok; n->visit (this); } return; } else { provide (e); return; } if (session.verbose>2) clog << _("Collapsing constant comparison ") << *e->tok << endl; relaxed_p = false; int64_t value; if (e->op == "==") value = comp == 0; else if (e->op == "!=") value = comp != 0; else if (e->op == "<") value = comp < 0; else if (e->op == ">") value = comp > 0; else if (e->op == "<=") value = comp <= 0; else if (e->op == ">=") value = comp >= 0; else throw SEMANTIC_ERROR (_("unsupported comparison operator ") + (string)e->op); literal_number* n = new literal_number(value); n->tok = e->tok; n->visit (this); } void const_folder::visit_concatenation (concatenation* e) { literal_string* left = get_string (e->left); literal_string* right = get_string (e->right); if (left && right) { if (session.verbose>2) clog << _("Collapsing constant concatenation ") << *e->tok << endl; relaxed_p = false; literal_string* n = new literal_string (*left); n->tok = e->tok; n->value = (string)n->value + (string)right->value; n->visit (this); } else if ((left && left->value.empty()) || (right && right->value.empty())) { if (session.verbose>2) clog << _("Collapsing identity concatenation ") << *e->tok << endl; relaxed_p = false; provide(left ? e->right : e->left); } else provide (e); } void const_folder::visit_ternary_expression (ternary_expression* e) { literal_number* cond = get_number (e->cond); if (!cond) { replace (e->truevalue); replace (e->falsevalue); provide (e); } else { if (session.verbose>2) clog << _F("Collapsing constant-%" PRIi64 " ternary %s", cond->value, lex_cast(*e->tok).c_str()) << endl; relaxed_p = false; expression* n = cond->value ? e->truevalue : e->falsevalue; n->visit (this); } } void const_folder::visit_defined_op (defined_op* e) { // If a @defined makes it this far, then it was not resolved by // previous efforts. We could assume that therefore it is a big fat // zero, but for the @defined(autocast) case PR18079, this just // means that we didn't know yet. int64_t value = 0; bool collapse_this = false; /* PR20672: not true; we run a const_folder iteratively during initial probe body variable-expansion, when other @defined()s may be as-yet-unprocessed. We can't presume to map them to zero. // We do know that plain target_symbols aren't going anywhere though. if (get_target_symbol (e->operand)) { if (session.verbose>2) clog << _("Collapsing target_symbol @defined check ") << *e->tok << endl; collapse_this = true; } else */ if (collapse_defines_p && relaxed_p) { if (session.verbose>2) clog << _("Collapsing untouched @defined check ") << *e->tok << endl; // If we got to an expression with a known type, call it defined. if (e->operand->type != pe_unknown) value = 1; collapse_this = true; } if (collapse_this) { // Don't be greedy... we'll only collapse one at a time so type // resolution can have another go at it. relaxed_p = false; literal_number* n = new literal_number (value); n->tok = e->tok; n->visit (this); } else { if (session.verbose>2) clog << _("Preserving unresolved @defined check ") << *e->tok << endl; provide (e); } } target_symbol* const_folder::get_target_symbol(expression*& e) { replace (e); return (e == last_target_symbol) ? last_target_symbol : NULL; } void const_folder::visit_target_symbol (target_symbol* e) { if (collapse_defines_p && session.skip_badvars) { // Upon user request for ignoring context, the symbol is replaced // with a literal 0 and a warning message displayed // ... but don't do this during early runs of the const_folder, only // during the final (collapse_defines_p) one. (Otherwise, during // a dwarf_var "@defined($foo) ? $foo : 0", the inner $foo could // get premature mapping to 0. // // XXX this ignores possible side-effects, e.g. in array indexes literal_number* ln_zero = new literal_number (0); ln_zero->tok = e->tok; provide (ln_zero); session.print_warning (_("Bad $context variable being substituted with literal 0"), e->tok); relaxed_p = false; } else { update_visitor::visit_target_symbol (e); last_target_symbol = e; } } static int initial_typeres_pass(systemtap_session& s); static int semantic_pass_const_fold (systemtap_session& s, bool& relaxed_p) { // attempt an initial type resolution pass to see if there are any type // mismatches before we starting whisking away vars that get switched out // with a const. // return if the initial type resolution pass reported errors (type mismatches) int rc = initial_typeres_pass(s); if (rc) { relaxed_p = true; return rc; } // Let's simplify statements with constant values. const_folder cf (s, relaxed_p, true /* collapse remaining @defined()->0 now */ ); // This instance may be reused for multiple probe/function body trims. for (unsigned i=0; ibody); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) cf.replace (it->second->body); return 0; } struct dead_control_remover: public traversing_visitor { systemtap_session& session; bool& relaxed_p; statement* control; dead_control_remover(systemtap_session& s, bool& r): session(s), relaxed_p(r), control(NULL) {} void visit_block (block *b); // When a block contains any of these, the following statements are dead. void visit_return_statement (return_statement* s) { control = s; } void visit_next_statement (next_statement* s) { control = s; } void visit_break_statement (break_statement* s) { control = s; } void visit_continue_statement (continue_statement* s) { control = s; } }; void dead_control_remover::visit_block (block* b) { vector& vs = b->statements; if (vs.size() == 0) /* else (size_t) size()-1 => very big */ return; for (size_t i = 0; i < vs.size() - 1; ++i) { vs[i]->visit (this); if (vs[i] == control) { if (session.verbose > 3) // suppress in PR25841 context session.print_warning(_("statement will never be reached"), vs[i + 1]->tok); vs.erase(vs.begin() + i + 1, vs.end()); relaxed_p = false; break; } } } static void semantic_pass_dead_control (systemtap_session& s, bool& relaxed_p) { // Let's remove code that follow unconditional control statements dead_control_remover dc (s, relaxed_p); for (unsigned i=0; ibody->visit(&dc); for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) it->second->body->visit(&dc); } // Looks for next statements in function declarations and marks // them. struct function_next_check : public traversing_visitor { functiondecl* current_function; function_next_check() : current_function(0) { } void visit_next_statement(next_statement*) { current_function->has_next = true; } void visit_embeddedcode(embeddedcode* s) { if (s->tagged_p("STAP_NEXT;")) current_function->has_next = true; } }; struct dead_overload_remover : public traversing_visitor { systemtap_session& s; bool& relaxed_p; dead_overload_remover(systemtap_session& sess, bool& r) : s(sess), relaxed_p(r) { } void visit_functioncall(functioncall* e); }; void dead_overload_remover::visit_functioncall(functioncall *e) { unsigned reachable = 1; bool chained = true; for (unsigned fd = 0; fd < e->referents.size(); fd++) { functiondecl* r = e->referents[fd]; // Note that this is not a sound inference but it suffices for most // cases. It may be the case that there is a 'next' statement in the // function that will never be executed by the control flow. // We simply use the presence of a 'next' statement as an indicator // of a potential fall through. Once a function can't be 'nexted' the // remaining functions are unreachable. if (chained && r->has_next) reachable++; else chained = false; } if (reachable < e->referents.size()) { for (unsigned fd = reachable; fd < e->referents.size(); fd++) { functiondecl* r = e->referents[fd]; if (s.verbose > 3) // suppress in PR25841 context s.print_warning(_("instance of overloaded function will " "never be reached"), r->tok); } e->referents.erase(e->referents.begin()+reachable, e->referents.end()); relaxed_p = false; } } static void semantic_pass_overload(systemtap_session& s, bool& relaxed_p) { set function_next; function_next_check fnc; for (auto it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = it->second; fnc.current_function = fn; fn->body->visit(&fnc); } for (auto it = s.probes.begin(); it != s.probes.end(); ++it) { dead_overload_remover ovr(s, relaxed_p); (*it)->body->visit(&ovr); } for (auto it = s.functions.begin(); it != s.functions.end(); ++it) { dead_overload_remover ovr(s, relaxed_p); it->second->body->visit(&ovr); } } struct duplicate_function_remover: public functioncall_traversing_visitor { systemtap_session& s; map& duplicate_function_map; duplicate_function_remover(systemtap_session& sess, map&dfm): s(sess), duplicate_function_map(dfm) {}; void visit_functioncall (functioncall* e); }; void duplicate_function_remover::visit_functioncall (functioncall *e) { functioncall_traversing_visitor::visit_functioncall (e); // If any of the current function call references points to a function that // is a duplicate, replace it. for (unsigned i = 0; i < e->referents.size(); i++) { functiondecl* referent = e->referents[i]; if (duplicate_function_map.count(referent) != 0) { if (s.verbose>2) clog << _F("Changing %s reference to %s reference\n", referent->unmangled_name.to_string().c_str(), duplicate_function_map[referent]->unmangled_name.to_string().c_str()); e->tok = duplicate_function_map[referent]->tok; e->function = duplicate_function_map[referent]->name; e->referents[i] = duplicate_function_map[referent]; } } } static string get_functionsig (functiondecl* f) { ostringstream s; // Get the "name:args body" of the function in s. We have to // include the args since the function 'x1(a, b)' is different than // the function 'x2(b, a)' even if the bodies of the two functions // are exactly the same. f->printsig(s); f->body->print(s); // printsig puts f->name + ':' on the front. Remove this // (otherwise, functions would never compare equal). string str = s.str().erase(0, f->unmangled_name.size() + 1); // Return the function signature. return str; } void semantic_pass_opt6 (systemtap_session& s, bool& relaxed_p) { // Walk through all the functions, looking for duplicates. map functionsig_map; map duplicate_function_map; vector newly_zapped_functions; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { functiondecl *fd = it->second; string functionsig = get_functionsig(fd); if (functionsig_map.count(functionsig) == 0) { // This function is unique. Remember it. functionsig_map[functionsig] = fd; } else { // This function is a duplicate. duplicate_function_map[fd] = functionsig_map[functionsig]; newly_zapped_functions.push_back (fd); relaxed_p = false; } } for (unsigned i=0; i::iterator where = s.functions.find (newly_zapped_functions[i]->name); assert (where != s.functions.end()); s.functions.erase (where); } // If we have duplicate functions, traverse down the tree, replacing // the appropriate function calls. // duplicate_function_remover::visit_functioncall() handles the // details of replacing the function calls. if (duplicate_function_map.size() != 0) { duplicate_function_remover dfr (s, duplicate_function_map); for (unsigned i=0; i < s.probes.size(); i++) s.probes[i]->body->visit(&dfr); } } struct stable_analysis: public nop_visitor { bool stable; stable_analysis(): stable(false) {}; void visit_embeddedcode (embeddedcode* s); }; void stable_analysis::visit_embeddedcode (embeddedcode* s) { if (s->tagged_p("/* stable */")) stable = true; if (stable && !s->tagged_p("/* pure */")) throw SEMANTIC_ERROR(_("stable function must also be /* pure */"), s->tok); } // Examines entire subtree for any stable functioncalls. struct stable_finder: public traversing_visitor { bool stable; set& stable_fcs; stable_finder(set&s): stable(false), stable_fcs(s) {}; void visit_functioncall (functioncall* e); }; void stable_finder::visit_functioncall (functioncall* e) { if (stable_fcs.find(e->function) != stable_fcs.end()) stable = true; traversing_visitor::visit_functioncall(e); } // Examines current level of block for stable functioncalls. // Does not descend into sublevels. struct level_check: public traversing_visitor { bool stable; set& stable_fcs; level_check(set& s): stable(false), stable_fcs(s) {}; void visit_block (block* s); void visit_try_block (try_block *s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_functioncall (functioncall* s); }; void level_check::visit_block (block*) { } void level_check::visit_try_block (try_block* s) { if (s->catch_error_var) s->catch_error_var->visit(this); } void level_check::visit_if_statement (if_statement* s) { s->condition->visit(this); } void level_check::visit_for_loop (for_loop* s) { if (s->init) s->init->visit(this); s->cond->visit(this); if (s->incr) s->incr->visit(this); } void level_check::visit_foreach_loop (foreach_loop* s) { s->base->visit(this); for (unsigned i=0; iindexes.size(); i++) s->indexes[i]->visit(this); if (s->value) s->value->visit(this); if (s->limit) s->limit->visit(this); } void level_check::visit_functioncall (functioncall* e) { if (stable_fcs.find(e->function) != stable_fcs.end()) stable = true; traversing_visitor::visit_functioncall(e); } struct stable_functioncall_visitor: public update_visitor { systemtap_session& session; functiondecl* current_function; derived_probe* current_probe; set& stable_fcs; set scope_vars; map new_vars; vector > new_stmts; unsigned loop_depth; block* top_scope; block* curr_scope; stable_functioncall_visitor(systemtap_session& s, set& sfc): update_visitor(s.verbose), session(s), current_function(0), current_probe(0), stable_fcs(sfc), loop_depth(0), top_scope(0), curr_scope(0) {}; statement* convert_stmt(statement* s); void visit_block (block* s); void visit_try_block (try_block* s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_functioncall (functioncall* e); }; statement* stable_functioncall_visitor::convert_stmt (statement* s) { if (top_scope == 0 && (dynamic_cast(s) || dynamic_cast(s))) { stable_finder sf(stable_fcs); s->visit(&sf); if (sf.stable) { block* b = new block; b->tok = s->tok; b->statements.push_back(s); return b; } } else if (top_scope == 0 && !dynamic_cast(s)) { level_check lc(stable_fcs); s->visit(&lc); if (lc.stable) { block* b = new block; b->tok = s->tok; b->statements.push_back(s); return b; } } return s; } void stable_functioncall_visitor::visit_block (block* s) { block* prev_top_scope = top_scope; block* prev_scope = curr_scope; if (loop_depth == 0) top_scope = s; curr_scope = s; set current_vars = scope_vars; update_visitor::visit_block(s); if (loop_depth == 0) top_scope = prev_top_scope; curr_scope = prev_scope; scope_vars = current_vars; } void stable_functioncall_visitor::visit_try_block (try_block* s) { if (s->try_block) s->try_block = convert_stmt(s->try_block); replace(s->try_block); replace(s->catch_error_var); if (s->catch_block) s->catch_block = convert_stmt(s->catch_block); replace(s->catch_block); provide(s); } void stable_functioncall_visitor::visit_if_statement (if_statement* s) { block* prev_top_scope = top_scope; if (loop_depth == 0) top_scope = 0; replace(s->condition); s->thenblock = convert_stmt(s->thenblock); replace(s->thenblock); if (loop_depth == 0) top_scope = 0; if (s->elseblock) s->elseblock = convert_stmt(s->elseblock); replace(s->elseblock); provide(s); top_scope = prev_top_scope; } void stable_functioncall_visitor::visit_for_loop (for_loop* s) { replace(s->init); replace(s->cond); replace(s->incr); loop_depth++; s->block = convert_stmt(s->block); replace(s->block); loop_depth--; provide(s); } void stable_functioncall_visitor::visit_foreach_loop (foreach_loop* s) { for (unsigned i = 0; i < s->indexes.size(); ++i) replace(s->indexes[i]); replace(s->base); replace(s->value); replace(s->limit); loop_depth++; s->block = convert_stmt(s->block); replace(s->block); loop_depth--; provide(s); } void stable_functioncall_visitor::visit_functioncall (functioncall* e) { for (unsigned i = 0; i < e->args.size(); ++i) replace (e->args[i]); if (stable_fcs.find(e->function) != stable_fcs.end()) { string name("__stable_"); name.append(e->function).append("_value"); // Variable potentially not in scope since it is in a sibling block if (scope_vars.find(e->function) == scope_vars.end()) { if (new_vars.find(e->function) == new_vars.end()) { // New variable declaration to store result of function call vardecl* v = new vardecl; v->unmangled_name = v->name = name; v->tok = e->tok; v->set_arity(0, e->tok); v->type = e->type; if (current_function) current_function->locals.push_back(v); else current_probe->locals.push_back(v); new_vars[e->function] = v; } symbol* sym = new symbol; sym->name = name; sym->tok = e->tok; sym->referent = new_vars[e->function]; sym->type = e->type; functioncall* fc = new functioncall; fc->tok = e->tok; fc->function = e->function; fc->referents = e->referents; fc->type = e->type; assignment* a = new assignment; a->tok = e->tok; a->op = "="; a->left = sym; a->right = fc; a->type = e->type; expr_statement* es = new expr_statement; es->tok = e->tok; es->value = a; // Store location of the block to put new declaration. if (loop_depth != 0) { assert(top_scope); new_stmts.push_back(make_pair(es,top_scope)); } else { assert(curr_scope); new_stmts.push_back(make_pair(es,curr_scope)); } scope_vars.insert(e->function); provide(sym); } else { symbol* sym = new symbol; sym->name = name; sym->tok = e->tok; sym->referent = new_vars[e->function]; sym->type = e->type; provide(sym); } return; } provide(e); } // Cache stable embedded-c functioncall results and replace // all calls with same name using that value to reduce duplicate // functioncall overhead. Functioncalls are pulled out of any // top-level loops and put into if/try blocks. void semantic_pass_opt7(systemtap_session& s) { set stable_fcs; for (map::iterator it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = (*it).second; stable_analysis sa; fn->body->visit(&sa); if (sa.stable && fn->formal_args.size() == 0) stable_fcs.insert(fn->name); } for (vector::iterator it = s.probes.begin(); it != s.probes.end(); ++it) { stable_functioncall_visitor t(s, stable_fcs); t.current_probe = *it; (*it)->body = t.convert_stmt((*it)->body); t.replace((*it)->body); for (vector >::iterator st = t.new_stmts.begin(); st != t.new_stmts.end(); ++st) st->second->statements.insert(st->second->statements.begin(), st->first); } for (map::iterator it = s.functions.begin(); it != s.functions.end(); ++it) { functiondecl* fn = (*it).second; stable_functioncall_visitor t(s, stable_fcs); t.current_function = fn; fn->body = t.convert_stmt(fn->body); t.replace(fn->body); for (vector >::iterator st = t.new_stmts.begin(); st != t.new_stmts.end(); ++st) st->second->statements.insert(st->second->statements.begin(), st->first); } } static int semantic_pass_optimize1 (systemtap_session& s) { // In this pass, we attempt to rewrite probe/function bodies to // eliminate some blatantly unnecessary code. This is run before // type inference, but after symbol resolution and derived_probe // creation. We run an outer "relaxation" loop that repeats the // optimizations until none of them find anything to remove. int rc = 0; bool relaxed_p = false; unsigned iterations = 0; while (! relaxed_p) { // Save the old value of suppress_warnings, as we will be changing // it below. save_and_restore suppress_warnings(& s.suppress_warnings); assert_no_interrupts(); relaxed_p = true; // until proven otherwise // If the verbosity is high enough, always print warnings (overrides -w), // or if not, always suppress warnings for every itteration after the first. if(s.verbose > 2) s.suppress_warnings = false; else if (iterations > 0) s.suppress_warnings = true; if (s.unoptimized && ! s.dump_mode) // need these even in -u mode { semantic_pass_opt1 (s, relaxed_p); semantic_pass_opt5 (s, relaxed_p); semantic_pass_dead_control (s, relaxed_p); } if (!s.unoptimized) { semantic_pass_opt1 (s, relaxed_p); semantic_pass_opt2 (s, relaxed_p, iterations); // produce some warnings only on iteration=0 semantic_pass_opt3 (s, relaxed_p); semantic_pass_opt4 (s, relaxed_p); semantic_pass_opt5 (s, relaxed_p); } // For listing mode, we need const-folding regardless of optimization so // that @defined expressions can be properly resolved. PR11360 // We also want it in case variables are used in if/case expressions, // so enable always. PR11366 // rc is incremented if there is an error that got reported. rc += semantic_pass_const_fold (s, relaxed_p); if (!s.unoptimized) semantic_pass_dead_control (s, relaxed_p); if (!s.unoptimized) semantic_pass_overload (s, relaxed_p); iterations ++; } // We will now remove probes that have empty handlers and join the remaining probes // with their groups. Do not elide probes when the unoptimization flag is set, or // synthetic probes (such as PR18115 probe-conditional synthetic-begin). vector non_empty_probes; for (unsigned i = 0; i < s.probes.size(); i++) { derived_probe* p = s.probes[i]; if (p->synthetic) { non_empty_probes.push_back(p); p->join_group(s); } else if (s.unoptimized || s.dump_mode) p->join_group(s); else if (s.empty_probes.find(p) == s.empty_probes.end()) { non_empty_probes.push_back(p); p->join_group(s); } else if (!s.timing && // PR10070 !(p->base->tok->location.file->synthetic)) // don't warn for synthetic probes s.print_warning(_F("Probe '%s' has been elided", ((string) p->locations[0]->components[0]->functor).c_str()), p->tok); } if (!s.unoptimized && !s.dump_mode) s.probes = non_empty_probes; return rc; } static int semantic_pass_optimize2 (systemtap_session& s) { // This is run after type inference. We run an outer "relaxation" // loop that repeats the optimizations until none of them find // anything to remove. int rc = 0; // Save the old value of suppress_warnings, as we will be changing // it below. save_and_restore suppress_warnings(& s.suppress_warnings); bool relaxed_p = false; unsigned iterations = 0; while (! relaxed_p) { assert_no_interrupts(); relaxed_p = true; // until proven otherwise // If the verbosity is high enough, always print warnings (overrides -w), // or if not, always suppress warnings for every itteration after the first. if(s.verbose > 2) s.suppress_warnings = false; else if (iterations > 0) s.suppress_warnings = true; if (!s.unoptimized) semantic_pass_opt6 (s, relaxed_p); iterations++; } if (!s.unoptimized) semantic_pass_opt7(s); return rc; } // ------------------------------------------------------------------------ // type resolution struct autocast_expanding_visitor: public var_expanding_visitor { typeresolution_info& ti; autocast_expanding_visitor (systemtap_session& s, typeresolution_info& ti): var_expanding_visitor(s), ti(ti) {} void resolve_functioncall (functioncall* fc) { // This is a very limited version of semantic_pass_symbols, but // we're late in the game at this point (after basic symbol // resolution already took place). We won't get a chance to // optimize, but for now the only functions we expect are // kernel/user_string from pretty-printing, which don't need // optimization. systemtap_session& s = ti.session; size_t nfiles = s.files.size(); symresolution_info sym (s); sym.current_function = ti.current_function; sym.current_probe = ti.current_probe; fc->visit (&sym); // NB: synthetic functions get tacked onto the origin file, so we won't // see them growing s.files[]. Traverse it directly. for (unsigned i = 0; i < fc->referents.size(); i++) { functiondecl* fd = fc->referents[i]; sym.current_function = fd; sym.current_probe = 0; fd->body->visit (&sym); } while (nfiles < s.files.size()) { stapfile* dome = s.files[nfiles++]; for (size_t i = 0; i < dome->functions.size(); ++i) { functiondecl* fd = dome->functions[i]; sym.current_function = fd; sym.current_probe = 0; fd->body->visit (&sym); // NB: not adding to s.functions just yet... } } // Add only the direct functions we need. functioncall_traversing_visitor ftv; fc->visit (&ftv); for (set::iterator it = ftv.seen.begin(); it != ftv.seen.end(); ++it) { functiondecl* fd = *it; pair::iterator,bool> inserted = s.functions.insert (make_pair (fd->name, fd)); if (!inserted.second && inserted.first->second != fd) throw SEMANTIC_ERROR (_F("resolved function '%s' conflicts with an existing function", fd->unmangled_name.to_string().c_str()), fc->tok); } } void visit_autocast_op (autocast_op* e) { const bool lvalue = is_active_lvalue (e); const exp_type_ptr& details = e->operand->type_details; if (details && !e->saved_conversion_error) { functioncall* fc = details->expand (e, lvalue); if (fc) { ti.num_newly_resolved++; resolve_functioncall (fc); // NB: at this stage, the functioncall object has one // argument too few if we're in lvalue context. It will // be filled in only later (as the // var_expanding_visitor::visit_assignment bit rolls // back up). But nevertheless we must resolve the fc, // otherwise, symresolution_info::visit_functioncall will // throw a mismatched-arity error. (semok/autocast08.stp) if (lvalue) provide_lvalue_call (fc); fc->visit (this); return; } } var_expanding_visitor::visit_autocast_op (e); } }; struct initial_typeresolution_info : public typeresolution_info { initial_typeresolution_info (systemtap_session& s): typeresolution_info(s) {} // these expressions are not supposed to make its way to the typeresolution // pass. they probably get substituted/replaced, but since this is an initial pass // and not all substitutions are done, replace the functions that throw errors. void visit_target_symbol (target_symbol*) {} void visit_atvar_op (atvar_op*) {} void visit_defined_op (defined_op*) {} void visit_probewrite_op (probewrite_op*) {} void visit_entry_op (entry_op*) {} void visit_cast_op (cast_op*) {} }; static int initial_typeres_pass(systemtap_session& s) { // minimal type resolution based off of semantic_pass_types(), without // checking for complete type resolutions or autocast expanding initial_typeresolution_info ti(s); ti.assert_resolvability = false; while (1) { assert_no_interrupts(); ti.num_newly_resolved = 0; ti.num_still_unresolved = 0; ti.num_available_autocasts = 0; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) { assert_no_interrupts(); functiondecl* fd = it->second; ti.current_probe = 0; ti.current_function = fd; ti.t = pe_unknown; fd->body->visit (& ti); } for (unsigned j=0; jbody->visit (& ti); probe_point* pp = pn->sole_location(); if (pp->condition) { ti.current_function = 0; ti.current_probe = 0; ti.t = pe_long; // NB: expected type pp->condition->visit (& ti); } } if (ti.num_newly_resolved == 0) // converged { // take into account that if there are mismatches, we'd want to know // about them incase they get whisked away, later in this process if (!ti.assert_resolvability && ti.mismatch_complexity > 0) // found a mismatch!! { ti.assert_resolvability = true; // report errors if (s.verbose > 0) ti.mismatch_complexity = 1; // print out mismatched but not unresolved type mismatches } else break; } else ti.mismatch_complexity = 0; } return s.num_errors(); } static int semantic_pass_types (systemtap_session& s) { int rc = 0; // next pass: type inference unsigned iterations = 0; typeresolution_info ti (s); ti.assert_resolvability = false; while (1) { assert_no_interrupts(); iterations ++; ti.num_newly_resolved = 0; ti.num_still_unresolved = 0; ti.num_available_autocasts = 0; for (map::iterator it = s.functions.begin(); it != s.functions.end(); it++) try { assert_no_interrupts(); functiondecl* fd = it->second; ti.current_probe = 0; ti.current_function = fd; ti.t = pe_unknown; fd->body->visit (& ti); // NB: we don't have to assert a known type for // functions here, to permit a "void" function. // The translator phase will omit the "retvalue". // // if (fd->type == pe_unknown) // ti.unresolved (fd->tok); for (unsigned i=0; i < fd->locals.size(); ++i) ti.check_local (fd->locals[i]); // Check and run the autocast expanding visitor. if (ti.num_available_autocasts > 0) { autocast_expanding_visitor aev (s, ti); aev.replace (fd->body); // PR18079, rerun the const-folder / dead-block-remover // if autocast evaluation enabled a @defined() if (! aev.relaxed()) { bool relaxed_p = true; const_folder cf (s, relaxed_p); cf.replace (fd->body); if (! s.unoptimized) { dead_control_remover dc (s, relaxed_p); fd->body->visit (&dc); } (void) relaxed_p; // we judge success later by num_still_unresolved, not this flag } ti.num_available_autocasts = 0; } } catch (const semantic_error& e) { throw SEMANTIC_ERROR(_F("while processing function %s", it->second->unmangled_name.to_string().c_str())).set_chain(e); } for (unsigned j=0; jbody->visit (& ti); for (unsigned i=0; i < pn->locals.size(); ++i) ti.check_local (pn->locals[i]); // Check and run the autocast expanding visitor. if (ti.num_available_autocasts > 0) { autocast_expanding_visitor aev (s, ti); var_expand_const_fold_loop (s, pn->body, aev); // PR18079, rerun the const-folder / dead-block-remover // if autocast evaluation enabled a @defined() if (! s.unoptimized) { bool relaxed_p; dead_control_remover dc (s, relaxed_p); pn->body->visit (&dc); (void) relaxed_p; // we judge success later by num_still_unresolved, not this flag } ti.num_available_autocasts = 0; } probe_point* pp = pn->sole_location(); if (pp->condition) { ti.current_function = 0; ti.current_probe = 0; ti.t = pe_long; // NB: expected type pp->condition->visit (& ti); } } catch (const semantic_error& e) { throw SEMANTIC_ERROR(_F("while processing probe %s", s.probes[j]->derived_locations(false).c_str())).set_chain(e); } for (unsigned j=0; jtype == pe_unknown) ti.unresolved (gd->tok); if(gd->arity == 0 && gd->wrap == true) { throw SEMANTIC_ERROR(_("wrapping not supported for scalars"), gd->tok); } } if (ti.num_newly_resolved == 0) // converged { if (ti.num_still_unresolved == 0) break; // successfully else if (! ti.assert_resolvability) { // PR18079, before we go asserting anything, try to nullify any // still-unresolved @defined ops. bool relaxed_p = true; const_folder cf (s, relaxed_p, true); // NB: true: collapse remaining @defined's for (auto it = s.probes.begin(); it != s.probes.end(); ++it) cf.replace ((*it)->body); for (auto it = s.functions.begin(); it != s.functions.end(); ++it) cf.replace (it->second->body); if (! s.unoptimized) semantic_pass_dead_control (s, relaxed_p); if (! relaxed_p) ti.mismatch_complexity = 0; // reset for next pass else { ti.assert_resolvability = true; // last pass, with error msgs if (s.verbose > 0) ti.mismatch_complexity = 0; // print every kind of mismatch } } else { // unsuccessful conclusion rc ++; break; } } else ti.mismatch_complexity = 0; // reset for next pass } return rc + s.num_errors(); } struct exp_type_null : public exp_type_details { uintptr_t id () const { return 0; } bool expandable() const { return false; } functioncall *expand(autocast_op*, bool) { return NULL; } void print (std::ostream& o) const { o << "null"; } }; typeresolution_info::typeresolution_info (systemtap_session& s): session(s), num_newly_resolved(0), num_still_unresolved(0), num_available_autocasts(0), assert_resolvability(false), mismatch_complexity(0), current_function(0), current_probe(0), t(pe_unknown), null_type(make_shared()) { } void typeresolution_info::visit_literal_number (literal_number* e) { assert (e->type == pe_long); if ((t == e->type) || (t == pe_unknown)) return; mismatch (e->tok, t, e->type); } void typeresolution_info::visit_literal_string (literal_string* e) { assert (e->type == pe_string); if ((t == e->type) || (t == pe_unknown)) return; mismatch (e->tok, t, e->type); } void typeresolution_info::visit_logical_or_expr (logical_or_expr *e) { visit_binary_expression (e); } void typeresolution_info::visit_logical_and_expr (logical_and_expr *e) { visit_binary_expression (e); } void typeresolution_info::visit_regex_query (regex_query *e) { // NB: result of regex query is an integer! if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); // parser ensures this is a literal known at compile time if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_compound_expression (compound_expression* e) { // Incoming type inference applies to the RHS. e->right->visit(this); // No incoming data for the LHS. t = pe_unknown; e->left->visit(this); } void typeresolution_info::visit_comparison (comparison *e) { // NB: result of any comparison is an integer! if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = (e->right->type != pe_unknown) ? e->right->type : pe_unknown; e->left->visit (this); t = (e->left->type != pe_unknown) ? e->left->type : pe_unknown; e->right->visit (this); if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_concatenation (concatenation *e) { if (t != pe_unknown && t != pe_string) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); if (e->type == pe_unknown) { e->type = pe_string; resolved (e->tok, e->type); } } void typeresolution_info::visit_assignment (assignment *e) { if (t == pe_stats) invalid (e->tok, t); if (e->op == "<<<") // stats aggregation { if (t == pe_string) invalid (e->tok, t); t = pe_stats; e->left->visit (this); t = pe_long; e->right->visit (this); if (e->type == pe_unknown || e->type == pe_stats) { e->type = pe_long; resolved (e->tok, e->type); } } else if (e->left->type == pe_stats) invalid (e->left->tok, e->left->type); else if (e->right->type == pe_stats) invalid (e->right->tok, e->right->type); else if (e->op == "+=" || // numeric only e->op == "-=" || e->op == "*=" || e->op == "/=" || e->op == "%=" || e->op == "&=" || e->op == "^=" || e->op == "|=" || e->op == "<<=" || e->op == ">>=" || false) { visit_binary_expression (e); } else if (e->op == ".=" || // string only false) { if (t == pe_long || t == pe_stats) invalid (e->tok, t); t = pe_string; e->left->visit (this); t = pe_string; e->right->visit (this); if (e->type == pe_unknown) { e->type = pe_string; resolved (e->tok, e->type); } } else if (e->op == "=") // overloaded = for string & numeric operands { // logic similar to ternary_expression exp_type sub_type = t; // Infer types across the l/r values if (sub_type == pe_unknown && e->type != pe_unknown) sub_type = e->type; t = (sub_type != pe_unknown) ? sub_type : (e->right->type != pe_unknown) ? e->right->type : pe_unknown; e->left->visit (this); t = (sub_type != pe_unknown) ? sub_type : (e->left->type != pe_unknown) ? e->left->type : pe_unknown; e->right->visit (this); if ((sub_type != pe_unknown) && (e->type == pe_unknown)) { e->type = sub_type; resolved (e->tok, e->type); } if ((sub_type == pe_unknown) && (e->left->type != pe_unknown)) { e->type = e->left->type; resolved (e->tok, e->type); } if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); // Propagate type details from the RHS to the assignment if (e->type == e->right->type && e->right->type_details && !e->type_details) resolve_details(e->tok, e->right->type_details, e->type_details); // Propagate type details from the assignment to the LHS if (e->type == e->left->type && e->type_details) { if (e->left->type_details && *e->left->type_details != *e->type_details && *e->left->type_details != *null_type) resolve_details(e->left->tok, null_type, e->left->type_details); else if (!e->left->type_details) resolve_details(e->left->tok, e->type_details, e->left->type_details); } } else throw SEMANTIC_ERROR (_("internal error: unsupported assignment operator ") + (string)e->op); } void typeresolution_info::visit_embedded_expr (embedded_expr *e) { if (e->type == pe_unknown) { if (e->tagged_p ("/* string */")) e->type = pe_string; else // if (e->tagged_p ("/* long */")) e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_binary_expression (binary_expression* e) { if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_long; e->left->visit (this); t = pe_long; e->right->visit (this); if (e->left->type != pe_unknown && e->right->type != pe_unknown && e->left->type != e->right->type) mismatch (e); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_pre_crement (pre_crement *e) { visit_unary_expression (e); } void typeresolution_info::visit_post_crement (post_crement *e) { visit_unary_expression (e); } void typeresolution_info::visit_unary_expression (unary_expression* e) { if (t == pe_stats || t == pe_string) invalid (e->tok, t); t = pe_long; e->operand->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_ternary_expression (ternary_expression* e) { exp_type sub_type = t; t = pe_long; e->cond->visit (this); // Infer types across the true/false arms of the ternary expression. if (sub_type == pe_unknown && e->type != pe_unknown) sub_type = e->type; t = sub_type; e->truevalue->visit (this); t = sub_type; e->falsevalue->visit (this); if ((sub_type == pe_unknown) && (e->type != pe_unknown)) ; // already resolved else if ((sub_type != pe_unknown) && (e->type == pe_unknown)) { e->type = sub_type; resolved (e->tok, e->type); } else if ((sub_type == pe_unknown) && (e->truevalue->type != pe_unknown)) { e->type = e->truevalue->type; resolved (e->tok, e->type); } else if ((sub_type == pe_unknown) && (e->falsevalue->type != pe_unknown)) { e->type = e->falsevalue->type; resolved (e->tok, e->type); } else if (e->type != sub_type) mismatch (e->tok, sub_type, e->type); // Propagate type details from both true/false branches if (!e->type_details && e->type == e->truevalue->type && e->type == e->falsevalue->type && e->truevalue->type_details && e->falsevalue->type_details && *e->truevalue->type_details == *e->falsevalue->type_details) resolve_details(e->tok, e->truevalue->type_details, e->type_details); } template void resolve_2types (Referrer* referrer, Referent* referent, typeresolution_info* r, exp_type t, bool accept_unknown = false) { exp_type& re_type = referrer->type; const token* re_tok = referrer->tok; exp_type& te_type = referent->type; if (t != pe_unknown && re_type == t && re_type == te_type) ; // do nothing: all three e->types in agreement else if (t == pe_unknown && re_type != pe_unknown && re_type == te_type) ; // do nothing: two known e->types in agreement else if (re_type != pe_unknown && te_type != pe_unknown && re_type != te_type) r->mismatch (re_tok, re_type, referent); // referrer-referent else if (re_type != pe_unknown && t != pe_unknown && re_type != t) r->mismatch (re_tok, t, referent); // referrer-t else if (te_type != pe_unknown && t != pe_unknown && te_type != t) r->mismatch (re_tok, t, referent); // referent-t else if (re_type == pe_unknown && t != pe_unknown) { // propagate from upstream re_type = t; r->resolved (re_tok, re_type); // catch re_type/te_type mismatch later } else if (re_type == pe_unknown && te_type != pe_unknown) { // propagate from referent re_type = te_type; r->resolved (re_tok, re_type); // catch re_type/t mismatch later } else if (re_type != pe_unknown && te_type == pe_unknown) { // propagate to referent te_type = re_type; r->resolved (re_tok, re_type, referent); // catch re_type/t mismatch later } else if (! accept_unknown) r->unresolved (re_tok); } void typeresolution_info::visit_symbol (symbol* e) { if (e->referent == 0) // should have been linked or rejected before now throw SEMANTIC_ERROR (_F("internal error: unresolved symbol '%s'", e->name.to_string().c_str()), e->tok); resolve_2types (e, e->referent, this, t); if (e->type == e->referent->type) { // If both have type details, then they either must agree; // otherwise force them both to null. if (e->type_details && e->referent->type_details && *e->type_details != *e->referent->type_details) { // NB: Don't bother warn users about this. With enough // verbosity (5), they can discover the mismatch details, // should an expected autocast expression fail to resolve. // // There are tapset functions like task_dentry_path() that // have some harmless polymorphism over variables. These // are protected by @defined() guards which are resolved at // a pass later than this one. That one would always warn, // without offering any possible user action to help. // this->session.print_warning(_("Potential type mismatch in reassignment"), e->tok); resolve_details(e->tok, null_type, e->type_details); resolve_details(e->referent->tok, null_type, e->referent->type_details); } else if (e->type_details && !e->referent->type_details) resolve_details(e->referent->tok, e->type_details, e->referent->type_details); else if (!e->type_details && e->referent->type_details) resolve_details(e->tok, e->referent->type_details, e->type_details); } } void typeresolution_info::visit_target_register (target_register* e) { if (t != pe_long) invalid (e->tok, t); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_target_deref (target_deref* e) { // Both the target_deref result as well as the address must both be longs. if (t != pe_long) invalid (e->tok, t); e->addr->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_target_bitfield (target_bitfield*) { // These are all expanded much earlier. abort(); } void typeresolution_info::visit_target_symbol (target_symbol* e) { // This occurs only if a target symbol was not resolved over in // tapset.cxx land, that error was properly suppressed, and the // later unused-expression-elimination pass didn't get rid of it // either. So we have a target symbol that is believed to be of // genuine use, yet unresolved by the provider. // // PR18079, or it can happen if a $target expression is nested within // a @defined() test that has not yet been resolved (but can be soon). if (! assert_resolvability) { num_still_unresolved ++; return; } if (session.verbose > 2) { clog << _("Resolution problem with "); if (current_function) { clog << "function " << current_function->name << endl; current_function->body->print (clog); clog << endl; } else if (current_probe) { clog << "probe " << *current_probe->sole_location() << endl; current_probe->body->print (clog); clog << endl; } else //TRANSLATORS: simply saying not an issue with a probe or function clog << _("other") << endl; } if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_("unresolved target-symbol expression"), e->tok)); } void typeresolution_info::visit_atvar_op (atvar_op* e) { // This occurs only if an @var() was not resolved over in // tapset.cxx land, that error was properly suppressed, and the // later unused-expression-elimination pass didn't get rid of it // either. So we have an @var() that is believed to be of // genuine use, yet unresolved by the provider. if (session.verbose > 2) { clog << _("Resolution problem with "); if (current_function) { clog << "function " << current_function->name << endl; current_function->body->print (clog); clog << endl; } else if (current_probe) { clog << "probe " << *current_probe->sole_location() << endl; current_probe->body->print (clog); clog << endl; } else //TRANSLATORS: simply saying not an issue with a probe or function clog << _("other") << endl; } if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_("unresolved @var() expression"), e->tok)); } void typeresolution_info::visit_defined_op (defined_op* e) { // PR18079: if a @defined is still around, it may have a parameter that // wasn't resolvable one way or another earlier. Maybe an autocast_op. // Let's give it a visit just in case. e->operand->visit(this); if (assert_resolvability) session.print_error (SEMANTIC_ERROR(_("unexpected @defined"), e->tok)); else num_still_unresolved ++; } void typeresolution_info::visit_probewrite_op(probewrite_op* e) { throw SEMANTIC_ERROR(_("unexpected @probewrite"), e->tok); } void typeresolution_info::visit_entry_op (entry_op* e) { throw SEMANTIC_ERROR(_("internal error: @entry is only valid in .return probes"), e->tok); } void typeresolution_info::visit_cast_op (cast_op* e) { // Like target_symbol, a cast_op shouldn't survive this far // unless it was not resolved and its value is really needed. if (e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else session.print_error (SEMANTIC_ERROR(_F("type definition '%s' not found in '%s'", e->type_name.to_string().c_str(), e->module.to_string().c_str()), e->tok)); } void typeresolution_info::visit_autocast_op (autocast_op* e) { // Like cast_op, a implicit autocast_op shouldn't survive this far // unless it was not resolved and its value is really needed. if (assert_resolvability && e->saved_conversion_error) session.print_error (* (e->saved_conversion_error)); else if (assert_resolvability) session.print_error (SEMANTIC_ERROR(_("unknown type in dereference"), e->tok)); t = pe_long; e->operand->visit (this); num_still_unresolved++; if (e->operand->type_details && e->operand->type_details->expandable()) num_available_autocasts++; } void typeresolution_info::visit_perf_op (perf_op* e) { // A perf_op should already be resolved if (t == pe_stats || t == pe_string) invalid (e->tok, t); e->type = pe_long; // XXX: ... but but but ... ::visit_defined_op interprets this ->type // as meaning that @defined(@perf("JUNK JUNK JUNK")) is valid. // The dwarf_var_expanding_visitor::visit_perf_op() code that validates // the JUNK parameter is not even called in time. // (There is no real need to visit our operand - by parser // construction, it's always a string literal, with its type already // set.) t = pe_string; e->operand->visit (this); } void typeresolution_info::visit_arrayindex (arrayindex* e) { symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); // Every hist_op has type [int]:int, that is to say, every hist_op // is a pseudo-one-dimensional integer array type indexed by // integers (bucket numbers). if (hist) { if (e->indexes.size() != 1) unresolved (e->tok); t = pe_long; e->indexes[0]->visit (this); if (e->indexes[0]->type != pe_long) unresolved (e->tok); hist->visit (this); if (e->type != pe_long) { e->type = pe_long; resolved (e->tok, e->type); } return; } // Now we are left with "normal" map inference and index checking. assert (array); assert (array->referent != 0); resolve_2types (e, array->referent, this, t); // now resolve the array indexes // if (e->referent->index_types.size() == 0) // // redesignate referent as array // e->referent->set_arity (e->indexes.size ()); if (e->indexes.size() != array->referent->index_types.size()) unresolved (e->tok); // symbol resolution should prevent this else for (unsigned i=0; iindexes.size(); i++) { if (e->indexes[i]) { expression* ee = e->indexes[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ft, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } } } void typeresolution_info::visit_functioncall (functioncall* e) { if (e->referents.empty()) throw SEMANTIC_ERROR (_F("internal error: unresolved function call to '%s'", e->function.to_string().c_str()), e->tok); exp_type original = t; for (unsigned fd = 0; fd < e->referents.size(); fd++) { t = original; // type may be changed by overloaded functions so restore it functiondecl* referent = e->referents[fd]; resolve_2types (e, referent, this, t, true); // accept unknown type if (e->type == pe_stats) invalid (e->tok, e->type); const exp_type_ptr& func_type = referent->type_details; if (func_type && referent->type == e->type && (!e->type_details || *func_type != *e->type_details)) resolve_details(e->tok, referent->type_details, e->type_details); // now resolve the function parameters if (e->args.size() != referent->formal_args.size()) unresolved (e->tok); // symbol resolution should prevent this else for (unsigned i=0; iargs.size(); i++) { expression* ee = e->args[i]; exp_type& ft = referent->formal_args[i]->type; const token* fe_tok = referent->formal_args[i]->tok; t = ft; ee->visit (this); exp_type at = ee->type; if (((at == pe_string) || (at == pe_long)) && ft == pe_unknown) { // propagate to formal arg ft = at; resolved (ee->tok, ft, referent->formal_args[i], i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (fe_tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, referent->formal_args[i], i); if (at == pe_unknown) unresolved (ee->tok); } } } void typeresolution_info::visit_block (block* e) { for (unsigned i=0; istatements.size(); i++) { t = pe_unknown; e->statements[i]->visit (this); } } void typeresolution_info::visit_try_block (try_block* e) { if (e->try_block) e->try_block->visit (this); if (e->catch_error_var) { t = pe_string; e->catch_error_var->visit (this); } if (e->catch_block) e->catch_block->visit (this); } void typeresolution_info::visit_embeddedcode (embeddedcode* s) { // PR11573. If we have survived thus far with a piece of embedded // code that requires uprobes, we need to track this. // // This is an odd place for this check, as opposed // to a separate 'optimization' pass, or c_unparser::visit_embeddedcode // over yonder in pass 3. However, we want to do it during pass 2 so // that cached sessions also get the uprobes treatment. if (! session.need_uprobes && s->tagged_p ("/* pragma:uprobes */")) { if (session.verbose > 2) clog << _("Activating uprobes support because /* pragma:uprobes */ seen.") << endl; session.need_uprobes = true; } // PR15065. Likewise, we need to detect /* pragma:tagged_dfa */ // before the gen_dfa_table pass. Again, the typechecking part of // pass 2 is a good place for this. if (! session.need_tagged_dfa && s->tagged_p("/* pragma:tagged_dfa */")) { if (session.verbose > 2) clog << _("Turning on DFA subexpressions because /* pragma:tagged_dfa */ seen") << endl; session.need_tagged_dfa = true; // TODOXXX throw SEMANTIC_ERROR (_("Tagged DFA support is not yet available"), s->tok); } } void typeresolution_info::visit_if_statement (if_statement* e) { t = pe_long; e->condition->visit (this); t = pe_unknown; e->thenblock->visit (this); if (e->elseblock) { t = pe_unknown; e->elseblock->visit (this); } } void typeresolution_info::visit_for_loop (for_loop* e) { t = pe_unknown; if (e->init) e->init->visit (this); t = pe_long; e->cond->visit (this); t = pe_unknown; if (e->incr) e->incr->visit (this); t = pe_unknown; e->block->visit (this); } void typeresolution_info::visit_foreach_loop (foreach_loop* e) { // See also visit_arrayindex. // This is different in that, being a statement, we can't assign // a type to the outer array, only propagate to/from the indexes // if (e->referent->index_types.size() == 0) // // redesignate referent as array // e->referent->set_arity (e->indexes.size ()); exp_type wanted_value = pe_unknown; symbol *array = NULL; hist_op *hist = NULL; classify_indexable(e->base, array, hist); if (hist) { if (e->indexes.size() != 1) unresolved (e->tok); t = pe_long; e->indexes[0]->visit (this); if (e->indexes[0]->type != pe_long) unresolved (e->tok); hist->visit (this); wanted_value = pe_long; } else { assert (array); if (e->indexes.size() != array->referent->index_types.size()) unresolved (e->tok); // symbol resolution should prevent this else { for (unsigned i=0; iindexes.size(); i++) { expression* ee = e->indexes[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ee->type, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } for (unsigned i=0; iarray_slice.size(); i++) if (e->array_slice[i]) { expression* ee = e->array_slice[i]; exp_type& ft = array->referent->index_types [i]; t = ft; ee->visit (this); exp_type at = ee->type; if ((at == pe_string || at == pe_long) && ft == pe_unknown) { // propagate to formal type ft = at; resolved (ee->tok, ee->type, array->referent, i); } if (at == pe_stats) invalid (ee->tok, at); if (ft == pe_stats) invalid (ee->tok, ft); if (at != pe_unknown && ft != pe_unknown && ft != at) mismatch (ee->tok, ee->type, array->referent, i); if (at == pe_unknown) unresolved (ee->tok); } } t = pe_unknown; array->visit (this); wanted_value = array->type; } if (e->value) { if (wanted_value == pe_stats) invalid(e->value->tok, wanted_value); else if (wanted_value != pe_unknown) check_arg_type(wanted_value, e->value); else { t = pe_unknown; e->value->visit (this); } } /* Prevent @sum etc. aggregate sorting on non-statistics arrays. */ if (wanted_value != pe_unknown) if (e->sort_aggr != sc_none && wanted_value != pe_stats) invalid (array->tok, wanted_value); if (e->limit) { t = pe_long; e->limit->visit (this); } t = pe_unknown; e->block->visit (this); } void typeresolution_info::visit_null_statement (null_statement*) { } void typeresolution_info::visit_expr_statement (expr_statement* e) { t = pe_unknown; e->value->visit (this); } struct delete_statement_typeresolution_info: public throwing_visitor { typeresolution_info *parent; delete_statement_typeresolution_info (typeresolution_info *p): throwing_visitor (_("invalid operand of delete expression")), parent (p) {} void visit_arrayindex (arrayindex* e) { parent->visit_arrayindex (e); } void visit_symbol (symbol* e) { exp_type ignored = pe_unknown; assert (e->referent != 0); resolve_2types (e, e->referent, parent, ignored); } }; void typeresolution_info::visit_delete_statement (delete_statement* e) { delete_statement_typeresolution_info di (this); t = pe_unknown; e->value->visit (&di); } void typeresolution_info::visit_next_statement (next_statement*) { } void typeresolution_info::visit_break_statement (break_statement*) { } void typeresolution_info::visit_continue_statement (continue_statement*) { } void typeresolution_info::visit_array_in (array_in* e) { // all unary operators only work on numerics exp_type t1 = t; t = pe_unknown; // array value can be anything e->operand->visit (this); if (t1 == pe_unknown && e->type != pe_unknown) ; // already resolved else if (t1 == pe_string || t1 == pe_stats) mismatch (e->tok, t1, pe_long); else if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } } void typeresolution_info::visit_return_statement (return_statement* e) { // This is like symbol, where the referent is // the return value of the function. // translation pass will print error if (current_function == 0) return; exp_type& e_type = current_function->type; t = current_function->type; if (!e->value) { if (e_type != pe_unknown) mismatch (e->tok, pe_unknown, current_function); return; } e->value->visit (this); if (e_type != pe_unknown && e->value->type != pe_unknown && e_type != e->value->type) mismatch (e->value->tok, e->value->type, current_function); if (e_type == pe_unknown && (e->value->type == pe_long || e->value->type == pe_string)) { // propagate non-statistics from value e_type = e->value->type; resolved (e->value->tok, e_type, current_function); } if (e->value->type == pe_stats) invalid (e->value->tok, e->value->type); const exp_type_ptr& value_type = e->value->type_details; if (value_type && current_function->type == e->value->type) { exp_type_ptr& func_type = current_function->type_details; if (!func_type) // The function can take on the type details of the return value. resolve_details(current_function->tok, value_type, func_type); else if (*func_type != *value_type && *func_type != *null_type) // Conflicting return types? NO TYPE FOR YOU! resolve_details(current_function->tok, null_type, func_type); } } void typeresolution_info::visit_print_format (print_format* e) { size_t unresolved_args = 0; if (e->hist) { e->hist->visit(this); } else if (e->print_with_format) { // If there's a format string, we can do both inference *and* // checking. // First we extract the subsequence of formatting components // which are conversions (not just literal string components) unsigned expected_num_args = 0; std::vector components; for (size_t i = 0; i < e->components.size(); ++i) { if (e->components[i].type == print_format::conv_unspecified) throw SEMANTIC_ERROR (_("Unspecified conversion in print operator format string"), e->tok); else if (e->components[i].type == print_format::conv_literal) continue; components.push_back(e->components[i]); ++expected_num_args; if (e->components[i].widthtype == print_format::width_dynamic) ++expected_num_args; if (e->components[i].prectype == print_format::prec_dynamic) ++expected_num_args; } // Then we check that the number of conversions and the number // of args agree. if (expected_num_args != e->args.size()) throw SEMANTIC_ERROR (_("Wrong number of args to formatted print operator"), e->tok); // Then we check that the types of the conversions match the types // of the args. unsigned argno = 0; for (size_t i = 0; i < components.size(); ++i) { // Check the dynamic width, if specified if (components[i].widthtype == print_format::width_dynamic) { check_arg_type (pe_long, e->args[argno]); ++argno; } // Check the dynamic precision, if specified if (components[i].prectype == print_format::prec_dynamic) { check_arg_type (pe_long, e->args[argno]); ++argno; } exp_type wanted = pe_unknown; switch (components[i].type) { case print_format::conv_unspecified: case print_format::conv_literal: assert (false); break; case print_format::conv_pointer: case print_format::conv_number: case print_format::conv_binary: case print_format::conv_char: case print_format::conv_memory: case print_format::conv_memory_hex: wanted = pe_long; break; case print_format::conv_string: wanted = pe_string; break; } assert (wanted != pe_unknown); check_arg_type (wanted, e->args[argno]); ++argno; } } else { // Without a format string, the best we can do is require that // each argument resolve to a concrete type. for (size_t i = 0; i < e->args.size(); ++i) { t = pe_unknown; e->args[i]->visit (this); if (e->args[i]->type == pe_unknown) { unresolved (e->args[i]->tok); ++unresolved_args; } } } if (unresolved_args == 0) { if (e->type == pe_unknown) { if (e->print_to_stream) e->type = pe_long; else e->type = pe_string; resolved (e->tok, e->type); } } else { e->type = pe_unknown; unresolved (e->tok); } } void typeresolution_info::visit_stat_op (stat_op* e) { t = pe_stats; e->stat->visit (this); if (e->type == pe_unknown) { e->type = pe_long; resolved (e->tok, e->type); } else if (e->type != pe_long) mismatch (e->tok, pe_long, e->type); } void typeresolution_info::visit_hist_op (hist_op* e) { t = pe_stats; e->stat->visit (this); } void typeresolution_info::check_arg_type (exp_type wanted, expression* arg) { t = wanted; arg->visit (this); if (arg->type == pe_unknown) { arg->type = wanted; resolved (arg->tok, arg->type); } else if (arg->type != wanted) { mismatch (arg->tok, wanted, arg->type); } } void typeresolution_info::check_local (vardecl* v) { if (v->arity != 0) { num_still_unresolved ++; if (assert_resolvability) session.print_error (SEMANTIC_ERROR (_("array locals not supported, missing global declaration? "), v->tok)); } if (v->type == pe_unknown) unresolved (v->tok); else if (v->type == pe_stats) { num_still_unresolved ++; if (assert_resolvability) session.print_error (SEMANTIC_ERROR (_("stat locals not supported, missing global declaration? "), v->tok)); } else if (!(v->type == pe_long || v->type == pe_string)) invalid (v->tok, v->type); } void typeresolution_info::unresolved (const token* tok) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 0) { stringstream msg; msg << _("unresolved type "); session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } } void typeresolution_info::invalid (const token* tok, exp_type pe) { num_still_unresolved ++; if (assert_resolvability) { stringstream msg; if (tok && tok->type == tok_operator) msg << _("invalid operator"); else msg << _("invalid type ") << pe; session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } } void typeresolution_info::mismatch (const binary_expression* e) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 1) { stringstream msg; msg << _F("type mismatch: left and right sides don't agree (%s vs %s)", lex_cast(e->left->type).c_str(), lex_cast(e->right->type).c_str()); session.print_error (SEMANTIC_ERROR (msg.str(), e->tok)); } else if (!assert_resolvability) mismatch_complexity = max(1, mismatch_complexity); } /* tok token where mismatch occurred * t1 type we expected (the 'good' type) * t2 type we received (the 'bad' type) * */ void typeresolution_info::mismatch (const token* tok, exp_type t1, exp_type t2) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 2) { stringstream msg; msg << _F("type mismatch: expected %s", lex_cast(t1).c_str()); if (t2 != pe_unknown) msg << _F(" but found %s", lex_cast(t2).c_str()); session.print_error (SEMANTIC_ERROR (msg.str(), tok)); } else if (!assert_resolvability) mismatch_complexity = max(2, mismatch_complexity); } /* tok token where the mismatch happened * type type we received (the 'bad' type) * decl declaration of mismatched symbol * index if index-based (array index or function arg) * */ void typeresolution_info::mismatch (const token *tok, exp_type type, const symboldecl* decl, int index) { num_still_unresolved ++; if (assert_resolvability && mismatch_complexity <= 3) { assert(decl != NULL); // If mismatch is against a function parameter from within the function // itself (rather than a function call), then the index will be -1. We // check here if the decl corresponds to one of the params and if so, // adjust the index. if (current_function != NULL && index == -1) { vector& args = current_function->formal_args; for (unsigned i = 0; i < args.size() && index < 0; i++) if (args[i] == decl) index = i; } // get the declaration's original type and token const resolved_type *original = NULL; for (vector::const_iterator it = resolved_types.begin(); it != resolved_types.end() && original == NULL; ++it) { if (it->decl == decl && it->index == index) original = &(*it); } // print basic mismatch msg if we couldn't find the decl (this can happen // for explicitly typed decls e.g. myvar:long or for fabricated (already // resolved) decls e.g. __perf_read_*) if (original == NULL) { session.print_error (SEMANTIC_ERROR ( _F("type mismatch: expected %s but found %s", lex_cast(type).c_str(), lex_cast(decl->type).c_str()), tok)); return; } // print where mismatch happened and chain with origin of decl type // resolution stringstream msg; if (index >= 0) msg << _F("index %d ", index); msg << _F("type mismatch (%s)", lex_cast(type).c_str()); semantic_error err(ERR_SRC, msg.str(), tok); stringstream chain_msg; chain_msg << _("type"); if (index >= 0) chain_msg << _F(" of index %d", index); chain_msg << _F(" was first inferred here (%s)", lex_cast(decl->type).c_str()); semantic_error chain(ERR_SRC, chain_msg.str(), original->tok); err.set_chain(chain); session.print_error (err); } else if (!assert_resolvability) mismatch_complexity = max(3, mismatch_complexity); } /* tok token where resolution occurred * type type to which we resolved * decl declaration of resolved symbol * index if index-based (array index or function arg) * */ void typeresolution_info::resolved (const token *tok, exp_type t, const symboldecl* decl, int index) { num_newly_resolved ++; if (session.verbose > 4) clog << "resolved type " << t << " to " << *tok << endl; // We only use the resolved_types vector to give better mismatch messages // involving symbols. So don't bother adding it if we're not given a decl if (decl != NULL) { // As a fail-safe, if the decl & index is already in the vector, then // modify it instead of adding another one to ensure uniqueness. This // should never happen since we only call resolved once for each decl & // index, but better safe than sorry. (IE. if it does happen, better have // the latest resolution info for better mismatch reporting later). for (unsigned i = 0; i < resolved_types.size(); i++) { if (resolved_types[i].decl == decl && resolved_types[i].index == index) { resolved_types[i].tok = tok; return; } } resolved_type res(tok, decl, index); resolved_types.push_back(res); } } void typeresolution_info::resolve_details (const token* tok, const exp_type_ptr& src, exp_type_ptr& dest) { num_newly_resolved ++; dest = src; if (session.verbose > 4) clog << "resolved type details " << *dest << " to " << *tok << endl; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/elaborate.h000066400000000000000000000512521414446751200155400ustar00rootroot00000000000000// -*- C++ -*- // Copyright (C) 2005-2019 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. #ifndef ELABORATE_H #define ELABORATE_H #include "staptree.h" #include "parse.h" #include "stringtable.h" #include "session.h" #include #include //#include #include #include #include #include extern "C" { #include } #include "privilege.h" struct recursive_expansion_error : public semantic_error { ~recursive_expansion_error () throw () {} recursive_expansion_error (const std::string& msg, const token* t1=0): SEMANTIC_ERROR (msg, t1) {} recursive_expansion_error (const std::string& msg, const token* t1, const token* t2): SEMANTIC_ERROR (msg, t1, t2) {} }; // ------------------------------------------------------------------------ struct derived_probe; class match_node; struct symresolution_info: public traversing_visitor { protected: systemtap_session& session; symresolution_info* saved_session_symbol_resolver; bool unmangled_p; public: functiondecl* current_function; probe* current_probe; symresolution_info (systemtap_session& s, bool omniscient_unmangled = false); ~symresolution_info (); vardecl* find_var (const std::string& name, int arity, const token *tok); std::vector find_functions (functioncall *call, const std::string& name, unsigned arity, const token *tok); std::set collect_functions(void); void visit_block (block *s); void visit_symbol (symbol* e); void visit_foreach_loop (foreach_loop* e); void visit_arrayindex (arrayindex* e); void visit_arrayindex (arrayindex *e, bool wildcard_ok); void visit_functioncall (functioncall* e); void visit_embeddedcode (embeddedcode* s); void visit_embedded_expr (embedded_expr* e); void visit_delete_statement (delete_statement* s); void visit_array_in (array_in *e); }; struct typeresolution_info: public visitor { typeresolution_info (systemtap_session& s); systemtap_session& session; unsigned num_newly_resolved; unsigned num_still_unresolved; unsigned num_available_autocasts; bool assert_resolvability; int mismatch_complexity; functiondecl* current_function; derived_probe* current_probe; // Holds information about a type we resolved (see PR16097) struct resolved_type { const token *tok; const symboldecl *decl; int index; resolved_type(const token *ct, const symboldecl *cdecl, int cindex): tok(ct), decl(cdecl), index(cindex) {} }; // Holds an element each time we resolve a decl. Unique by decl & index. // Possible values: // - resolved function type -> decl = functiondecl, index = -1 // - resolved function arg type -> decl = vardecl, index = index of arg // - resolved array/var type -> decl = vardecl, index = -1 // - resolved array index type -> decl = vardecl, index = index of type std::vector resolved_types; // see PR16097 void check_arg_type (exp_type wanted, expression* arg); void check_local (vardecl* v); void unresolved (const token* tok); void invalid (const token* tok, exp_type t); void mismatch (const binary_expression* e); void mismatch (const token* tok, exp_type t1, exp_type t2); void mismatch (const token* tok, exp_type type, const symboldecl* decl, int index = -1); void resolved (const token* tok, exp_type type, const symboldecl* decl = NULL, int index = -1); void resolve_details (const token* tok, const exp_type_ptr& src, exp_type_ptr& dest); exp_type t; // implicit parameter for nested visit call; may clobber // Upon entry to one of the visit_* calls, the incoming // `t' value is the type inferred for that node from // context. It may match or conflict with the node's // preexisting type, or it may be unknown. // Expressions with NULL type_details may be as-yet-unknown. // If they have this null_type, they're explicitly *not* a rich type. const exp_type_ptr null_type; // PR24199 NB: below functions should NOT throw exceptions on a // routine type resolution failure. Instead, session.print_error() // and keep on chugging. void visit_block (block* s); void visit_try_block (try_block* s); void visit_embeddedcode (embeddedcode* s); void visit_null_statement (null_statement* s); void visit_expr_statement (expr_statement* s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); void visit_next_statement (next_statement* s); void visit_break_statement (break_statement* s); void visit_continue_statement (continue_statement* s); void visit_literal_string (literal_string* e); void visit_literal_number (literal_number* e); void visit_embedded_expr (embedded_expr* e); void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_pre_crement (pre_crement* e); void visit_post_crement (post_crement* e); void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_array_in (array_in* e); void visit_regex_query (regex_query* e); void visit_compound_expression (compound_expression* e); void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_ternary_expression (ternary_expression* e); void visit_assignment (assignment* e); void visit_symbol (symbol* e); void visit_target_register (target_register* e); void visit_target_deref (target_deref* e); void visit_target_bitfield (target_bitfield* e); void visit_target_symbol (target_symbol* e); void visit_arrayindex (arrayindex* e); void visit_functioncall (functioncall* e); void visit_print_format (print_format* e); void visit_stat_op (stat_op* e); void visit_hist_op (hist_op* e); void visit_cast_op (cast_op* e); void visit_autocast_op (autocast_op* e); void visit_atvar_op (atvar_op* e); void visit_defined_op (defined_op* e); void visit_probewrite_op(probewrite_op* e); void visit_entry_op (entry_op* e); void visit_perf_op (perf_op* e); // PR24199 NB: above functions should NOT throw exceptions on a // routine type resolution failure. Instead, session.print_error() // and keep on chugging. }; // ------------------------------------------------------------------------ // A derived_probe is a probe that has been elaborated by // binding to a matching provider. The locations std::vector // may be smaller or larger than the base probe, since a // provider may transform it. class translator_output; struct derived_probe_group; struct derived_probe: public probe { derived_probe (probe* b, probe_point* l, bool rewrite_loc=false); probe* base; // the original parsed probe probe_point* base_pp; // the probe_point that led to this derivation derived_probe_group* group; // the group we belong to virtual ~derived_probe () {} virtual void join_group (systemtap_session& s) = 0; virtual probe_point* sole_location () const; virtual probe_point* script_location () const; virtual void printsig (std::ostream &o) const cxx_override; virtual void printsig_nonest (std::ostream &o) const; // return arguments of probe if there virtual void getargs (std::list &) const {} void printsig_nested (std::ostream &o) const; virtual void collect_derivation_chain (std::vector &probes_list) const cxx_override; virtual void collect_derivation_pp_chain (std::vector &pp_list) const cxx_override; std::string derived_locations (bool firstFrom = true); virtual void print_dupe_stamp(std::ostream&) {} // To aid duplication elimination, print a stamp which uniquely identifies // the code that will be added to the probe body. (Doesn't need to be the // actual code...) virtual void initialize_probe_context_vars (translator_output*) {} // From within unparser::emit_probe, initialized any extra variables // in this probe's context locals. virtual void emit_probe_local_init (systemtap_session&, translator_output*) {} // From within unparser::emit_probe, emit any extra processing block // for this probe. virtual void emit_privilege_assertion (translator_output*); // From within unparser::emit_probe, emit any unprivileged mode // checking for this probe. public: static void emit_common_header (translator_output* o); // from c_unparser::emit_common_header // XXX: probably can move this stuff to a probe_group::emit_module_decls static void emit_process_owner_assertion (translator_output*); // From within unparser::emit_probe, emit a check that the current // process belongs to the user. static void print_dupe_stamp_unprivileged(std::ostream& o); static void print_dupe_stamp_unprivileged_process_owner(std::ostream& o); virtual bool needs_global_locks () { return true; } // by default, probes need locks around global variables // Location of semaphores to activate sdt probes Dwarf_Addr sdt_semaphore_addr; // perf.counter probes that this probe references std::set perf_counter_refs; // index into session.probes[], set and used during translation unsigned session_index; // List of other derived probes whose conditions may be affected by // this probe. std::set probes_with_affected_conditions; virtual void use_internal_buffer(const std::string&) {} }; // ------------------------------------------------------------------------ struct unparser; // Various derived classes derived_probe_group manage the // registration/invocation/unregistration of sibling probes. struct derived_probe_group { virtual ~derived_probe_group () {} virtual void emit_kernel_module_init (systemtap_session&) {} // Similar to emit_module_init(), but code emitted here gets run // with root access. The _init-generated code may assume that it is // called only once. If that code fails at run time, it must set // rc=1 and roll back any partial initializations, for its _exit // friend will NOT be invoked. The generated code may use // pre-declared "int i, j;". Note that the message transport isn't // available, so printk()/errk() is the only output option. virtual void emit_kernel_module_exit (systemtap_session&) {} // Similar to emit_module_exit(), but code emitted here gets run // with root access. The _exit-generated code may assume that it is // executed exactly zero times (if the _init-generated code failed) // or once. (_exit itself may be called a few times, to generate // the code in a few different places in the probe module.) The // generated code may use pre-declared "int i, j;". Note that the // message transport isn't available, so printk()/errk() is the only // output option. virtual void emit_module_decls (systemtap_session& s) = 0; // The _decls-generated code may assume that declarations such as // the context, embedded-C code, function and probe handler bodies // are all already generated. That is, _decls is called near the // end of the code generation process. It should minimize the // number of separate variables (and to a lesser extent, their // size). virtual void emit_module_init (systemtap_session& s) = 0; // The _init-generated code may assume that it is called only once. // If that code fails at run time, it must set rc=1 and roll back // any partial initializations, for its _exit friend will NOT be // invoked. The generated code may use pre-declared "int i, j;" // and set "const char* probe_point;". virtual void emit_module_post_init (systemtap_session&) {} // The emit_module_post_init() code is called once session_state is // set to running. virtual void emit_module_refresh (systemtap_session&) {} // The _refresh-generated code may be called multiple times during // a session run, bracketed by _init and _exit calls. // Upon failure, it must set enough state so that // a subsequent _exit call will clean up everything. // The generated code may use pre-declared "int i, j;". virtual void emit_module_exit (systemtap_session& s) = 0; // The _exit-generated code may assume that it is executed exactly // zero times (if the _init-generated code failed) or once. (_exit // itself may be called a few times, to generate the code in a few // different places in the probe module.) // The generated code may use pre-declared "int i, j;". // Support for on-the-fly operations is implemented in the runtime using a // workqueue which calls module_refresh(). Depending on the probe type, it may // not be safe to manipulate the workqueue in the context of the probe handler // (otf_safe_context() = false). In this case, we rely on a background timer // to schedule the work. Otherwise, if the probe context is safe // (otf_safe_context() = true), we can directly schedule the work. virtual bool otf_supported (systemtap_session&) { return false; } // Support for on-the-fly arming/disarming depends on probe type virtual bool otf_safe_context (systemtap_session&) { return false; } // Whether this probe type occurs in a safe context. To be safe, we default to // no, which means we'll rely on a background timer. }; // ------------------------------------------------------------------------ typedef std::map literal_map_t; struct derived_probe_builder { virtual void build(systemtap_session & sess, probe* base, probe_point* location, literal_map_t const & parameters, std::vector & finished_results) = 0; virtual void build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const & parameters, std::vector & finished_results, std::vector const & suffix); virtual ~derived_probe_builder() {} virtual void build_no_more (systemtap_session &) {} virtual bool is_alias () const { return false; } virtual std::string name() = 0; static bool has_null_param (literal_map_t const & parameters, interned_string key); static bool get_param (literal_map_t const & parameters, interned_string key, interned_string& value); static bool get_param (literal_map_t const & parameters, interned_string key, int64_t& value); static bool has_param (literal_map_t const & parameters, interned_string key); }; struct match_key { interned_string name; bool have_parameter; exp_type parameter_type; match_key(interned_string n); match_key(probe_point::component const & c); match_key & with_number(); match_key & with_string(); std::string str() const; bool operator<(match_key const & other) const; bool globmatch(match_key const & other) const; }; class match_node { typedef std::map sub_map_t; typedef std::map::iterator sub_map_iterator_t; sub_map_t sub; std::vector ends; public: match_node(); void find_and_build (systemtap_session& s, probe* p, probe_point *loc, unsigned pos, std::vector& results, std::set& builders); std::string suggest_functors(systemtap_session& s, std::string functor); void try_suffix_expansion (systemtap_session& s, probe *p, probe_point *loc, unsigned pos, std::vector& results); void build_no_more (systemtap_session &s); void dump (systemtap_session &s, const std::string &name = ""); match_node* bind(match_key const & k); match_node* bind(interned_string k); match_node* bind_str(std::string const & k); match_node* bind_num(std::string const & k); match_node* bind_privilege(privilege_t p = privilege_t (pr_stapdev | pr_stapsys)); void bind(derived_probe_builder* e); private: privilege_t privilege; }; // ------------------------------------------------------------------------ struct alias_expansion_builder : public derived_probe_builder { probe_alias * alias; alias_expansion_builder(probe_alias * a) : alias(a) {} virtual void build(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, std::vector & finished_results); virtual void build_with_suffix(systemtap_session & sess, probe * use, probe_point * location, literal_map_t const &, std::vector & finished_results, std::vector const & suffix); virtual bool is_alias () const { return true; } virtual std::string name() { return "alias expansion builder"; } bool checkForRecursiveExpansion (probe *use); }; // ------------------------------------------------------------------------ /* struct systemtap_session moved to session.h */ int semantic_pass (systemtap_session& s); void derive_probes (systemtap_session& s, probe *p, std::vector& dps, bool optional = false, bool rethrow_errors = false); // A helper we use here and in translate, for pulling symbols out of lvalue // expressions. symbol * get_symbol_within_expression (expression *e); struct unparser; struct probewrite_evaluator: public update_visitor { systemtap_session& session; statement* probe_body; probewrite_evaluator(systemtap_session& s, statement* probe_body): session(s), probe_body(probe_body) {} void visit_probewrite_op(probewrite_op* e); }; struct const_folder: public update_visitor { systemtap_session& session; bool& relaxed_p; bool collapse_defines_p; const_folder(systemtap_session& s, bool& r, bool collapse_defines = false): update_visitor(s.verbose), session(s), relaxed_p(r), collapse_defines_p(collapse_defines), last_number(0), last_string(0), last_target_symbol(0) {} literal_number* last_number; literal_number* get_number(expression*& e); void visit_literal_number (literal_number* e); literal_string* last_string; literal_string* get_string(expression*& e); void visit_literal_string (literal_string* e); void get_literal(expression*& e, literal_number*& n, literal_string*& s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); void visit_foreach_loop (foreach_loop* s); void visit_binary_expression (binary_expression* e); void visit_unary_expression (unary_expression* e); void visit_logical_or_expr (logical_or_expr* e); void visit_logical_and_expr (logical_and_expr* e); void visit_compound_expression (compound_expression* e); // void visit_regex_query (regex_query* e); // XXX: would require executing dfa at compile-time void visit_comparison (comparison* e); void visit_concatenation (concatenation* e); void visit_ternary_expression (ternary_expression* e); void visit_defined_op (defined_op* e); target_symbol* last_target_symbol; target_symbol* get_target_symbol(expression*& e); void visit_target_symbol (target_symbol* e); }; // Run the given code filter visitors against the given body. // Repeat until they all report having relaxed. template void update_visitor_loop (systemtap_session& sess, std::vector& filters, T& body) { bool relaxed_p; do { relaxed_p = true; for (unsigned k=0; kreset (); filters[k]->replace (body); relaxed_p = (relaxed_p && filters[k]->relaxed()); } if (! relaxed_p && sess.verbose > 3) std::clog << _("Rerunning the code filters.") << std::endl; } while (! relaxed_p); } // Run given code filter visitor, then a round of const folder, over and over, until they chill. template void var_expand_const_fold_loop(systemtap_session& sess, X& body, Y& v) { bool relaxed_p = false; const_folder cf (sess, relaxed_p); std::vector k; k.push_back (& v); k.push_back (& cf); update_visitor_loop (sess, k, body); } #endif // ELABORATE_H /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ systemtap-4.6/emacs/000077500000000000000000000000001414446751200145145ustar00rootroot00000000000000systemtap-4.6/emacs/systemtap-init.el000066400000000000000000000003201414446751200200230ustar00rootroot00000000000000(autoload 'systemtap-mode "systemtap-mode.el") (setq auto-mode-alist (append '(("\\.stp$" . systemtap-mode)) auto-mode-alist)) (setq auto-mode-alist (append '(("\\.stpm$" . systemtap-mode)) auto-mode-alist)) systemtap-4.6/emacs/systemtap-mode.el000066400000000000000000000132761414446751200200220ustar00rootroot00000000000000;;; systemtap-mode.el --- A mode for SystemTap ;; Copyright (C) 2008, 2020 Tomoki Sekiyama ;; Copyright (C) 2012 Rüdiger Sonderfeld ;; Authors: 2008 Tomoki Sekiyama ;; 2012 Rüdiger Sonderfeld ;; Maintainer: ruediger@c-plusplus.de ;; Keywords: tools languages ;; Version: 0.02 ;; URL: https://github.com/ruediger/systemtap-mode ;; This file is NOT part of GNU Emacs. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This code is based on the original systemtap-mode.el written by ;; Tomoki Sekiyama. It can be found at ;; http://coderepos.org/share/browser/lang/elisp/systemtap-mode/systemtap-mode.el?format=txt ;; TODO: ;; - indent embedded-C %{ ... %} correctly ;; - add parameter for indentation ;; - ... ;;; Code: (defconst systemtap-mode-version "0.02" "SystemTap Mode version number.") (defgroup systemtap-mode nil "A mode for SystemTap." :prefix "systemtap-" :group 'tools :group 'languages) (require 'cc-mode) (require 'cc-awk) (eval-when-compile (require 'cc-langs) (require 'cc-fonts) (require 'cl-lib)) (eval-and-compile (c-add-language 'systemtap-mode 'awk-mode)) ;; Syntax definitions for SystemTap (c-lang-defconst c-primitive-type-kwds systemtap '("string" "long" "global" "private")) (c-lang-defconst c-modifier-kwds systemtap (append '("probe" "function") (c-lang-const c-modifier-kwds))) (c-lang-defconst c-block-stmt-2-kwds systemtap '("else" "for" "foreach" "if" "while")) (c-lang-defconst c-simple-stmt-kwds systemtap '("break" "continue" "delete" "next" "return")) (c-lang-defconst c-identifier-syntax-modifications systemtap '((?. . "_") (?' . "."))) (defcustom systemtap-font-lock-extra-types nil "Font-lock extra types for SystemTap mode." :group 'systemtap-mode) (defconst systemtap-font-lock-keywords-1 (c-lang-const c-matchers-1 systemtap) "Minimal highlighting for SystemTap mode.") (defconst systemtap-font-lock-keywords-2 (c-lang-const c-matchers-2 systemtap) "Fast normal highlighting for SystemTap mode.") (defconst systemtap-font-lock-keywords-3 (c-lang-const c-matchers-3 systemtap) "Accurate normal highlighting for SystemTap mode.") (defvar systemtap-font-lock-keywords systemtap-font-lock-keywords-3 "Default expressions to highlight in SystemTap mode.") (defvar systemtap-mode-syntax-table nil "Syntax table used in systemtap-mode buffers.") (unless systemtap-mode-syntax-table (setq systemtap-mode-syntax-table (funcall (c-lang-const c-make-mode-syntax-table systemtap)))) (defvar systemtap-mode-abbrev-table nil "Abbreviation table used in systemtap-mode buffers.") (defvar systemtap-mode-map (let ((map (c-make-inherited-keymap))) (define-key map "\C-ce" 'systemtap-execute-script) (define-key map "\C-cc" 'systemtap-interrupt-script) map) "Keymap used in systemtap-mode buffers.") (easy-menu-define systemtap-menu systemtap-mode-map "SystemTap Mode Commands" (cons "SystemTap" (append '(["Execute This Script" systemtap-execute-script t] ["Interrupt Execution of Script" systemtap-interrupt-script (get-process "systemtap-script")] "----") (c-lang-const c-mode-menu systemtap)))) ;; Execution function of Current Script (defvar systemtap-buffer-name "*SystemTap*" "Name of the SystemTap execution buffer.") (defcustom systemtap-stap-program "stap" "SystemTap's stap program to execute scripts." :type 'file :group 'systemtap-mode) (defcustom systemtap-stap-options '("-v") "A list of options to give to stap." :type '(repeat string) :group 'systemtap-mode) (defun systemtap-execute-script () "Execute current SystemTap script." (interactive) (when (get-buffer systemtap-buffer-name) (kill-buffer systemtap-buffer-name)) (get-buffer-create systemtap-buffer-name) (display-buffer systemtap-buffer-name) (let* ((file-name (buffer-file-name)) (options (append systemtap-stap-options (list file-name)))) (apply #'start-process "systemtap-script" systemtap-buffer-name systemtap-stap-program options)) (message "Execution of SystemTap script started.")) (defun systemtap-interrupt-script () "Interrupt running SystemTap script." (interactive) (interrupt-process "systemtap-script") (message "SystemTap script is interrupted.")) (add-to-list 'auto-mode-alist '("\\.stp\\'" . systemtap-mode)) (add-to-list 'auto-mode-alist '("\\.stpm\\'" . systemtap-mode)) (require 'simple) (define-derived-mode systemtap-mode prog-mode "SystemTap" "Major mode for editing SystemTap scripts. Key bindings: \\{systemtap-mode-map}" :group 'systemtap :syntax-table systemtap-mode-syntax-table :abbrev-table systemtap-mode-abbrev-table (c-initialize-cc-mode t) (use-local-map systemtap-mode-map) (c-init-language-vars systemtap-mode) (c-common-init 'systemtap-mode) (easy-menu-add systemtap-menu) (c-run-mode-hooks 'c-mode-common-hook) (set (make-local-variable 'comment-start) "#") (c-update-modeline)) (provide 'systemtap-mode) ;;; systemtap-mode.el ends here systemtap-4.6/git_version.sh000077500000000000000000000270231414446751200163170ustar00rootroot00000000000000#!/bin/sh # # Generate some basic versioning information which can be piped to a header. # # Copyright (c) 2006-2007 Luc Verhaegen # Copyright (C) 2007 Hans Ulrich Niedermann # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), # to deal in the Software without restriction, including without limitation # the rights to use, copy, modify, merge, publish, distribute, sublicense, # and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. # # This script is based on the one written for xf86-video-unichrome by # Luc Verhaegen, but was rewritten almost completely by Hans Ulrich # Niedermann. The script contains a few bug fixes from Egbert Eich, # Matthias Hopf, Joerg Sonnenberger, and possibly others. # # The author thanks the nice people on #git for the assistance. # # Simple testing of this script: # /sbin/busybox sh git_version.sh --example > moo.c \ # && gcc -Wall -Wextra -Wno-unused -o moo moo.c \ # && ./moo # (bash should also do) # # For how to hook this up to your automake- and/or imake-based build # system, best take a look at how the RadeonHD.am and/or RadeonHD.tmpl # work in the xf86-video-radeonhd build system. For non-recursive make, # you can probably make things a little bit simpler. # # KNOWN BUGS: # * Uses hyphenated ("git-foo-bar") program names, which git upstream # have declared deprecated. # # Help messages USAGE="[